Los permisos de directorios y ficheros en el mundo Linux son muy sencillos en un principio pero cuando empezamos a tener en cuenta el sticky bit y otras herramientas como chattr la cosa se complica. Todo administrador debería de tener estos conceptos muy claros ya que si no es así el sistema se convertirá en un queso de gruyere en dos días. En este manual se va a explicar desde los mas básico a lo mas complejo.
PERMISOS BÁSICOS:
Los permisos de un fichero se dividen en tres trios de permisos, los primeros tres corresponden al propietario del usuario, los siguientes tres al grupo al que pertenece y los otros tres a otros.
Un ejemplo en el que el fichero .profile pertenece al usuario root y al grupo root, el propietario tiene permisos de lectura y escritura, el grupo de lectura y los otros de lectura.
-rw-r--r-- 1 root root 140 nov 19 2007 .profile
Para asignar permisos a los ficheros lo mas fácil es aprenderse la correspondencia:
R: 4 --> Lectura
W: 2 --> Escritura
X: 1 --> Ejecución
Por lo tanto si queremos asignar permisos de RW para el propietario, WX para el grupo y R para otros se haría del siguiente modo: chmod 634 FICHERO
Para poder hacer un cd se necesitan permisos de ejecución en el direcotrio, permisos de paso.
Para acceder a un subdirectorio que nos pertenece pero cuelga de otro, se necesitan permisos de ejecución en el direcotrio intermedio para poder pasar a través de él.
Si se otorgan permisos de lectura sin ejecución y se hace un ls -la del directorio:
ls: no se puede acceder a aaa/.: Permiso denegado
ls: no se puede acceder a aaa/..: Permiso denegado
ls: no se puede acceder a aaa/ff.sh: Permiso denegado
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? ff.sh
UMASK:
Se trata de los permisos por defecto que adoptarán los ficheros y directorios cuando se creen. Para definir el valor de umask hay que pensar “a la inversa: wildcard”, con un ejemplo se verá claro: umask 007 equivaldría a chmod 770.
También hay que tener en cuenta que los ficheros se generarán con los permisos indicados en umask pero eliminando el permiso de ejecución. Si asigno un umask de 522 se crearían con los siguientes permisos:
- Directorios: 255
- Ficheros: 244
Otro aspecto a tener en cuenta es que el valor de umask va ligado al usuario, para poder definir un umask de forma global debemos editar el fichero: /etc/profile y si queremos hacerlo en un solo usuario: ~/.bashrc, hasta que el usuario no salga y vuelva logarse no se hará efectivo.
STICKY BIT:
Podremos saber si el sticky bit está activado mirando los permisos de ejecución. Para el propietario y el grupo se representa con una s y para otros con una t, si el bit de ejecución ya estaba habilitado aparecerá la s o la t en minúsculas, en caso contrario en mayúsculas.
- Ejemplo en el que NO está habilitado el permiso de ejecución y sí el Sticky bit: rwSr-Sr-T.
- Ejemplo en el que SI está habilitado el permiso de ejecución y sí el Sticky bit: rwsr-sr-t.
Este bit se comportará de un modo u otro según esté definido en un directorio o un fichero.
Fichero:
4000 --> Si es ejcutable se ejecutará con los permisos del propoietario
2000 --> Si es ejecutable se ejecutará con los permisos del grupos
1000 --> Se empleaba para que el SO mantuviese el fichero en SWAP, actualmente es ignorado
Directorio:
4000 --> No se utiliza para nada
2000 --> Los ficheros o directorios generados pertenecerán al grupo al que pertenece el directorio actual.
1000 --> Los fichero o directorios solo pueden ser renombrados o borrados por el propietario del elemento, el propietario del directorio o el usuario root, aunque el resto de usuarios tenga permisos de escritura.
NOTA: Pero si que pueden ser editados si se tienen los permisos adecuados.
Para eliminar el sticky bit no basta con ejecutar 0799 por ejemplo, hay que hacerlo con:
- chmod -s
- chmod -t
CHATTR:
NOTA:
- Las opciones c, s y u no están implementadas de forma nativa en ext2 y ext3
- La opción j solo funciona sobre ext3
- La opción D requiere un kernel >= 2.5.19
+A --> No se actualiza la hora de acceso al fichero, pero sí la de modificación.
+a --> Solo se puede añadir al fichero, solo ROOT puede asignar este parámetro.
+c --> Comprime de forma transparente el fichero
+D --> Si se aplica a un directorio los cambios realizados en él son escritos al momento en el disco duro.
+d --> Este fichero será ignorado por el programa dump (Backups)
E --> Indica que hay un problema de compresión con el fichero, no se puede modificar, solo se puede ver con lsattr
e --> Indica que se emplean "extents" para saber las posiciones del disco que contienen la información del fichero, no se debe modificar.
I --> Indica que el directorio es indexado empleando hashed tree, no tocar
h --> Indica que el tamaño del fichero se entrega en bloques no en sectores, no tocar.
+i --> No puede ser borrado, renombrado o vinculado mediante un link.
+j --> La información del fichero es escrita primero al journal si la partición está montada con las opciones "data=ordered" or "data=writeback".
+s --> Cuando se borre este fichero se sobreescribe se escriben ceros ;)
+S --> La información se escribe al momento en el disco.
+T --> Si se deshabilita el algoritmo de distribución de datos en el disco (Orlov) intentará meter los datos lo mas juntos posible entre ellos.
+t --> Deshabilita el "tail-merging" (aprovechar huecos de otros ficheros para meter información de este fichero) del fichero, opción necasaria para LILO (acceso directo el disco).
+u --> Permite el "undelete" del fichero
X --> Indica que el contenido de un fichero comprimido puede ser accedido en "raw", no se puede cambiar
Z --> Indica que el contenido de un fichero comprimido está "dirty", no se puede cambiar
Podemos ver los atributos de un fichero con el el comando lsattr.
Para comprobar opciones como +A se puede emplear la herramienta stat.
stat FICHERO: Muestra información sobre el acceso a los ficheros.
Espero que le saqueis jugo al artículo ya que en mi opinión está muy completito ;)
ACTUALIZACIÓN: También existen las ACLs que nos pueden ser de gran ayuda