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