Linux Professional Institute Learning Logo.
Pasar al contenido principal
  • Inicio
    • Todos los recursos
    • LPI Learning Materials
    • Conviértete en colaborador
    • Publishing Partners
    • Conviértase en un Publishing Partner
    • Acerca de nosotros
    • FAQ
    • Colaboradores
    • Contáctenos
  • LPI.org
5.3 Lección 1
Tema 1: La Comunidad Linux y una carrera en el mundo del código abierto
1.1 Los sistemas operativos populares y la evolución de Linux
  • 1.1 Lección 1
1.2 Principales aplicaciones de código abierto
  • 1.2 Lección 1
1.3 Software de Código Abierto y las licencias
  • 1.3 Lección 1
1.4 Destrezas TIC y el trabajo con Linux
  • 1.4 Lección 1
Tema 2: Encontrando el camino en un sistema Linux
2.1 Aspectos básicos de la línea de comandos
  • 2.1 Lección 1
  • 2.1 Lección 2
2.2 Uso de la línea de comandos para obtener ayuda
  • 2.2 Lección 1
2.3 Uso de directorios y listado de archivos
  • 2.3 Lección 1
  • 2.3 Lección 2
2.4 Crear, mover y borrar archivos
  • 2.4 Lección 1
Tema 3: El poder de la línea de comandos
3.1 Archivar ficheros desde la línea de comandos
  • 3.1 Lección 1
3.2 Buscar y extraer datos de los ficheros
  • 3.2 Lección 1
  • 3.2 Lección 2
3.3 Crear un script a partir de una serie de comandos
  • 3.3 Lección 1
  • 3.3 Lección 2
Tema 4: El sistema operativo Linux
4.1 La elección del sistema operativo
  • 4.1 Lección 1
4.2 Conocer el hardware del ordenador
  • 4.2 Lección 1
4.3 Donde los datos se almacenan
  • 4.3 Lección 1
  • 4.3 Lección 2
4.4 Tu ordenador en la red
  • 4.4 Lección 1
Tema 5: Seguridad y sistema de permisos de archivos
5.1 Seguridad básica e identificación de tipos de usuarios
  • 5.1 Lección 1
5.2 Creating Users and Groups
  • 5.2 Lección 1
5.3 Gestión de los permisos y la propiedad de los archivos
  • 5.3 Lección 1
5.4 Directorios y archivos especiales
  • 5.4 Lección 1
  1. Tema 5: Seguridad y sistema de permisos de archivos
  2. 5.3 Gestión de los permisos y la propiedad de los archivos
  3. 5.3 Lección 1

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 o u.

    • Los siguientes tres caracteres, rwx indican los permisos del grupo que posee el archivo, también conocido como g.

    • Los últimos tres caracteres, r-x indican los permisos para cualquier otra persona, también conocidos como otros u o.

  • 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 ls (y muchos otros comandos de Linux). ls -l -a, por ejemplo, puede escribirse como ls -la.

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 permiso r).

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 -R, ya que es fácil cambiar los permisos en archivos y directorios que no desea cambiar, especialmente en directorios con una gran cantidad de archivos y subdirectorios.

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

groupmems solo se puede ejecutar como root, el administrador del sistema. Si actualmente no está conectado como root, agregue sudo antes del comando.

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 ls -l. Para sticky bit, el nombre del directorio puede mostrarse en una fuente negra con fondo azul. Lo mismo se aplica a los archivos con los bits SGID (fondo amarillo) y SUID (fondo rojo). Los colores pueden ser diferentes según la distribución de Linux y la configuración de terminal que use.

