5.3 Lección 1
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
5 Seguridad y permisos de archivos |
Objetivo: |
5.3 Administrar permisos de archivos y propiedad |
Lección: |
1 de 1 |
Introducción
Al ser un sistema multiusuario, Linux necesita alguna forma de rastrear quién es dueño de cada archivo y si un usuario puede o no realizar acciones en ese en el mismo. Lo anterior es para garantizar la privacidad de los usuarios que deseen mantener la confidencialidad del contenido de sus ficheros, así como para garantizar la colaboración al hacer que ciertos archivos sean accesibles para múltiples usuarios.
Esto se hace a través de 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 propetario del archivo y otro para todos los demás. En esta lección, aprenderá cómo consultar los permisos de un archivo y cómo manipularlos.
Consultar información sobre archivos y directorios
El comando ls
se usa para obtener una lista de los contenidos de cualquier directorio. En esta forma básica, todo lo que obtienes son los nombres de archivo:
$ ls Another_Directory picture.jpg text.txt
Pero hay mucha más información disponible para cada archivo, incluyendo tipo, tamaño, propiedad y más. Para ver esta información, debe solicitar a ls
una lista de “forma larga (long form)”, utilizando 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 en la salida anterior tiene un significado:
-
La primera columna de la lista muestra el tipo de archivo y los permisos.
Por ejemplo, en
drwxrwxr-x
:-
El primer carácter,
d
indica el tipo de archivo. -
Los siguientes tres caracteres,
rwx
indican los permisos para el propietario del archivo, también conocido como usuario ou
. -
Los siguientes tres caracteres,
rwx
indican los permisos del grupo que posee el archivo, también conocido comog
. -
Los últimos tres caracteres,
r-x
indican los permisos para cualquier otra persona, también conocidos como otros uo
.
-
-
La segunda columna indica el número de enlaces duros (hard links) que apuntan a ese archivo. Para un directorio, significa el número de subdirectorios, más un enlace a sí mismo (
.
) y al directorio padre (..
). -
Las tercera y cuarta columna muestran información de propiedad: el usuario y el grupo que posee el archivo.
-
La quinta columna muestra el tamaño del archivo en bytes.
-
La sexta columna muestra la fecha y hora precisas, o la marca de tiempo cuando se modificó el archivo por última vez.
-
La séptima y última columna muestra el nombre del archivo.
Si desea ver los tamaños de archivo en formato “legible para humanos”, agregue el parámetro -h
a al comando ls
. Los archivos de menos de un kilobyte tendrán el tamaño que se muestra en bytes. Los archivos con más de un kilobyte y menos de un megabyte tendrán una K
agregada después del tamaño, lo que indica que el tamaño está en kilobytes. Lo mismo sigue para los tamaños de archivo en los rangos de megabytes (M
) y gigabytes (G
):
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 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 -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Para mostrar solo información sobre un conjunto específico de archivos, agregue los nombres de estos archivos a ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
¿Qué pasa con 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 anterior del directorio que hemos recuperado usando ls -l
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 comienza con un punto (.
) se ocultan automáticamente. Para verlos necesitamos agregar el parámetro -a
al comando 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 actual, mientras que ..
es un puntero al directorio padre (el directorio que contiene el directorio actual). En Linux, cada directorio contiene al menos estos dos directorios especiales.
Tip
|
Puede combinar múltiples parámetros para |
Comprendiendo los 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. 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 suave )-
Este "archivo" es un puntero a otro archivo o directorio en otra parte del sistema de archivos.
Además de esos, 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. Por ejemplo, el primer disco duro del sistema podría estar representado por
/dev/sda
. c
(dispositivo de caracteres)-
Este archivo representa un dispositivo virtual o físico. Los terminales (como el terminal principal en
/dev/ttyS0
) y los puertos seriales son ejemplos comunes de dispositivos de caracteres. s
(socket)-
Los sockets sirven como "conductos" para pasar información entre dos programas.
Warning
|
A menos que sepa lo que está haciendo, no modifique ninguno de los permisos en dispositivos de bloque, dispositivos de caracteres o sockets. ¡Esto podría evitar que su sistema funcione incorrectamente! |
Comprendiendo 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
. Tenga en cuenta que un guión -
representa la falta de un permiso particular.
Permisos en archivos
r
-
Significa read (leer) y tiene un valor octal de
4
(no se preocupe, hablaremos de los octales en breve). Esto significa permiso para abrir un archivo y leer su contenido. w
-
Significa write (escribir) y tiene un valor octal de
2
. Esto significa permiso para editar o eliminar un archivo. x
-
Significa execute (ejecutar) y tiene un valor octal de
1
. Esto significa que el archivo se puede ejecutar como un script.
Siguiendo lo explicado, 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 los nombres de archivo, pero no implica permiso para leer los archivos ellos mismos. 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 permiso de escritura en un directorio, el usuario puede cambiar los permisos de cualquier archivo en el directorio, incluso si el usuario no tiene permisos en el archivo o si el archivo es propiedad de otro usuario. x
-
Significa execute y tiene un valor octal de
1
. Esto significa permiso para ingresar a un directorio, pero no para enumerar sus archivos (para eso se necesita el permisor
).
El último bit sobre directorios puede parecer un poco confuso. Imaginemos, que tiene un directorio llamado Another_Directory
con los siguientes permisos:s
$ ls -ld Another_Directory/ d--xr-xr-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
con los siguientes permisos:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Si usted es el usuario carol
e intenta enumerar el contenido de Another_Directory
, recibirá 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
no tiene permisos de ejecución, lo que significa que puede ingresar al directorio. Por lo tanto, el usuario carol
puede acceder a los archivos dentro del directorio, siempre que tenga los permisos correctos para el archivo respectivo. En este ejemplo, el usuario tiene permisos completos para la secuencia de comandos hello.sh
, por lo que puede ejecutar la secuencia de comandos, incluso si no puede leer el contenido del directorio que lo contiene. Todo lo que se necesita es el nombre de archivo completo.
$ 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. Cada vez 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 posee el archivo, y si esto es cierto, aplica solo el primer conjunto de permisos. De lo contrario, verifica 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 del propietario son efectivos, incluso si el grupo u otros permisos son más permisivos que los permisos del propietario.
Modificando permisos de archivo
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. Sin embargo, los permisos para cambiar se pueden describir de dos maneras diferentes o "modos".
El primero, llamado modo simbólico (symbolic mode), ofrece un control detallado, que le permite agregar o revocar un solo permiso sin modificar otros en el conjunto. El otro modo modo númerico (numeric mode) es más fácil de recordar y más rápido de usar si desea establecer todos los valores de permiso a la vez.
Ambos modos conducirán al mismo resultado final. 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 comprendamos cómo funciona cada modo.
Modo simbólico
Al describir qué permisos cambiar en modo simbólico, los primeros caracteres indican los permisos que alterará: los del usuario (u
), del grupo (g
), de los demás (o
) y/o a los tres (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 a qué permiso desea afectar: leer (r
), escribir (w
) o ejecutar (x
).
Por ejemplo, imagine 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
), otorgue (+
) permisos de escritura (w
)”. Entonces, el comando sería:
$ chmod g+w text.txt
Verifiquemos el resultado con ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Si desea eliminar los permisos de lectura para el propietario del mismo archivo, piense en ello como: “Para el usuario (u
) revocar (-
), 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é sucede si queremos establecer los permisos exactamente como rw-
para todos? Luego piense en ello como: “Para todos (a
), sea igual (=
), lectura (r
), escritura (w
) y no ejecución (-
)”. 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 múltiples 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
), otorgue (+
) permisos de lectura, escritura y ejecución (rwx
), para el grupo (g
) revocar (-
), ejecutar permisos (x
)”.
Cuando se ejecuta en un directorio, chmod
solo modifica los permisos del directorio. chmod
tiene un modo recursivo, útil cuando desea 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 y antes de que los permisos cambien. Observe la siguiente manera:
$ chmod -R u+rwx Another_Directory/
Este comando se puede leer como: “Recursivamente (-R
), para el usuario (u
), otorgue (+
) permisos de lectura, escritura y ejecución (rwx
)”.
Warning
|
Tenga cuidado y piense dos veces antes de usar el interruptor |
Numeric Mode
En modo númerico los permisos se especifican de manera diferente: como un valor numérico 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 lectura (r
), que es 4
, luego escritura (w
), que es 2
y el último ejecución (x
), representada 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 (en conjunto) representan los permisos para el usuario (u
), el segundo para el grupo (g
) y el tercero para el otro (o
). Si quisiéramos establecer los permisos para un archivo como 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 numérico es la misma que en modo simbólico, el primer parámetro representa los permisos que desea cambiar y el segundo apunta al archivo o directorio donde se realizará el cambio
Tip
|
Si un valor de permiso es odd, ¡el archivo seguramente es ejecutable! |
¿Qué sintaxis usar? El modo númerico se recomienda 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 voltear solo un valor específico, independientemente de los permisos actuales para el archivo. Por ejemplo, puedo 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.
Modificando 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 modifiquemos el grupo que posee el archivo a otro grupo como students
:
$ 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 que posee un archivo no necesita pertenecer al grupo que lo posee. En el ejemplo anterior, el usuario carol
no necesita ser miembro del grupo students
. Sin embargo, ella tiene que ser miembro del grupo para transferir la propiedad del grupo del archivo a ese grupo.
El usuario o grupo puede omitirse si no desea cambiarlos. Entonces, para cambiar solo el grupo que posee un archivo, usaría chown :students text.txt
. Para cambiar solo el usuario, el comando sería chown carol text.txt
. Alternativamente, puede usar el comando chgrp students text.txt
para cambiar solo el grupo.
A menos que sea el administrador del sistema (root), no puede cambiar la propiedad de un archivo propiedad de otro usuario o grupo al que no pertenece. Si intenta hacer esto, recibirá el mensaje de error Operación no permitida
.
Consultando grupos
Antes de cambiar la propiedad de un archivo, puede ser útil saber qué grupos existen en el sistema, qué usuarios son miembros de un grupo y a qué grupos pertenece un usuario. Esas tareas se pueden realizar con dos comandos, groups
y groupmems
.
Para ver qué grupos existen en su sistema, simplemente escriba groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
Y si desea saber a qué grupos pertenece un usuario, agregue el nombre de usuario como parámetro:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Para hacer lo contrario, mostrar qué usuarios pertenecen a un grupo, use groupmems
. El parámetro -g
especifica el grupo, y -l
enumerará todos sus miembros:
$ sudo groupmems -g cdrom -l carol
Tip
|
|
Permisos especiales
Además de los permisos de lectura, escritura y ejecución para usuarios, grupos 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 o numérico, y son los siguientes:
Sticky Bit
El sticky bit, también llamado restricted deletion flag, 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 en Linux evita que los usuarios eliminen o cambien el nombre de un archivo en un directorio a menos que sean dueños de ese archivo o directorio.
Los directorios con el conjunto de bits fijos muestran una t
que reemplaza la x
en los permisos para otros a la hora de ver 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 numérico, los permisos especiales se especifican usando una "notación de 4 dígitos", con el primer dígito representando el permiso especial para actuar. Por ejemplo, para establecer el sticky bit (valor 1
) para el directorio Another_Directory
en modo numérico 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
Set 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 grupo. Esto se puede aplicar a archivos ejecutables o directorios. En los archivos ejecutables, otorgará la ejecución del archivo con privilegios del grupo. Cuando se aplica a los directorios, hará que cada archivo o directorio creado debajo herede el grupo del directorio principal.
Los archivos y directorios con bit SGID muestran una s
que reemplaza la x
en los permisos para el grupo en la salida de ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 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 lo hará comprender mejor los efectos de SGID en un directorio. Supongamos que tenemos un directorio llamado Sample_Directory
, propiedad del usuario carol
y el 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 el siguiente:
$ 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 establecido el permiso SGID, 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 del grupo indica que el bit SGID está establecido. Ahora, cambiemos a este directorio y nuevamente creemos 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
Como podemos ver, el grupo que posee el 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
.
Set UID
SUID, también conocido como "Set User ID", tiene el valor octal 4
y está representado por una s
en los permisos user en modo simbólico. Solo se aplica a los archivos y su comportamiento es similar al bit SGID, pero el proceso se ejecutará con los privilegios del usuario que posee el archivo. Los archivos con el bit SUID muestran una s
que reemplaza la x
en los permisos para el 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 múltiples permisos especiales en un parámetro agregándolos juntos. Entonces, para establecer SGID (valor 2
) y SUID (valor 4
) en modo numérico 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 admite color, y en la actualidad la mayoría de ellos lo hacen, puede ver rápidamente si estos permisos especiales se configuran al observar la salida de |
Ejercicios guiados
-
Cree un directorio llamado
emptydir
usando el comandomkdir emptydir
. Ahora, usandols
enumere los permisos para el directorioemptydir
. -
Cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora, usandochmod
con notación simbólica, 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án los permisos para un archivo llamado
text.txt
después de usar el comandochmod 754 text.txt
? -
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 la propietario del archivo?
-
Si el usuario
john
ejecuta este script, ¿bajo qué privilegios del usuario se ejecutará? -
Usando la notación numérica, ¿cuál debería ser la sintaxis de chmod para “remover” 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
? ¿Y quién puede escribirle? -
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
Escriba los permisos correspondientes para cada archivo y directorio utilizando la notación numérica 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 elimine todos los permisos para el archivo conchmod 000 emptyfile
. ¿Qué sucederá si cambia los permisos paraemptyfile
pasando solo un valor parachmod
en modo numérico, comochmod 4 emptyfile
? ¿Qué pasa si usamos dos, comochmod 44 emptyfile
? ¿Qué podemos aprender sobre la forma en quechmod
lee el valor numérico? -
¿Puede ejecutar un archivo que no tiene permisos de lectura (
--x
)? ¿Por qué o por qué no? -
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
Usuario, grupo y otros tienen permisos completos. Pero, ¿puede un usuario normal eliminar cualquier archivo dentro de este directorio? ¿Por qué de esto?
-
Un archivo llamado
test.sh
tiene los siguientes permisos:-rwsr-xr-x
, lo que significa que el bit SUID está configurado. 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 mayúscula
S
? -
¿Cómo crearía un directorio llamado
Box
donde todos los archivos pertenecen automáticamente al grupousers
y solo puede ser eliminado por el usuario que los creó?
Resumen
Como sistema multiusuario, Linux necesita una forma de rastrear quién posee y quién puede acceder a cada archivo. Esto se hace a través de un sistema de permisos de tres niveles, y en esta lección aprendimos todo sobre cómo funciona este sistema.
En esta lección, ha aprendido cómo usar ls
para obtener información sobre los permisos de archivos, cómo controlar o cambiar quién puede crear, eliminar o modificar un archivo con chmod
, tanto en notación numérica como simbólico y cómo cambiar la propiedad de archivos con chown
y chgrp
.
Los siguientes comandos se discutieron en esta lección:
ls
-
Lista de archivos, opcionalmente incluyendo detalles como permisos.
chmod
-
Cambiar los permisos de un archivo o directorio.
chown
-
Cambiar el usuario propietario y/o grupo de un archivo o directorio.
chgrp
-
Cambiar el grupo propietario de un archivo o directorio.
Respuestas a los ejercicios guiados
-
Cree un directorio llamado
emptydir
usando el comandomkdir emptydir
. Ahora, usandols
, enumere los permisos para el directorioemptydir
.Agregue el parámetro
-d
als
para ver los atributos del archivo de un directorio, en lugar de enumerar su contenido. Por lo tanto, la respuesta es:ls -l -d emptydir
Puntos de bonificación si fusionó 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 notación simbólica, 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
.Piensa en ello de esta manera:
-
“Para el usuario propietario del archivo (
u
), agregue permisos de (+
) ejecución (x
)”, entonces seríau+x
. -
“Para el grupo (
g
) y otros usuarios (o
), elimine permisos de (-
) escritura (w
) y ejecución (x
)”, entonces seríago-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án los permisos de un archivo llamado
text.txt
después de usar el comandochmod 754 text.txt
?Recuerde que en notación numérica cada dígito representa un conjunto de tres permisos, cada uno con un valor respectivo: read es
4
, write es2
, execute es1
y ningún permiso es0
. Obtenemos el valor de un dígito agregando los valores correspondientes para cada permiso.7
es4+2+1
, orwx
,5
es4+0+1
, por lo quer-x
y4
solo se leen, or-
. Los permisos paratext.txt
serían:rwxr-xr--
-
Asumamos que un archivo llamado
test.sh
es un script 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 (del 2º al 4º carácter de la salida de
ls -l
) sonrwx
, así que la respuesta es: “leer, escribir y ejecutar el archivo”. -
Si el usuario
john
ejecuta este script, ¿bajo qué privilegios de usuario se ejecutará?Preste atención a los permisos del grupo. Son "r-s", lo que significa que el bit SGID está activo. El grupo que posee este archivo es `root', por lo que el script, incluso cuando es iniciado por un usuario normal, se ejecutará con los privilegios del usuario.
-
Usando la notación numérica, ¿cúal debería ser la sintaxis de chmod para
remover
el permiso especial concedido a este archivo?Podemos
remover
los permisos especiales pasando un 4º dígito,0
achmod
. Los permisos actuales son755
, así que el comando debe 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
? ¿Y quién puede escribirle?El primer carácter de 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 escribirle. -
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
Escriba los permisos correspondientes para cada archivo y directorio utilizando la notación numérica de 4 dígitos.
Los permisos correspondientes, en notación numérica, son los siguientes:
Another_Directory
-
Respuesta:
1755
1
para sticky bit,755
para los permisos regulares (rwx
para el usuario,r-x
para el grupo y otros). foo.bar
-
Respuesta:
0044
No hay permisos especiales (por lo que el primer dígito es
0
), no hay permisos para el usuario (---
) y solo lee (r-r-
) para el grupo y otros. HugeFile.zip
-
Respuesta:
0664
No hay permisos especiales, por lo que el primer dígito es
0
.6
(rw-
) para el usuario y el grupo,4
(r-
) para los demás. Sample_Directory
-
Respuesta:
2755
2
para el bit SGID,7
(rwx
) para el usuario,5
(r-x
) para el grupo y otros.
Respuestas a los ejercicios exploratorios
-
Pruebe esto en una terminal: Cree un archivo vacío llamado
emptyfile
con el comandotouch emptyfile
. Ahora elimine todos los permisos para el archivo conchmod 000 emptyfile
. ¿Qué sucederá si cambia los permisos paraemptyfile
pasando solo un valor parachmod
en modo numérico, comochmod 4 emptyfile
? ¿Qué pasa si usamos dos, comochmod 44 emptyfile
? ¿Qué podemos aprender sobre la forma en quechmod
lee el valor numérico?Recuerde que "establecimos a cero" los permisos para
emptyfile
. Entonces, su estado inicial sería:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Ahora, intentemos con el primer comando,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Se cambiaron los permisos para otros. ¿Y si probamos dos dígitos, como
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Ahora, los permisos para grupos y otros se vieron afectados. De esto, podemos concluir que en notación numérica
chmod
lee el valor “hacia atrás”, desde el dígito menos significativo (otros) hasta el más significativo (user). Si pasa un dígito, modifica los permisos para otros. Con dos dígitos modificas grupo y otros, y con tres modificas usuario, grupo y otros y con cuatro dígitos modificas usuario, grupo, otros y los permisos especiales. -
¿Puede ejecutar un archivo que no tiene permisos de lectura (
--x
)? ¿Por qué o por qué no?Al principio, la respuesta parece obvia: si tiene permiso de ejecución, el archivo debería ejecutarse. Sin embargo, sin permiso de lectura, el sistema no puede abrir el archivo y leer su contenido para ejecutarlo. Por lo tanto, sin permiso de lectura no puede ejecutar un archivo, incluso si tiene permiso de ejecución.
-
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
Usuario, grupo y otros tienen permisos completos. Pero, ¿puede un usuario normal eliminar cualquier archivo dentro de este directorio? ¿Por qué de esto?
/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 modifique los archivos creados por otros, por lo que se establece el sticky bit (como lo indica lat
en los permisos para otros). Esto significa que un usuario puede eliminar archivos en/tmp
, pero solo si creó ese archivo. -
Un archivo llamado
test.sh
tiene los siguientes permisos:-rwsr-xr-x
, lo que significa que el bit SUID está configurado. 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 mayúscula
S
?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 caracter especial.Una
s
en 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 que posee el archivo carece de permisos de ejecución (-
) y que el bit SUID está configurado.Lo mismo puede decirse de SGID. Una
s
en minúscula en el segundo grupo de permisos significa que el grupo propietario del archivo tiene permisos de ejecución y que el bit SGID está establecido. UnaS
mayúscula significa que el grupo que posee el archivo carece de permisos de ejecución (-
) y que el bit SGID está establecido.Esto también es cierto para el sticky bit, representado por la
t
en el tercer grupo de permisos. Minúsculat
significa que el sticky bit está configurado y que otros tienen permisos de ejecución. LaT
mayúscula significa que el sticky bit está configurado 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 puede ser eliminado 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 se asigne automáticamente al grupo
usuarios
. Podemos hacer esto configurando este grupo como el propietario del directorio, y luego configurando el bit SGID en el mismo. También debemos asegurarnos de que cualquier miembro del grupo pueda escribir en ese directorio.Dado que no nos importa cuáles son los otros permisos y queremos "voltear" 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
, deberá 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 configurando el sticky bit (representado por una
t
) en el directorio. Recuerde que se establece en los permisos para otros (o
).$ chmod o+t Box/
Los permisos en el directorio
Box
deben aparecer de la siguiente manera:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Por supuesto, puede especificar SGID y el bit adhesivo utilizando solo un comando
chmod
:$ chmod g+wxs,o+t Box/
Puntos de bonificación si pensabas en eso.