eliminar el permiso de escritura no impide que la raíz escriba en el archivo

31

Acabo de notar en mi máquina Ubuntu (sistema de archivos ext3) que eliminar los permisos de escritura de un archivo no evita que la raíz escriba en él.

¿Es esta una regla general de permisos de archivos UNIX? ¿O específico de Ubuntu? ¿O una configuración incorrecta en mi máquina?

# touch abc
# chmod ugo-w abc
# python
Python 2.6.4 (r264: 75706, 7 de diciembre de 2009, 18:45:15) 
[CCG 4.4.1] en linux2
Escriba "ayuda", "derechos de autor", "créditos" o "licencia" para obtener más información.
>>> abierto ('abc', 'w'). escritura ('AAA \ n')
>>> 
# cat abc
AAA

La escritura en el archivo falla (como se esperaba) si hago esto desde mi cuenta de usuario normal.

  1. ¿Es este comportamiento normal?

  2. ¿Hay alguna manera de evitar que la raíz escriba accidentalmente en un archivo? (Preferiblemente utilizando mecanismos de sistema de archivos normales, no AppArmor, etc.)

Por favor enséñame sobre algo que definitivamente no entiendo.

NOTA: Entiendo que root tiene control total sobre el sistema y puede, por ejemplo, cambiar los permisos en cualquier archivo. Mi pregunta es si los permisos establecidos actualmente se aplican en el código que se ejecuta como root . La idea es que el usuario raíz evite que se escriba accidentalmente en un archivo.

NOTA: También entiendo que no se debe iniciar sesión como root para las operaciones normales. Acabo de notar este comportamiento y te pregunto al respecto.

laramichaels
fuente

Respuestas:

46

1) Este es un comportamiento normal. root tiene acceso rw en todos los archivos en todo momento.

2) Puede proteger un archivo incluso desde la raíz (no acción deliberada, pero accidental, de todos modos) mediante el uso

chattr +i filename.ext

Es decir, "cambiar atributos agregar inmutable". Para quitar la protección:

chattr -i filename.ext

echa un vistazo man chattrpara más información

brice
fuente
@brice: muchas gracias. aborda directamente mi pregunta. No sabía sobre chattr.
laramichaels
mi sistema parece necesitar acceso de root para ejecutarse chattr. ¿Hay algún medio en modo de usuario para establecer tales atributos?
quack quijote
1
... aunque es una gran respuesta a la pregunta, "puede rootproteger un archivo tan bien, incluso Él no puede eliminarlo".
quack quijote
44
Más exactamente (en el caso de Linux, de todos modos), la raíz tiene la CAP_DAC_OVERRIDEcapacidad que le permite ignorar las ACL y los permisos.
Grawity
1
Para su información, el equivalente de esto en OS X es sudo chflags <s|u>chg <file>hacer que sea inmutable para el sistema o usuario, respectivamente, y sudo chflags no<s|u>chg <file>para desactivar el indicador inmutable para el sistema o usuario, respectivamente.
GDP2
3
  1. Si, esto es normal. La raíz es dios.

  2. Sí, hay formas de evitar que la raíz sobrescriba los archivos.

    • Establezca el bit inmutable con chattr( +isets, -iunsets). Requiere acceso de root, funciona solo en ext2 / ext3 (presumiblemente ext4 también), pero por lo demás es práctico.
    • No ejecutes aplicaciones como root. Sin root privs, sin sobrescribir archivos. Se usa sudopara acceder a las funciones del sistema.
    • Desmontar el sistema de archivos. Sin fs montados, sin sobrescribir archivos. [*]
    • Apaga la computadora. Sin electricidad, sin sobrescribir archivos.

Estos métodos siguen lógicamente desde el n. ° 1. Como puede ver, los dos últimos métodos generalmente no son útiles, de la misma manera que proteger Windows contra virus desconectando la red generalmente no es útil. Por eso la raíz es peligrosa. [+]

[*] Descontando la posibilidad de escribir "accidentalmente" directamente en el dispositivo de bloque, por supuesto. Sí, root puede hacer eso. Sí, puede evitar eso: desconecte el dispositivo.

[+] Aquí también es de donde provienen esos mitos de BOfH. No todos son mitos.

quijote curandero
fuente
@ ~ quack: el método de brice es mucho más práctico que los tres que enumeras. :)
laramichaels
@ ~ quack: mi pregunta dejó en claro que entiendo los problemas con la ejecución de comandos como root.
laramichaels
3

También puede restringir el acceso a los archivos para el usuario root, utilizando las "Capacidades" del kernel de Linux: http://www.securityfocus.com/infocus/1400

También existe la posibilidad de utilizar SE-Linux o algún otro parche del kernel para hacer que algunos archivos sean inmutables incluso en la raíz.


fuente
0

Creo que mientras root sea el superusuario, y él pueda hacer cualquier cosa, no puedes quitarle ningún permiso, también si eres root. Se supone que es la voluntad de la raíz evitar que realice o no una operación (como escribir en un archivo o abrir una aplicación).

Entonces, no, lo más probable es que solo desactive la cuenta raíz para evitar un mal uso de la misma.

Saludos

[nota para ti: serás humilde ... tal vez estés equivocado]

dag729
fuente