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.

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: 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: 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.


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]

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.