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
    • Roadmap
    • Contáctenos
  • LPI.org
104.5 Lección 1
Tema 101: Arquitectura del Sistema
101.1 Determinar y configurar los ajustes de hardware
  • 101.1 Lección 1
101.2 Arranque del sistema
  • 101.2 Lección 1
101.3 Cambiar los niveles de ejecución / objetivos de arranque y apagar o reiniciar el sistema
  • 101.3 Lección 1
Tema 102: Instalación de Linux y gestión de paquetes
102.1 Diseño del esquema de particionado del disco duro duro
  • 102.1 Lección 1
102.2 Instalar un gestor de arranque
  • 102.2 Lección 1
102.3 Gestión de librerías compartidas
  • 102.3 Lección 1
102.4 Gestión de paquetes Debian
  • 102.4 Lección 1
102.5 Gestión de paquetes RPM y YUM
  • 102.5 Lección 1
102.6 Linux como sistema virtualizado
  • 102.6 Lección 1
Tema 103: Comandos GNU y Unix
103.1 Trabajar desde la línea de comandos
  • 103.1 Lección 1
  • 103.1 Lección 2
103.2 Procesar secuencias de texto usando filtros
  • 103.2 Lección 1
103.3 Administración básica de archivos
  • 103.3 Lección 1
  • 103.3 Lección 2
103.4 Uso de secuencias de texto, tuberías y redireccionamientos
  • 103.4 Lección 1
  • 103.4 Lección 2
103.5 Crear, supervisar y matar procesos
  • 103.5 Lección 1
  • 103.5 Lección 2
103.6 Modificar la prioridad de ejecución de los procesos
  • 103.6 Lección 1
103.7 Realizar búsquedas en archivos de texto usando expresiones regulares
  • 103.7 Lección 1
  • 103.7 Lección 2
103.8 Edición básica de archivos
  • 103.8 Lección 1
Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
104.1 Creación de particiones y sistemas de archivos
  • 104.1 Lección 1
104.2 Mantener la integridad de los sistemas de archivos
  • 104.2 Lección 1
104.3 Controlar el montaje y desmontaje de los sistemas de archivos
  • 104.3 Lección 1
104.5 Administración de los permisos y los propietarios de los archivos
  • 104.5 Lección 1
104.6 Crear y cambiar enlaces duros y simbólicos
  • 104.6 Lección 1
104.7 Encontrar archivos de sistema y ubicar archivos en el lugar correspondiente
  • 104.7 Lección 1
How to get certified
  1. Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
  2. 104.5 Administración de los permisos y los propietarios de los archivos
  3. 104.5 Lección 1

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

    • Los siguientes tres caracteres, rwx, indican los permisos del grupo propietario del archivo, también denominado g.

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

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

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

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

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

groupmems solo se puede ejecutar como root, el administrador del sistema. Si actualmente no ha iniciado sesión como root, agregue sudo antes del comando.

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

0

rw-

rwx

1

rw-

rw-

2

r--

r-x

3

r--

r--

4

-w-

-wx

5

-w-

-w-

6

---

--x

7

---

---

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 ls -l. Para el bit adhesivo, el nombre del directorio podría 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 utilice.

Ejercicios Guiados

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

  2. Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora, usando chmod en modo simbólico, 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ían los permisos predeterminados para un archivo si el valor de umask se establece en 027?

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

  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? ¿Quién puede escribir en él?

  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

    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

  1. Pruebe esto en una terminal: cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora “cambie a cero” 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 octal, como chmod 4 emptyfile? ¿Y si usa dos, como en chmod 44 emptyfile? ¿Qué podemos aprender sobre la forma en que chmod lee el valor numérico?

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

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

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

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

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

  2. Cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora, usando chmod en modo simbólico, 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.

    Piense en ello de esta manera:

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

    • “Para el grupo (g) y otros usuarios (o), elimine (-), los permisos de escritura (w) y ejecución (x)”, entonces 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ían los permisos predeterminados para un archivo si el valor de umask se establece en 027?

    Los permisos serían rw-r-----

  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 el propietario del archivo?

      Los permisos para el propietario (2 a 4 caracteres en la salida de ls -l) son rwx, 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, a chmod. Los permisos actuales son 755, por lo que el comando debería 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? ¿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 grupo disk pueden escribir en él.

  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

    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 es 0), 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 es 0. 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

  1. Pruebe esto en una terminal: cree un archivo vacío llamado emptyfile con el comando touch emptyfile. Ahora “cambie a cero” 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 octal, como chmod 4 emptyfile? ¿Y si usa dos, como en chmod 44 emptyfile? ¿Qué podemos aprender sobre la forma en que chmod 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.

  2. 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 la t en los permisos de otros). Esto significa que un usuario puede eliminar archivos en /tmp, pero solo aquellos creados por él mismo.

  3. 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 (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 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. Una S 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. Una S 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. La t minúscula significa un conjunto de bits fijos y que otros tienen permisos de ejecución. La T mayúscula significa un conjunto de bits fijos y que otros no tienen permisos de ejecución.

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

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

Siguiente lección

104.6 Crear y cambiar enlaces duros y simbólicos (104.6 Lección 1)

Leer la próxima lección

Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://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.

© 2023 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.

© 1999–2023 The Linux Professional Institute Inc. Todos los derechos reservados.