Ejercicios guiados

  1. Cree un directorio llamado emptydir usando el comando mkdir emptydir. Ahora, usando ls enumere los permisos para el directorio emptydir.

  2. Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora, usando chmod con notación simbólica, agregue permisos de ejecución para el propietario del archivo emptyfile, y elimine los permisos de escritura y ejecución para todos los demás. Haga esto usando solo un comando chmod.

  3. ¿Cuáles serán los permisos para un archivo llamado text.txt después de usar el comando chmod 754 text.txt?

  4. 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?

  5. 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?

  6. 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

  1. Pruebe esto en una terminal: Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora elimine todos los permisos para el archivo con chmod 000 emptyfile. ¿Qué sucederá si cambia los permisos para emptyfile pasando solo un valor para chmod en modo numérico, como chmod 4 emptyfile? ¿Qué pasa si usamos dos, como chmod 44 emptyfile? ¿Qué podemos aprender sobre la forma en que chmod lee el valor numérico?

  2. ¿Puede ejecutar un archivo que no tiene permisos de lectura (--x)? ¿Por qué o por qué no?

  3. 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?

  4. 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?

  5. ¿Cómo crearía un directorio llamado Box donde todos los archivos pertenecen automáticamente al grupo users 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

  1. Cree un directorio llamado emptydir usando el comando mkdir emptydir. Ahora, usando ls, enumere los permisos para el directorio emptydir.

    Agregue el parámetro -d a ls 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.

  2. Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora, usando chmod en notación simbólica, agregue permisos de ejecución para el propietario del archivo emptyfile, y elimine los permisos de escritura y ejecución para todos los demás. Haga esto usando solo un comando chmod.

    Piensa en ello de esta manera:

    • “Para el usuario propietario del archivo (u), agregue permisos de (+) ejecución (x)”, entonces sería u+x.

    • “Para el grupo (g) y otros usuarios (o), elimine permisos de (-) escritura (w) y ejecución (x)”, entonces sería go-wx.

      Para combinar estos dos conjuntos de permisos, agregamos una coma entre ellos. Entonces el resultado final es:

      chmod u+x,go-wx emptyfile
  3. ¿Cuáles serán los permisos de un archivo llamado text.txt después de usar el comando chmod 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 es 2, execute es 1 y ningún permiso es 0. Obtenemos el valor de un dígito agregando los valores correspondientes para cada permiso. 7 es 4+2+1, o rwx, 5 es 4+0+1, por lo que r-x y 4 solo se leen, o r-. Los permisos para text.txt serían:

    rwxr-xr--
  4. 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) son rwx, 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 a chmod. Los permisos actuales son 755, así que el comando debe ser chmod 0755.

  5. 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 grupo disk pueden escribirle.

  6. 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

  1. Pruebe esto en una terminal: Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora elimine todos los permisos para el archivo con chmod 000 emptyfile. ¿Qué sucederá si cambia los permisos para emptyfile pasando solo un valor para chmod en modo numérico, como chmod 4 emptyfile? ¿Qué pasa si usamos dos, como chmod 44 emptyfile? ¿Qué podemos aprender sobre la forma en que chmod 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.

  2. ¿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.

  3. 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 la t en los permisos para otros). Esto significa que un usuario puede eliminar archivos en /tmp, pero solo si creó ese archivo.

  4. 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 (o t) toma el lugar de la x en la salida de ls -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. Una S 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. Una S 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úscula t significa que el sticky bit está configurado y que otros tienen permisos de ejecución. La T mayúscula significa que el sticky bit está configurado y que otros no tienen permisos de ejecución.

  5. ¿Cómo crearía un directorio llamado Box donde todos los archivos pertenecen automáticamente al grupo users, 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 comando sudo 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.

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

Siguiente lección

5.4 Directorios y archivos especiales (5.4 Lección 1)

Leer la próxima lección

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

LPI es una organización sin fines de lucro.

Linux Professional Institute (LPI) es la organización global de certificación y apoyo académico para profesionales de código abierto. Con más de 200,000 titulares de certificación, es el primer y más grande organismo de certificación no comercial del mundo para Linux y Open Source. LPI cuenta con profesionales certificados en más de 180 países, realiza exámenes en varios idiomas y tiene cientos de socios de capacitación.

Nuestro propósito es hacer que las oportunidades económicas y creativas estén disponibles para todos, haciendo que el conocimiento de código abierto y la certificación sea universalmente accesible.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contáctenos
  • Política de privacidad y cookies

¿Detecta un error o desea ayudar a mejorar esta página? Por favor háznoslo saber.

© Copyright 1999-2020 The Linux Professional Institute Inc. Todos los derechos reservados.