Permisos de Archivos / Directorios en Linux
Un archivo cualquiera de Linux/Unix genera con sus permisos una partición sobre los usuarios, está partición consta de: un usuario dueño del archivo, los usuarios pertenecientes al grupo del archivo y todos los demás usuarios. Esta clasificación se conoce a veces como UGO, por User, Group, Others.
Cuando un archivo se crea, el archivo tiene como dueño al usuario que lo creó y como grupo, el grupo principal al cual pertenece el usuario.
$whoami santi $touch f1 $ls -l f1 -rw-r--r-- 1 santi staff 0 2008-03-16 19:48 f1El dueño del archivo
f1, essanti, y el archivo pertenece al grupostaff. A cada uno de los tres grupos podemos darle o quitarle permisos de: lectura (r), escritura (w) o ejecución (x). Estos permisos se asignan de manera discreta por lo que necesitamos 9 bits para asignarlos (3 clases de usuarios User, Group, Others, y 3 tipos de permisos Read, Write, eXecution).rwx rwx rwx --- --- --- Usuario Grupo OtrosEl sistema octal de bits permite representar los 8 estados que pueden tomar cada una de las clases. Esto se ve en la tabla siguiente:
Bin Oct Permisos 000 0 --- Ningún permiso 001 1 --x Sólo ejecución 010 2 -w- Sólo escritura 011 3 -wx Escritura y ejecución 100 4 r-- Sólo lectura 101 5 r-x Lectura y ejecución 110 6 rw- Lectura y escritura 111 7 rwx Los tres permisosPor este motivo es común que los permisos se suelan representar como una secuencia de tres números octales que designen los permisos para Usuario, Grupo y Otros.
Algunos ejemplos serían:
000 Ningún permiso 444 Lectura para todos. 400 Lectura sólo para el dueño. 644 Lectura y escritura para el dueño y sólo lectura a los demás. 777 Todos los permisos a todo el mundo.Muchas veces la gente no recuerda esa tabla, por lo que se asignan permisos directamente utilizando las clases de usuarios y las letras de los permisos. El comando para la asignación de permisos es
chmod:$chmod 644 f1 # Es equivalente a: $chmod ugo+r f1 # lectura para todos $chmod go-wx f1 # quitamos escritura y ejecución $chmod u+wr f1 # escritura y ejecución a dueño $ls -l f1 -rw-r--r-- 1 santi staff 0 2008-03-16 20:19 f1El comando
ls -lque nos mostró los permisos tiene un menos adelante para indicar que es un archivo y no un directorio. En el caso de un directorio tendríamos unaden lugar de un menos:$mkdir borrar $ls -l | grep borrar drwxr-xr-x 2 santi staff 4096 2008-03-16 20:27 borrarSticky bit (pegajoso)
Los unix tienen un permiso especial llamado Sticky bit que tenía el propósito de alertar al kernel para que deje el archivo en memoria luego de terminar el programa. Esto era conveniente para archivos utilizados muy frecuentemente, hoy día en casi todos los kernels modernos este permiso ya no hace falta debido a los nuevos sistemas de paginación de memoria que se implementan por lo que el uso del permiso sticky con este fin está obsoleto.
SUID y SGID
SUID y SGID son acrónimos de Set User Id y Set Group Id. Cuando un usuario ejecuta un archivo sin estos permisos, el programa corre con los permisos de ejecución del usuario que lo ejecuta. Es decir que si el usuario no tiene permisos de escribir el directorio
/bk/los programas que ejecute tampoco lo tendrán, a menos que alguno de estos programas tengan permisos SUID o SGID con lo cual el programa corre con los permisos del dueño del archivo o del grupo del archivo.Programas como
pingque requieren permisos de root para ejecutarse por lo que suelen tener este permiso asignado.$ls -l /bin/ping -rwsr-xr-x 1 root root 30856 2007-07-06 04:40 /bin/pingEs conveniente verificar nuestro sistema en busca de programas con este tipo de permisos, ya que pueden ser utilizados con fines maliciosos. Es común que un atacante que ganó en algún momento privilegios de root, deje para su uso posterior una copia de un shell como bash con permisos SUID.
Directorios
Para entender el significado de los permisos asignados a los directorios, hay que entender que un directorio es una lista de los archivos que contiene. Es decir que si nosotros tenemos permiso de lectura en ese directorio podremos leer la lista por lo que podremos listar los archivos del directorio. Pero si no tenemos permisos de lectura aún podremos modificar archivos del directorio suponiendo que conozcamos su nombre y tengamos los permisos sobre el archivo para hacerlo.
La misma lógica se sigue con el resto de los permisos, si queremos borrar un archivo de un directorio deberíamos tener permisos para modificar la lista, es decir permisos de escritura en el directorio
$mkdir borrar/ $touch borrar/archivo $chmod u-rw borrar/ $ls borrar/ ls: borrar/: Permission denied $echo "saludos" > borrar/archivo $cat borrar/archivo saludos $rm borrar/archivo rm: cannot remove `borrar/archivo': Permission deniedPero todavía queda un permiso que no sabemos como actua y es el de ejecución, y si este permiso se quita se prohiben todas las acciones dentro del directorio, sus archivos y subdirectorios. Es decir si quitamos los permisos de ejecución para alguna de las clases, no se podrá hacer a nada dentro del directorio ni siquiera cambiar a él con
cd.$cd borrar/ $pwd /home/santi/tmp/unix/borrar $cd .. $chmod u-x borrar/ $cd borrar bash: cd: borrar/: Permission denied
Mas información: Guía-Ubuntu
Fuente: http://codigomaldito.blogspot.com
¿Disfrutaste esta entrada? Por qué no dejas un comentario abajo y continúas la conversación, o te suscribes a mi feed y obtienes artículos como este enviados a tu lector de feeds.

Comentarios
No hay comentarios todavía.
Deja un Comentario