104.5 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
104 Dispositivos, sistemas de archivos Linux, estándar de jerarquía del sistema de archivos |
Objetivo: |
104.5 Administrar los permisos y la propiedad de los archivos |
Lección: |
1 de 1 |
Introducción
Al ser un sistema multiusuario, Linux necesita alguna forma de rastrear quién es el propietario de cada archivo y si un usuario puede o no realizar acciones en un archivo. Esto es para garantizar la privacidad de los usuarios que deseen mantener la confidencialidad del contenido de sus archivos, así como para garantizar la colaboración al hacer que ciertos archivos sean accesibles para múltiples usuarios.
Esto se realiza mediante un sistema de permisos de tres niveles. Cada archivo en el disco es propiedad de un usuario y un grupo de usuarios y tiene tres conjuntos de permisos: uno para su propietario, otro para el grupo propietario del archivo y otro para todos los demás. En esta lección, aprenderá a consultar los permisos de un archivo, el significado de estos permisos y cómo manipularlos.
Consultar información sobre archivos y directorios
El comando ls
se usa para obtener una lista del contenido de cualquier directorio. En esta forma básica, todo lo que obtiene son los nombres de archivo:
$ ls Another_Directory picture.jpg text.txt
Pero hay mucha más información disponible para cada archivo, incluido su tipo, tamaño, propiedad y más. Para ver esta información debe solicitar a ls
una lista de “formato largo”, usando el parámetro -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Cada columna de la salida anterior tiene un significado. Echemos un vistazo a las columnas relevantes para esta lección.
-
La primera columna de la lista muestra el tipo de archivo y los permisos. Por ejemplo, en
drwxrwxr-x
:-
El primer caracter,
d
, indica el tipo de archivo. -
Los siguientes tres caracteres,
rwx
, indican los permisos del propietario del archivo, también conocido como user ou
. -
Los siguientes tres caracteres,
rwx
, indican los permisos del grupo propietario del archivo, también denominadog
. -
Los últimos tres caracteres,
r-x
, indican los permisos para cualquier otra persona, también conocidos como otros uo
.
-
Tip
|
También es común escuchar el conjunto de permisos de otros como permisos de mundo, como en “Todo el mundo tiene estos permisos”. |
-
Las columnas tercera y cuarta muestran información de propiedad: respectivamente, el usuario y el grupo que posee el archivo.
-
La séptima y última columna muestra el nombre del archivo.
La segunda columna indica el número de enlaces físicos que apuntan a ese archivo. La quinta columna muestra el tamaño del archivo. La sexta columna muestra la fecha y la hora en que se modificó por última vez el archivo. Pero estas columnas no son relevantes para el tema actual.
¿Y los directorios?
Si intenta consultar información sobre un directorio usando ls -l
, en su lugar, le mostrará una lista del contenido del directorio:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Para evitar esto y consultar información sobre el directorio en sí, agregue el parámetro -d
a ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Ver archivos ocultos
El listado de directorios que hemos recuperado usando ls -l
antes está incompleto:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Hay otros tres archivos en ese directorio, pero están ocultos. En Linux, los archivos cuyo nombre comienzan con un punto (.
) se ocultan automáticamente. Para verlos necesitamos agregar el parámetro -a
a ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
El archivo .thisIsHidden
simplemente está oculto porque su nombre comienza con .
.
Sin embargo, los directorios .
y ..
son especiales. .
es un puntero al directorio padre. Y ..
es un puntero al directorio principal, el que contiene el actual. En Linux, cada directorio contiene al menos estos dos directorios.
Tip
|
Puede combinar varios parámetros para |
Tipos de Archivos
Ya hemos mencionado que la primera letra en cada salida de ls -l
describe el tipo de archivo. Los tres tipos de archivos más comunes son:
-
(archivo normal)-
Un archivo puede contener datos de cualquier tipo y ayudar a gestionar estos datos. Los archivos se pueden modificar, mover, copiar y eliminar.
d
(directorio)-
Un directorio contiene otros archivos o directorios y ayuda a organizar el sistema de archivos. Técnicamente, los directorios son un tipo especial de archivo.
l
(enlace simbólico)-
Este “archivo” es un puntero a otro archivo o directorio en otra ubicación del sistema de archivos.
Además de estos, hay otros tres tipos de archivos que al menos debería conocer, pero que están fuera del alcance de esta lección:
b
(dispositivo de bloque)-
Este archivo representa un dispositivo virtual o físico, generalmente discos u otros tipos de dispositivos de almacenamiento, como el primer disco duro que podría estar representado por
/dev/sda
. c
(dispositivo de caracteres)-
Este archivo representa un dispositivo físico o virtual. Los terminales (como el terminal principal en
/dev/ttyS0
) y los puertos serie son ejemplos comunes de dispositivos de caracteres. s
(socket)-
Los sockets sirven como “conductos” para pasar información entre dos programas.
Warning
|
No altere ninguno de los permisos en dispositivos de bloque, dispositivos de caracteres o sockets, a menos que sepa lo que está haciendo. ¡Esto puede impedir que su sistema funcione! |
Comprensión de los Permisos
En la salida de ls -l
, los permisos de archivo se muestran justo después del tipo de archivo, como tres grupos de tres caracteres cada uno, en el orden r
, w
y x
. Esto es lo que quieren decir. Tenga en cuenta que un guión -
representa la falta de un permiso.
Permisos sobre archivos
r
-
Significa read y tiene un valor octal de
4
(no se preocupe, discutiremos los octales en breve). Esto significa permiso para abrir un archivo y leer su contenido. w
-
Significa write y tiene un valor octal de
2
. Esto significa permiso para editar o eliminar un archivo. x
-
Significa execute y tiene un valor octal de
1
. Esto significa que el archivo se puede ejecutar como ejecutable o script.
Entonces, por ejemplo, un archivo con permisos rw-
se puede leer y escribir, pero no se puede ejecutar.
Permisos en directorios
r
-
Significa read y tiene un valor octal de
4
. Esto significa permiso para leer el contenido del directorio, como nombres de archivos. Pero no implica permiso para leer los archivos. w
-
Significa write y tiene un valor octal de
2
. Esto significa permiso para crear o eliminar archivos en un directorio, o cambiar sus nombres, permisos y propietarios.Si un usuario tiene el permiso
w
en un directorio, el usuario puede cambiar los permisos de cualquier archivo en el directorio (el contenido del directorio), incluso si el usuario no tiene permisos sobre el archivo o si el archivo es propiedad de otro usuario.Tenga en cuenta que tener permisos de escritura en un directorio o archivo no significa que tenga permiso para eliminar o cambiar el nombre del directorio o archivo.
x
-
Significa execute y tiene un valor octal de
1
. Esto significa permiso para ingresar a un directorio, pero no para listar sus archivos (para eso se necesitar
).
Lo último sobre directorios puede sonar un poco confuso. Imaginemos, por ejemplo, que tiene un directorio llamado Another_Directory
, con los siguientes permisos:
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
También imagine que dentro de este directorio tiene un script de shell llamado hello.sh
:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Si usted es el usuario carol
e intenta listar el contenido de Another_Directory
, obtendrá un mensaje de error, ya que su usuario no tiene permiso de lectura para ese directorio:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Sin embargo, el usuario carol
tiene permisos de ejecución, lo que significa que puede ingresar al directorio. Por lo tanto, el usuario carol
puede acceder a archivos dentro del directorio, siempre que tenga los permisos correctos para el archivo respectivo. Supongamos que el usuario tiene permisos completos (rwx
) para el script hello.sh
. Entonces ella puede ejecutar el script, aunque ella no puede leer el contenido del directorio que lo contiene si conoce el nombre completo del archivo:
$ sh Another_Directory/hello.sh Hello LPI World!
Como dijimos antes, los permisos se especifican en secuencia: primero para el propietario del archivo, luego para el grupo propietario y luego para otros usuarios. Siempre que alguien intenta realizar una acción en el archivo, los permisos se verifican de la misma manera.
Primero, el sistema verifica si el usuario actual es el propietario del archivo y, si esto es cierto, solo aplica el primer conjunto de permisos. De lo contrario, comprueba si el usuario actual pertenece al grupo propietario del archivo. En ese caso, solo aplica el segundo conjunto de permisos. En cualquier otro caso, el sistema aplicará el tercer conjunto de permisos.
Esto significa que si el usuario actual es el propietario del archivo, solo los permisos de propietario son efectivos, incluso si el grupo u otros permisos son más permisivos que los permisos del propietario.
Modificación de permisos de archivos
El comando chmod
se usa para modificar los permisos de un archivo y toma al menos dos parámetros: el primero describe qué permisos cambiar y el segundo apunta al archivo o directorio donde se realizará el cambio. Tenga en cuenta que solo el propietario del archivo o el administrador del sistema (root) pueden cambiar los permisos de un archivo.
Los permisos para cambiar se pueden describir de dos formas diferentes, o “modos”.
El primero, llamado modo simbólico ofrece un control detallado, lo que le permite agregar o revocar un solo permiso sin modificar otros en el conjunto. El otro modo, llamado modo octal, es más fácil de recordar y más rápido de usar si desea establecer todos los valores de permisos a la vez.
Ambos modos conducirán al mismo resultado final. Entonces, por ejemplo, los comandos:
$ chmod ug+rw-x,o-rwx text.txt
y
$ chmod 660 text.txt
producirá exactamente la misma salida, un archivo con los permisos establecidos:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Ahora, veamos cómo funciona cada modo.
Modo simbólico
Al describir qué permisos cambiar en modo simbólico, los primeros caracteres indican los permisos que modificará: los del usuario (u
), del grupo (g
), de los demás (o
) y / o para todos (a
).
Luego debe decirle al comando qué hacer: puede otorgar un permiso (+
), revocar un permiso (-
) o establecerlo en un valor específico (=
).
Por último, especifique sobre qué permiso desea actuar: leer (r
), escribir (w
) o ejecutar (x
).
Por ejemplo, imagina que tenemos un archivo llamado text.txt
con el siguiente conjunto de permisos:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Si desea otorgar permisos de escritura a los miembros del grupo que posee el archivo, debe usar el parámetro g+w
. Es más fácil si lo piensa de esta manera: “Para el grupo (g
), conceder (+
) permisos de escritura (w
)”. Entonces, el comando sería:
$ chmod g+w text.txt
Comprobemos el resultado con ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
¿Desea eliminar los permisos de lectura para el propietario del mismo archivo? Piense en ello como: “Para el usuario (u
), revocar (-
) los permisos de lectura (r
)”. Entonces el parámetro es u-r
, así:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
¿Qué pasa si queremos establecer los permisos exactamente como rw-
para todos? Entonces piense en ello como: “Para todo (a
), establecer exactamente (=
) leer (r
), escribir (w
) y no ejecutar (-
)”. Entonces:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Por supuesto, es posible modificar varios permisos al mismo tiempo. En este caso, sepárelos con una coma (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
El ejemplo anterior se puede leer como: “Para el usuario (u
), conceder (+
) permisos de lectura, escritura y ejecución (rwx
), para el grupo (g
), revocar (-
) ejecutar permisos (x
)”.
Cuando se ejecuta en un directorio, chmod
modifica solo los permisos del directorio. chmod
también tiene un modo recursivo, que es útil cuando desee cambiar los permisos para “todos los archivos dentro de un directorio y sus subdirectorios”. Para usar esto, agregue el parámetro -R
después del nombre del comando, antes de los permisos para cambiar:
$ chmod -R u+rwx Another_Directory/
Este comando se puede leer como: “Recursivamente (-R
), para el usuario (u
), otorgar (+
) permisos de lectura, escritura y ejecución (rwx
)”.
Warning
|
Tenga cuidado y piénselo dos veces antes de usar el modificador |
Modo Octal
En modo octal, los permisos se especifican de forma diferente: como un valor de tres dígitos en notación octal, un sistema numérico de base 8.
Cada permiso tiene un valor correspondiente, y se especifican en el siguiente orden: primero, leer (r
), que es 4
, luego, escribir (w
), que es 2
y el último, ejecutar (x
), representado por 1
. Si no hay permiso, use el valor cero (0
). Entonces, un permiso de rwx
sería 7
(4+2+1
) y r-x
sería 5
(4+0+1
).
El primero de los tres dígitos representa los permisos para el dueño (u
), el segundo para el grupo (g
) y el tercero para otros (o
). Si quisiéramos establecer los permisos para un archivo en rw-rw----
, el valor octal sería 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Además de esto, la sintaxis en modo octal es la misma que en modo simbólico, el primer parámetro representa los permisos que desea cambiar y el segundo parámetro apunta al archivo o directorio donde se realizará el cambio.
Tip
|
Si un valor de permiso es impar, ¡el archivo seguramente es ejecutable! |
¿Qué sintaxis debería utilizar? Se recomienda el modo octal si desea cambiar los permisos a un valor específico, por ejemplo, 640
(rw- r-- ---
).
El modo simbólico es más útil si desea invertir solo un valor específico, independientemente de los permisos actuales para el archivo. Por ejemplo, puede agregar permisos de ejecución para el usuario usando solo chmod u+x script.sh
sin tener en cuenta, o incluso tocar, los permisos actuales para el grupo y otros.
Modificación de la propiedad del archivo
El comando chown
se usa para modificar la propiedad de un archivo o directorio. La sintaxis es bastante simple:
chown USERNAME:GROUPNAME FILENAME
Por ejemplo, verifiquemos un archivo llamado text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
El usuario propietario del archivo es carol
y el grupo también es carol
. Ahora, cambiaremos el grupo propietario del archivo a otro grupo, como estudiantes
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Tenga en cuenta que el usuario propietario de un archivo no necesita pertenecer al grupo propietario de un archivo. En el ejemplo anterior, el usuario carol
no necesita ser miembro del grupo estudiantes
.
El conjunto de permisos de usuario o grupo se puede omitir si no desea cambiarlos. Entonces, para cambiar solo el grupo propietario de un archivo, usaría chown :students text.txt
. Para cambiar solo el usuario, el comando sería chown carol: text.txt
o simplemente chown carol text.txt
. Alternativamente, puede usar el comando chgrp estudiantes text.txt
.
A menos que sea el administrador del sistema (root), no puede cambiar la propiedad de un archivo a otro usuario o grupo al que no pertenece. Si intenta hacer esto, obtendrá el mensaje de error Operation not permitted
.
Consultar grupos
Antes de cambiar la propiedad de un archivo, puede resultar útil saber qué grupos existen en el sistema, qué usuarios son miembros de un grupo y a qué grupos pertenece un usuario.
Para ver qué grupos existen en su sistema, escriba getent group
. La salida será similar a esta (la salida se ha abreviado):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Si desea saber a qué grupos pertenece un usuario, agregue el nombre de usuario como parámetro a grupos
:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Para hacer lo contrario (ver qué usuarios pertenecen a un grupo) use groupmems
. El parámetro -g
especifica el grupo, y -l
listará todos sus miembros:
# groupmems -g cdrom -l carol
Tip
|
|
Permisos predeterminados
Probemos un experimento. Abra una ventana de terminal y cree un archivo vacío con el siguiente comando:
$ touch testfile
Ahora, echemos un vistazo a los permisos para este archivo. Pueden ser diferentes en su sistema, pero supongamos que tienen el siguiente aspecto:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
Los permisos son rw- r- r-
: read y write para el usuario, y read para el grupo y otros, o 644
en modo octal. Ahora, intente crear un directorio:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Ahora los permisos son rwxr-xr-x
: read, write y execute para el usuario, read y execute para el grupo y otros, o 755
en modo octal.
No importa dónde se encuentre en el sistema de archivos, cada archivo o directorio que cree obtendrá los mismos permisos. ¿Se ha preguntado alguna vez de dónde vienen?
Vienen de user mask o umask
, que establece los permisos predeterminados para cada archivo creado. Puede comprobar los valores actuales con el comando umask
:
$ umask 0022
Pero eso no se parece a rw- r-- r--
, ni siquiera a 644
. Quizás deberíamos probar con el parámetro -S
, para obtener una salida en modo simbólico:
$ umask -S u=rwx,g=rx,o=rx
Esos son los mismos permisos que obtuvo nuestro directorio de prueba en uno de los ejemplos anteriores. Pero, ¿por qué cuando creamos un archivo los permisos eran diferentes?
Bueno, no tiene sentido establecer permisos de ejecución globales para todos en cualquier archivo de forma predeterminada, ¿verdad? Los directorios necesitan permisos de ejecución (de lo contrario, no puede entrar en ellos), pero los archivos no, por lo que no los obtienen. De ahí el rw- r-- r--
.
Además de mostrar los permisos predeterminados, umask
también se puede usar para cambiarlos para su sesión de shell actual. Por ejemplo, si usamos el comando:
$ umask u=rwx,g=rwx,o=
Cada directorio nuevo heredará los permisos rwxrwx---
, y cada archivo rw-rw----
(ya que no obtienen permisos de ejecución). Si repite los ejemplos anteriores para crear un testfile
y un testdir
y verifica los permisos, debería obtener:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
Y si marca umask
sin el parámetro -S
(modo simbólico), obtiene:
$ umask 0007
El resultado no parece familiar porque los valores utilizados son diferentes. Aquí hay una tabla con cada valor y su respectivo significado:
Valor | Permiso para archivos | Permiso para directorios |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Como puede ver, 007
corresponde a rwxrwx---
, exactamente como lo solicitamos. El cero inicial se puede ignorar.
Permisos especiales
Además de los permisos de lectura, escritura y ejecución para usuario, grupo y otros, cada archivo puede tener otros tres permisos especiales que pueden alterar la forma en que funciona un directorio o cómo se ejecuta un programa. Se pueden especificar en modo simbólico u octal, y son los siguientes:
Bit Adhesivo
El bit adhesivo, también llamado bandera de eliminación restringida, tiene el valor octal 1
y en modo simbólico está representado por una t
dentro de los permisos del otro. Esto se aplica solo a los directorios y no tiene ningún efecto en los archivos normales. En Linux, evita que los usuarios eliminen o cambien el nombre de un archivo en un directorio a menos que sean propietarios de ese archivo o directorio.
Los directorios con el bit adhesivo establecido muestran una t
reemplazando la x
en los permisos de otros en la salida de ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
En el modo octal, los permisos especiales se especifican mediante una notación de 4 dígitos, donde el primer dígito representa el permiso especial para actuar. Por ejemplo, para establecer el bit adhesivo (valor 1
) para el directorio Another_Directory
en modo octal, con permisos 755
, el comando sería:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Establecer GID
Establecer GID, también conocido como SGID o Set Group ID bit, tiene el valor octal 2
y en modo simbólico está representado por una s
en los permisos de group. Esto se puede aplicar a archivos o directorios ejecutables. En archivos, hará que el proceso se ejecute con los privilegios del grupo propietario del archivo. Cuando se aplica a directorios, hará que cada archivo o directorio creado bajo él herede el grupo del directorio principal.
Los archivos y directorios con el bit SGID muestran una s
que reemplaza la x
en los permisos del group en la salida de ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Para agregar permisos SGID a un archivo en modo simbólico, el comando sería:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
El siguiente ejemplo le ayudará a comprender mejor los efectos de SGID en un directorio. Supongamos que tenemos un directorio llamado Sample_Directory
, propiedad del usuario carol
y del grupo users
, con la siguiente estructura de permisos:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Ahora, cambiemos a este directorio y, usando el comando touch
, creemos un archivo vacío dentro de él. El resultado sería:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Como podemos ver, el archivo es propiedad del usuario carol
y del grupo carol
. Pero, si el directorio tuviera el permiso SGID establecido, el resultado sería diferente. Primero, agreguemos el bit SGID al Sample_Directory
y verifiquemos los resultados:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
La s
en los permisos de grupo indica que el bit SGID está establecido. Ahora, cambiaremos a este directorio y, nuevamente, crearemos un archivo vacío con el comando touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
El grupo propietario del archivo es users
. Esto se debe a que el bit SGID hizo que el archivo heredara el propietario del grupo de su directorio principal, que es users
.
Establecer UID
SUID, también conocido como Establecer ID de usuario, tiene el valor octal 4
y está representado por una s
en los permisos de user en modo simbólico. Solo se aplica a archivos y no tiene ningún efecto en los directorios. Su comportamiento es similar al bit SGID, pero el proceso se ejecutará con los privilegios del usuario propietario del archivo. Los archivos con el bit SUID muestran una s
que reemplaza la x
en los permisos del usuario en la salida de ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Puede combinar varios permisos especiales en un parámetro. Entonces, para establecer SGID (valor 2
) y SUID (valor 4
) en modo octal para el script test.sh
con permisos 755
, debe escribir:
$ chmod 6755 test.sh
Y el resultado sería:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Si su terminal es compatible con el color, y en estos días la mayoría de ellos lo hacen, puede ver rápidamente si estos permisos especiales se establecen echando un vistazo a la salida de |
Ejercicios Guiados
-
Cree un directorio llamado
emptydir
usando el comandomkdir emptydir
. Ahora, usandols
, liste los permisos para el directorioemptydir
. -
Cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora, usandochmod
en modo simbólico, agregue permisos de ejecución para el propietario del archivoemptyfile
y elimine los permisos de escritura y ejecución para todos los demás. Haga esto usando solo un comandochmod
. -
¿Cuáles serían los permisos predeterminados para un archivo si el valor de
umask
se establece en027
? -
Supongamos que un archivo llamado
test.sh
es un script de shell con los siguientes permisos y propiedad:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
¿Cuáles son los permisos para el propietario del archivo?
-
Usando la notación octal, ¿cuál sería la sintaxis de
chmod
para “eliminar” el permiso especial otorgado a este archivo?
-
-
Considere este archivo:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
¿Qué tipo de archivo es
sdb1
? ¿Quién puede escribir en él? -
Considere los siguientes 4 archivos:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Anote los permisos correspondientes para cada archivo y directorio usando el modo octal usando la notación de 4 dígitos.
Another_Directory
foo.bar
HugeFile.zip
Sample_Directory
Ejercicios Exploratorios
-
Pruebe esto en una terminal: cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora “cambie a cero” los permisos para el archivo conchmod 000 emptyfile
. ¿Qué sucederá si cambia los permisos paraemptyfile
pasando solo un valor parachmod
en modo octal, comochmod 4 emptyfile
? ¿Y si usa dos, como enchmod 44 emptyfile
? ¿Qué podemos aprender sobre la forma en quechmod
lee el valor numérico? -
Considere los permisos para el directorio temporal en un sistema Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
El usuario, el grupo y otros tienen permisos completos. Pero, ¿puede un usuario normal eliminar cualquier archivo dentro de este directorio? ¿Por qué es este el caso?
-
Un archivo llamado
test.sh
tiene los siguientes permisos:-rwsr-xr-x
, lo que significa que el bit SUID está establecido. Ahora, ejecute los siguientes comandos:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
¿Qué hicimos? ¿Qué significa la
S
mayúscula? -
¿Cómo crearía un directorio llamado
Box
donde todos los archivos pertenecen automáticamente al grupousers
y solo pueden ser eliminados por el usuario que los creó?
Resumen
En esta lección, ha aprendido cómo usar ls
para obtener (y decodificar) información sobre permisos de archivos, cómo controlar o cambiar quién puede crear, eliminar o modificar un archivo con chmod
, tanto en los modos octal como simbólico, cómo cambiar la propiedad de los archivos con chown
y chgrp
y cómo consultar y cambiar la máscara de permisos predeterminada para archivos y directorios con umask
Los siguientes comandos se discutieron en esta lección:
ls
-
Lista archivos, opcionalmente incluyendo detalles como permisos.
chmod
-
Cambia los permisos de un archivo o directorio.
chown
-
Cambia el usuario y/o grupo propietario de un archivo o directorio.
chgrp
-
Cambia el grupo propietario de un archivo o directorio.
umask
-
Consulta o establece la máscara de permisos predeterminada para archivos y directorios
Respuestas a los ejercicios guiados
-
Cree un directorio llamado
emptydir
usando el comandomkdir emptydir
. Ahora, usandols
, liste los permisos para el directorioemptydir
.Agregue el parámetro
-d
als
para ver los atributos de archivo de un directorio, en lugar de enumerar su contenido. Entonces, la respuesta es:ls -l -d emptydir
Puntos de bonificación si fusiona los dos parámetros en uno, como en
ls -ld emptydir
. -
Cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora, usandochmod
en modo simbólico, agregue permisos de ejecución para el propietario del archivoemptyfile
y elimine los permisos de escritura y ejecución para todos los demás. Haga esto usando solo un comandochmod
.Piense en ello de esta manera:
-
“Para el usuario propietario del archivo (
u
) agregue (+
) los permisos de ejecución (x
)”, entoncesu+x
. -
“Para el grupo (
g
) y otros usuarios (o
), elimine (-
), los permisos de escritura (w
) y ejecución (x
)”, entoncesgo-wx
.Para combinar estos dos conjuntos de permisos, agregamos una coma entre ellos. Entonces el resultado final es:
chmod u+x,go-wx emptyfile
-
-
¿Cuáles serían los permisos predeterminados para un archivo si el valor de
umask
se establece en027
?Los permisos serían
rw-r-----
-
Supongamos que un archivo llamado
test.sh
es un script de shell con los siguientes permisos y propiedad:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
¿Cuáles son los permisos para el propietario del archivo?
Los permisos para el propietario (2 a 4 caracteres en la salida de
ls -l
) sonrwx
, por lo que la respuesta es: “leer, escribir y ejecutar el archivo”. -
Usando la notación octal, ¿cuál debería ser la sintaxis de chmod para “eliminar” el permiso especial otorgado a este archivo?
Podemos “desactivar” los permisos especiales pasando un cuarto dígito,
0
, achmod
. Los permisos actuales son755
, por lo que el comando debería serchmod 0755
.
-
-
Considere este archivo:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
¿Qué tipo de archivo es
sdb1
? ¿Quién puede escribir en él?El primer carácter en la salida de
ls -l
muestra el tipo de archivo.b
es un dispositivo de bloque, generalmente un disco (interno o externo), conectado a la máquina. El propietario (root
) y cualquier usuario del grupodisk
pueden escribir en él. -
Considere los siguientes 4 archivos:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Anote los permisos correspondientes para cada archivo y directorio usando el modo octal usando la notación de 4 dígitos.
Los permisos correspondientes, en modo octal, son los siguientes:
Another_Directory
1755
.1
para el bit adhesivo,755
para los permisos regulares (rwx
para el usuario,r-x
para el grupo y otros).foo.bar
0044
. Sin permisos especiales (por lo que el primer dígito es0
), sin permisos para el usuario (---
) y solo lectura (r—r--
) para grupo y otros.HugeFile.zip
0664
. Sin permisos especiales, por lo que el primer dígito es0
.6
(rw-
) para el usuario y el grupo,4
(r-
) para los demás.Sample_Directory
2755
.2
para el bit SGID,7
(rwx
) para el usuario,5
(r-x
) para el grupo y otros.
Respuestas a ejercicios exploratorios
-
Pruebe esto en una terminal: cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora “cambie a cero” los permisos para el archivo conchmod 000 emptyfile
. ¿Qué sucederá si cambia los permisos paraemptyfile
pasando solo un valor parachmod
en modo octal, comochmod 4 emptyfile
? ¿Y si usa dos, como enchmod 44 emptyfile
? ¿Qué podemos aprender sobre la forma en quechmod
lee el valor numérico?Recuerde que “cambiamos a cero” los permisos para
emptyfile
. Entonces, su estado inicial sería:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Ahora, intentemos el primer comando,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
¿Ve? Se cambiaron los permisos para otros. ¿Y si probamos con dos dígitos, como en
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Ahora, los permisos para group y others se vieron afectados. De esto, podemos concluir que en modo octal
chmod
lee el valor “al revés”, desde el dígito menos significativo (otros) al más significativo (usuario). Si pasa un dígito, modifica los permisos de otros. Con dos dígitos modifica grupo y otros, y con tres modifica usuario, grupo y otros y con cuatro dígitos modifica usuario, grupo, otros y los permisos especiales. -
Considere los permisos para el directorio temporal en un sistema Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
El usuario, el grupo y otros tienen permisos completos. Pero, ¿puede un usuario normal eliminar cualquier archivo dentro de este directorio? ¿Por qué es este el caso?
/tmp
es lo que llamamos un directorio world writeable, lo que significa que cualquier usuario puede escribir en él. Pero no queremos que un usuario juegue con archivos creados por otros, por lo que se establece el bit adhesivo (como lo indica lat
en los permisos de otros). Esto significa que un usuario puede eliminar archivos en/tmp
, pero solo aquellos creados por él mismo. -
Un archivo llamado
test.sh
tiene los siguientes permisos:-rwsr-xr-x
, lo que significa que el bit SUID está establecido. Ahora, ejecute los siguientes comandos:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
¿Qué hicimos? ¿Qué significa la
S
mayúscula?Eliminamos los permisos de ejecución para el usuario propietario del archivo. La
s
(ot
) toma el lugar de lax
en la salida dels -l
, por lo que el sistema necesita una forma de mostrar si el usuario tiene permisos de ejecución o no. Lo hace cambiando el caso del carácter especial.Una
s
minúscula en el primer grupo de permisos significa que el usuario propietario del archivo tiene permisos de ejecución y que el bit SUID está configurado. UnaS
mayúscula significa que el usuario propietario del archivo carece de (-
) permisos de ejecución y que el bit SUID está establecido.Lo mismo puede decirse de SGID, una
s
minúscula en el segundo grupo de permisos significa que el grupo que posee el archivo tiene permisos de ejecución y que el bit SGID está establecido. UnaS
mayúscula significa que el grupo propietario del archivo carece de permisos de ejecución (-
) y que el bit SGID está establecido.Esto también es cierto para el bit adhesivo, representado por la
t
en el tercer grupo de permisos. Lat
minúscula significa un conjunto de bits fijos y que otros tienen permisos de ejecución. LaT
mayúscula significa un conjunto de bits fijos y que otros no tienen permisos de ejecución. -
¿Cómo crearía un directorio llamado
Box
donde todos los archivos pertenecen automáticamente al grupousers
y solo pueden ser eliminados por el usuario que los creó?Este es un proceso de varios pasos. El primer paso es crear el directorio:
$ mkdir Box
Queremos que cada archivo creado dentro de este directorio sea asignado automáticamente al grupo
usuarios
. Podemos hacer esto configurando este grupo como el propietario del directorio y luego configurando el bit SGID en él. También debemos asegurarnos de que cualquier miembro del grupo pueda escribir en ese directorio.Ya que no nos importa cuáles son los otros permisos, y queremos
cambiar
solo los bits especiales, tiene sentido usar el modo simbólico:$ chown :users Box/ $ chmod g+wxs Box/
Tenga en cuenta que si su usuario actual no pertenece al grupo
usuarios
, tendrá que usar el comandosudo
antes de los comandos anteriores para hacer el cambio como root.Ahora, para la última parte, asegúrese de que solo el usuario que creó un archivo pueda eliminarlo. Esto se hace estableciendo el bit adhesivo (representado por una
t
) en el directorio. Recuerde que está configurado en los permisos para otros (o
).$ chmod o+t Box/
Los permisos en el directorio
Box
deben ser los siguientes:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Por supuesto, puede especificar SGID y el bit adhesivo usando solo un comando
chmod
:$ chmod g+wxs,o+t Box/
Puntos de bonificación si pensaba en eso.