¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Permisos del sistema de archivos
Resumen de permisos
Como hemos dicho, Slackware Linux es un sistema operativo multiusuario. Debido a esto, sus sistemas de archivos también son de usuario múltiple. Esto significa que cada archivo o directorio tiene un conjunto de permisos que pueden otorgar o denegar privilegios a diferentes usuarios. Hay tres permisos básicos y tres conjuntos de permisos para cada archivo. Echemos un vistazo a un archivo de ejemplo.
darkstar:~$ ls -l /bin/ls -rwxr-xr-x 1 root root 81820 2007-06-08 21:12 /bin/ls
Recuerde del capítulo 4 que ls - l enumera los permisos para un archivo o directorio junto con el usuario y el grupo que “posee” el archivo. En este caso, los permisos son rwxr-xr-x, el usuario es root y el grupo también es root. La sección de permisos, aunque agrupada, es en realidad tres piezas separadas. El primer conjunto de tres letras son los permisos otorgados al usuario que posee el archivo. El segundo conjunto de tres son los otorgados al propietario del grupo, y los últimos tres son permisos para todos los demás.
Tabla 10.1. Permisos de /bin/ls
Grupo | Listado | Significado |
---|---|---|
Propietario | rwx | El propietario “root” puede leer, escribir y ejecutar |
Grupo | r-x | El grupo “root” puede leer y ejecutar |
Otros | r-x | Todos los demás pueden leer y ejecutar |
Los permisos son bastante autoexplicativos, por supuesto, al menos para archivos. Leer, escribir y ejecutar le permite leer un archivo, escribir en él o ejecutarlo. Pero, ¿qué significan estos permisos para los directorios? En pocas palabras, los permisos de lectura otorgan la posibilidad de listar los contenidos del directorio (digamos con ls ). El permiso de escritura otorga la posibilidad de crear nuevos archivos en el directorio, así como de eliminar todo el directorio, incluso si de otra forma no podría eliminar algunos de los otros archivos que contiene. El permiso de ejecución otorga la posibilidad de ingresar al directorio (por ejemplo, con cd , comando incorporado de bash ).
Echemos un vistazo a los permisos en un directorio ahora.
darkstar:~$ ls -ld /home/alan drwxr-x--- 60 alan users 3040 2008-06-06 17:14 /home/alan/
Aquí vemos los permisos en mi directorio personal y su propiedad. El directorio es propiedad del usuario alan y los usuarios del grupo. Al usuario se le otorgan todos los derechos (rwx), al grupo solo se le otorgan permisos de lectura y ejecución (r-x), y todos los demás tienen prohibido hacer cualquier cosa.
chmod, chown, y chgrp
Entonces, ahora que sabemos qué son los permisos, ¿cómo los cambiamos? Y para el caso, ¿cómo asignamos la propiedad del usuario y del grupo? La respuesta está aquí en esta sección.
La primera herramienta que analizaremos es el comando útil chown (1). Utilizando chown , podemos (lo has adivinado), cambiar la propiedad de un archivo o directorio. chown se usa históricamente solo para cambiar la propiedad del usuario, pero también puede cambiar la propiedad del grupo.
darkstar:~# ls -l /tmp/foo total 0 -rw-r--r-- 1 alan users 0 2008-06-06 22:29 a -rw-r--r-- 1 alan users 0 2008-06-06 22:29 b darkstar:~# chown root /tmp/foo/a darkstar:~# ls -l /tmp/foo total 0 -rw-r--r-- 1 root users 0 2008-06-06 22:29 a -rw-r--r-- 1 alan users 0 2008-06-06 22:29 b
Al usar dos puntos después de la cuenta de usuario, también puede especificar una nueva cuenta de grupo.
darkstar:~# chown root:root /tmp/foo/b darkstar:~# ls -l /tmp/foo total 0 -rw-r--r-- 1 root users 0 2008-06-06 22:29 a -rw-r--r-- 1 root root 0 2008-06-06 22:29 b
chown también se puede usar recursivamente para cambiar la propiedad de todos los archivos y directorios debajo de un directorio de destino. El siguiente comando cambiaría todos los archivos bajo el directorio /tmp/foo
para tener su propiedad establecida en root: root.
darkstar:~# chown -R root:root /tmp/foo/b
Especificar dos puntos y un nombre de grupo sin un nombre de usuario simplemente cambiará el grupo para un archivo y dejará intacta la propiedad del usuario.
darkstar:~# chown :wheel /tmp/foo/a darkstar:~# ls -l /tmp/foo ls -l /tmp/foo total 0 -rw-r--r-- 1 root wheel 0 2008-06-06 22:29 a -rw-r--r-- 1 root root 0 2008-06-06 22:29 b
El hermano menor de chown es un poco menos útil chgrp (1). Este comando funciona igual que chown , excepto que solo puede cambiar la propiedad del grupo de un archivo. Como chown ya puede hacer esto, ¿por qué molestarse con chgrp ? La respuesta es simple. Muchos otros sistemas operativos utilizan una versión diferente de chown que no puede cambiar la propiedad del grupo, por lo que si alguna vez te encuentras con uno de ellos, ahora sabes cómo hacerlo.
Hay una razón por la que discutimos el cambio de propiedad antes de cambiar los permisos. El primero es un concepto mucho más fácil de entender. La herramienta para cambiar permisos en un archivo o directorio es chmod (1). La sintaxis es casi idéntica a la de chown , pero en lugar de especificar un usuario o grupo, el administrador debe especificar un conjunto de permisos octales o un conjunto de permisos alfabéticos. Ninguno de los dos es especialmente fácil de entender la primera vez. Comenzaremos con los permisos octales menos complicados.
Los permisos octales derivan que su nombre se asigna por uno de ocho dígitos, a saber, los números del 0 al 7. A cada permiso se le asigna un número que es una potencia de 2, y esos números se suman para obtener los permisos finales para uno de los conjuntos de permisos. Si esto suena confuso, tal vez esta tabla ayude.
Tabla 10.2. Permisos octales
Permiso | Significado |
---|---|
Lectura | 4 |
Escritura | 2 |
Ejecución | 1 |
Al sumar estos valores, podemos alcanzar cualquier número entre 0 y 7 y especificar todas las combinaciones de permisos posibles. Por ejemplo, para otorgar privilegios de lectura y escritura mientras se deniega la ejecución, usaríamos el número 6. El número 3 otorgaría permisos de escritura y ejecución, pero negaría la capacidad de leer el archivo. Debemos especificar un número para cada uno de los tres conjuntos cuando se utilizan permisos octales. Por ejemplo, no es posible especificar solo un conjunto de permisos de usuario o grupo.
darkstar:~# ls -l /tmp/foo/a -rw-r--r-- 1 root root 0 2008-06-06 22:29 a darkstar:~# chmod 750 /tmp/foo/a darkstar:~# ls -l /tmp/foo/a -rwxr-x--- 1 root root 0 2008-06-06 22:29 a
chmod también puede usar valores de letras junto con +
o − para otorgar o denegar permisos. Si bien esto puede ser más fácil de recordar, a menudo es más fácil usar los permisos octales.
Table 10.3. Alphabetic Permissions
Permission | Letter Value |
---|---|
Read | r |
Write | w |
Execute | x |
Table 10.4. Alphabetic Users and Groups
Accounts Affected | Letter Value |
---|---|
User/Owner | u |
Group | g |
Others/World | o |
To use the letter values with chmod, you must specify which set to use them with, either “u” for user, “g” for group, and “o” for all others. You must also specify whether you are adding or removing permissions with the “+” and “-” signs. Multiple sets can be changed at once by separating each with a comma.
darkstar:/tmp/foo# ls -l total 0 -rw-r--r-- 1 alan users 0 2008-06-06 23:37 a -rw-r--r-- 1 alan users 0 2008-06-06 23:37 b -rw-r--r-- 1 alan users 0 2008-06-06 23:37 c -rw-r--r-- 1 alan users 0 2008-06-06 23:37 d darkstar:/tmp/foo# chmod u+x a darkstar:/tmp/foo# chmod g+w b darkstar:/tmp/foo# chmod u+x,g+x,o-r c darkstar:/tmp/foo# chmod u+rx-w,g+r,o-r d darkstar:/tmp/foo# ls -l -rwxr--r-- 1 alan users 0 2008-06-06 23:37 a* -rw-rw-r-- 1 alan users 0 2008-06-06 23:37 b -rwxr-x--- 1 alan users 0 2008-06-06 23:37 c* -r-xr----- 1 alan users 0 2008-06-06 23:37 d*
Which you prefer to use is entirely up to you. There are places where one is better than the other, so a real Slacker will know both inside out.
SUID, SGID, and the "Sticky" Bit
We're not quite done with permissions just yet. There are three other “special” permissions in addition to those mentioned above. They are SUID, SGID, and the sticky bit. When a file has one or more of these permissions set, it behaves in special ways. The SUID and SGID permissions change the way an application is run, while the sticky bit restricts deletion of files. These permissions are applied with chmod like read, write, and execute, but with a twist.
SUID and SGID stand for “Set User ID” and “Set Group ID” respectively. When an application with one of these bits is set, the application runs with the user or group ownership permissions of that application regardless of what user actually executed it. Let's take a look at a common SUID application, the humble passwd and the files it modifies.
darkstar:~# ls -l /usr/bin/passwd \ /etc/passwd \ /etc/shadow -rw-r--r-- 1 root root 1106 2008-06-03 22:23 /etc/passwd -rw-r----- 1 root shadow 627 2008-06-03 22:22 /etc/shadow -rws--x--x 1 root root 34844 2008-03-24 16:11 /usr/bin/passwd*
Notice the permissions on passwd. Instead of
an x in the user's execute slot, we have an
s. This tells us that
passwd is a SUID program, and when we run
it, the process will run as the user “root” rather than as the user
that actually executed it. The reason for this is readily apparent as
soon as you look at the two files it modifies. Neither
/etc/passwd
nor /etc/shadow
are writable by anyone other than root. Since users need to change
their personal information, passwd must be
run as root in order to modify those files.
So what about the sticky bit? The sticky bit restricts the ability to move or delete files and is only ever set on directories. Non-root users cannot move or delete any files under a directory with the sticky bit set unless they are the owner of that file. Normally anyone with write permission to the file can do this, but the sticky bit prevents it for anyone but the owner (and of course, root). Let's take a look at a common “sticky” directory.
darkstar:~# ls -ld /tmp drwxrwxrwt 1 root root 34844 2008-03-24 16:11 /tmp
Naturally, being a directory for the storage of temporary files system
wide, /tmp
needs to be readable, writable, and
executable by anyone and everyone. Since any user is likely to have a
file or two stored here at any time, it only makes good sense to
prevent other users from deleting those files, so the sticky bit has
been set. You can see it by the presence of the t in
place of the x in the world permissions section.
Table 10.5. SUID, SGID, and “Sticky” Permissions
Permission Type | Octal Value | Letter Value |
---|---|---|
SUID | 4 | s |
SGID | 2 | s |
Sticky | 1 | t |
When using octal permissions, you must specify an additional leading
octal value. For example, to recreate the permission on
/tmp
, we would use 1777. To recreate those
permissions on /usr/bin/passwd
, we would use 4711.
Essentially, any time this leading fourth octet isn't specified,
chmod assumes its value to be 0.
darkstar:~# chmod 1777 /tmp darkstar:~# chmod 4711 /usr/bin/passwd
Using the alphabetic permission values is slightly different. Assuming the two files above have permissions of 0000 (no permissions at all), here is how we would set them.
darkstar:~# chmod ug+rwx,o+rwt /tmp darkstar:~# chmod u+rws,go+x /usr/bin/passwd
Chapter Navigation
Previous Chapter: Users and Groups
Next Chapter: Working with Filesystems
Sources
- Original source: http://www.slackbook.org/beta
- Originally written by Alan Hicks, Chris Lumens, David Cantrell, Logan Johnson