remover a permissão de gravação não impede que o root grave no arquivo

31

Acabei de notar na minha máquina Ubuntu (sistema de arquivos ext3) que remover permissões de gravação de um arquivo não impede que o root grave nele.

Essa é uma regra geral de permissões de arquivo UNIX? Ou específico para o Ubuntu? Ou uma configuração incorreta na minha máquina?

# touch abc
# chmod ugo-w abc
# python
Python 2.6.4 (r264: 75706, 7 de dezembro de 2009, 18:45:15) 
[GCC 4.4.1] no linux2
Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações.
>>> open ('abc', 'w'). write ('AAA \ n')
>>> 
# cat abc
AAA

A gravação no arquivo falha (conforme o esperado) se eu fizer isso na minha conta de usuário normal.

  1. Esse comportamento é normal?

  2. Existe uma maneira de impedir que o root grave acidentalmente um arquivo? (De preferência, usando mecanismos normais do sistema de arquivos, não o AppArmor etc.)

Por favor, ensine-me sobre algo que eu definitivamente não entendo.

NOTA: Entendo que o root tem controle total sobre o sistema e pode, por exemplo, alterar as permissões em qualquer arquivo. Minha pergunta é se as permissões atualmente definidas são aplicadas no código em execução como root . A idéia é que o usuário root se impeça de gravar acidentalmente em um arquivo.

NOTA: Também entendo que um não deve estar conectado como root para operações normais. Acabei de perceber esse comportamento e estou lhe perguntando sobre isso.

laramichaels
fonte

Respostas:

46

1) Este é um comportamento normal. root tem acesso rw a todos os arquivos o tempo todo.

2) Você pode proteger um arquivo mesmo da raiz (ação não intencional, mas acidental de qualquer maneira) usando

chattr +i filename.ext

Isso é "alterar atributos adicionar imutáveis". Para remover a proteção:

chattr -i filename.ext

dê uma olhada man chattrpara mais informações

brice
fonte
@ brice: muito obrigado. aborda diretamente minha pergunta. não sabia sobre chattr.
Laramichaels
meu sistema parece precisar de acesso root para funcionar chattr. existe um modo no modo de usuário de definir esses atributos?
quack quixote
1
... embora seja uma ótima resposta para a pergunta, "pode rootproteger um arquivo tão bem que nem ele pode excluí-lo"!
quack quixote
4
Mais precisamente (no caso do Linux, de qualquer maneira), o root tem a CAP_DAC_OVERRIDEcapacidade de permitir que ele ignore ACLs e permissões.
grawity
1
Para sua informação, o equivalente a isso no OS X é sudo chflags <s|u>chg <file>torná-lo imutável para o sistema ou usuário, respectivamente, e sudo chflags no<s|u>chg <file>para desabilitar o sinalizador imutável para o sistema ou usuário, respectivamente.
GDP2 21/09/16
3
  1. Sim, isso é normal. Raiz é deus.

  2. Sim, existem maneiras de impedir que o root substitua arquivos.

    • Defina o bit imutável com chattr( +idefine, -idesativa). Requer acesso root, funciona apenas em ext2 / ext3 (provavelmente também ext4), mas é prático.
    • Não execute aplicativos como root. Sem privs raiz, sem substituir arquivos. Use sudopara acessar as funções do sistema.
    • Desmonte o sistema de arquivos. Sem fs montado, sem substituição de arquivos. [*]
    • Desligar o computador. Sem eletricidade, sem sobrescrever arquivos.

Esses métodos seguem logicamente do ponto 1. Como você pode ver, os dois últimos métodos geralmente não são úteis, da mesma forma que proteger o Windows contra vírus desconectando a rede geralmente não é útil. É por isso que a raiz é perigosa. [+]

[*] Descontando a possibilidade de "acidentalmente" gravar diretamente no dispositivo de bloco, é claro. Sim, o root pode fazer isso. Sim, você pode impedir isso: desconecte o dispositivo.

[+] É também de onde vêm esses mitos de BOfH. Eles não são todos mitos.

charlatão quixote
fonte
@ ~ charlatão: o método brice é muito mais prático do que os três que você lista. :)
laramichaels
@ ~ charlatão: minha pergunta deixou claro que eu entendo os problemas com a execução de comandos como root.
Laramichaels
3

Você também pode restringir o acesso a arquivos para o usuário root, usando o kernel do Linux "Capacidades": http://www.securityfocus.com/infocus/1400

Também existe a possibilidade de usar o SE-Linux ou algum outro patch do kernel para tornar alguns arquivos imutáveis ​​até mesmo para o root.


fonte
0

Eu acho que, enquanto o root for o superusuário, e ele puder fazer qualquer coisa, você não poderá remover nenhuma permissão dele, também se você for o root. É suposto ser a vontade da raiz impedir que ele faça ou não uma operação (como gravar em um arquivo ou abrir um aplicativo).

Portanto, não, é provável que você apenas desative a conta root para evitar um mau uso dela.

Saudações

[nota para si mesmo: sereis humildes ... talvez estejam errados]

dag729
fonte