File permissions and attributes (Español)

Esta traducción de
File permissions and attributes
fue revisada el
2022-11-01
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Usuarios y grupos
umask
Listas de control de acceso
Capacidades
Los
sistemas de archivos
utilizan
permisos
y
atributos
para regular el nivel de interacción que los procesos del sistema pueden tener con archivos y directorios.
Advertencia
Cuando se utilizan con fines de seguridad, los permisos y atributos solo defienden contra ataques lanzados desde el sistema iniciado. Para proteger los datos almacenados de los atacantes con acceso físico a la máquina, también se debe implementar un
cifrado data-at-rest
.
Ver los permisos
Utilice la opción
-l
de la orden
ls
para ver los permisos (o
modo de archivo
) establecidos para el contenido de un directorio, por ejemplo:
$ ls -l /ruta/al/directorio
total 128
drwxr-xr-x 2 archie archie  4096 Jul  5 21:03 Escritorio
drwxr-xr-x 6 archie archie  4096 Jul  5 17:37 Documentos
drwxr-xr-x 2 archie archie  4096 Jul  5 13:45 Descargas
-rw-rw-r-- 1 archie archie  5120 Jun 27 08:28 clientes.ods
-rw-r--r-- 1 archie archie  3339 Jun 27 08:28 todo
-rwxr-xr-x 1 archie archie  2048 Jul  6 12:56 miscript.sh
La primera columna es en lo que debemos enfocarnos. Tomando un valor de ejemplo de
drwxrwxrwx+
, el significado de cada carácter se explica en las siguientes tablas:
d
rwx
rwx
rwx
+
El tipo de archivo, técnicamente no forma parte de sus permisos. Véase
info ls -n "What information is listed"
para obtener una explicación de los posibles valores.
Los permisos que tiene el propietario sobre el archivo, explicados a continuación.
Los permisos que tiene el grupo sobre el archivo, explicados a continuación.
Los permisos que tienen todos los demás usuarios sobre el archivo, explicados a continuación.
Un solo carácter que especifica si se aplica un método de acceso alternativo al archivo. Cuando este carácter es un espacio, no existe un método de acceso alternativo. Un carácter
.
indica un archivo con un contexto de seguridad, pero ningún otro método de acceso alternativo. Un archivo con cualquier otra combinación de métodos de acceso alternativos se marca con un carácter
+
, por ejemplo en el caso de
listas de control de acceso
.
Cada una de las tres triadas de permisos (
rwx
en el ejemplo anterior) puede estar formada por los siguientes caracteres:
Carácter
Efecto en archivos
Efecto en directorios
Permiso de lectura (primer carácter)
-
No se puede leer el archivo.
No se puede mostrar el contenido del directorio.
r
El archivo se puede leer.
Se puede mostrar el contenido del directorio.
Permiso de escritura (segundo carácter)
-
El archivo no se puede modificar.
El contenido del directorio no se puede modificar.
w
El archivo se puede modificar.
El contenido del directorio se puede modificar (crear nuevos archivos o directorios; cambiar el nombre o eliminar archivos o directorios existentes); requiere que también se establezca el permiso de ejecución; de lo contrario, este permiso no tiene ningún efecto.
Permiso de ejecución (tercer carácter)
-
El archivo no se puede ejecutar.
No se puede acceder al directorio con
cd)
.
x
El archivo se puede ejecutar.
Se puede acceder al directorio con
cd
; este es el único bit de permiso que en la práctica se puede considerar "heredado" de los directorios ancestros, de hecho, si
cualquier
directorio en la ruta no tiene el bit
x
establecido, tampoco se puede acceder al archivo o directorio del final, independientemente de sus permisos; véase
path_resolution(7)
para obtener más información.
s
El bit
setuid
cuando se encuentra en la triada
u
suario; el bit
setgid
cuando se encuentra en la triada
g
rupo; no se encuentra en la triada
o
tros; también implica que
x
está establecido.
S
Igual que
s
, pero
x
no está configurado; raro en archivos normales e inútil en directorios.
t
El bit
sticky
; sólo se puede encontrar en la triada
o
tros; también implica que
x
está establecido.
T
Igual que
t
, pero
x
no está configurado; raro en archivos normales.
Véase
info Coreutils -n "Mode Structure"
y
chmod(1)
para más detalles.
Sugerencia
Puede ver los permisos a lo largo de una ruta con
namei -l
ruta
.
Ejemplos
Veamos algunos ejemplos para aclararlo:
drwx------
6 archie archie  4096 Jul  5 17:37 Documentos
Archie tiene acceso completo al directorio
Documentos
. Puede listar, crear archivos y cambiar el nombre, eliminar cualquier archivo en Documentos, independientemente de los permisos del archivo. Su capacidad para acceder a un archivo depende del permiso del mismo.
dr-x------
6 archie archie  4096 Jul  5 17:37 Documentos
Archie tiene acceso completo, excepto que no puede crear, cambiar el nombre ni eliminar ningún archivo. Puede listar los archivos y (si el permiso del archivo lo autoriza) puede acceder a un archivo existente en Documentos.
d-wx------
6 archie archie  4096 Jul  5 17:37 Documentos
Archie no puede hacer
ls
en el directorio
Documentos
, pero si conoce el nombre de un archivo existente, entonces puede listarlo, renombrarlo, eliminarlo o (si el permiso del archivo lo permite) acceder a él. Además, puede crear nuevos archivos.
d--x------
6 archie archie  4096 Jul  5 17:37 Documentos
Archie solo es capaz de (si el permiso del archivo lo permite) acceder a esos archivos en el directorio
Documentos
que conoce. No puede listar archivos ya existentes o crear, renombrar o eliminar ninguno de ellos.
Debe tener en cuenta que detallamos los permisos de directorio y no tiene nada que ver con los permisos de archivos individuales. Cuando crea un nuevo archivo, es el directorio el que cambia. Es por eso que necesita permiso de escritura en el directorio.
Veamos otro ejemplo, esta vez de un archivo, no de un directorio:
-rw-r--r--
1 archie archie  5120 Jun 27 08:28 foobar
Aquí podemos ver que la primera letra no es
d
sino
-
. Entonces sabemos que es un archivo, no un directorio. A continuación, los permisos del propietario son
rw-
por lo que el propietario tiene la capacidad de leer y escribir, pero no ejecutar. Puede parecer extraño que el propietario no tenga los tres permisos, pero el permiso
x
no es necesario ya que es un archivo de texto/datos, para ser leído por un editor de texto como Gedit, EMACS o software como R, y no un ejecutable por derecho propio (si contuviera algo como código de programación de Python, entonces muy bien podría serlo). Los permisos del grupo están configurados en
r--
, por lo que el grupo tiene la capacidad de leer el archivo pero no escribirlo/editarlo de ninguna manera; es esencialmente como configurar algo como de solo lectura. Podemos ver que los mismos permisos se aplican también a todos los demás.
Cambiar los permisos
chmod
es una orden en Linux y otros sistemas operativos similares a Unix que permite
cambiar
los permisos (o acceder al
mod
o) de un archivo o directorio.
Método de texto
Para cambiar los permisos (o el "modo de acceso") de un archivo, utilice la orden
chmod
en una terminal. A continuación se muestra la estructura general de la orden:
chmod
quién
=
permisos
archivo
Donde
quién
es cualquier variedad de letras, cada una de las cuales significa a quién se le está dando el permiso. Son los siguientes:
u
: el
usuario
que es dueño del archivo.
g
: el
grupo
al que pertenece el archivo.
o
: los
o
tros usuarios, es decir, todos los demás.
a
: (
a
ll), todo lo anterior; utilice esto en lugar de escribir
ugo
.
Los permisos son los mismos que se discutieron en
#Ver los permisos
(
r
,
w
y
x
).
Ahora eche un vistazo a algunos ejemplos utilizando esta orden. Supongamos que se vuelve muy protector con el directorio de Documentos y quiere negarle a todos menos a usted mismo, los permisos para leer, escribir y ejecutar (o en este caso buscar/mirar) en él:
Antes:
drwxr-xr-x 6 archie web  4096 Jul  5 17:37 Documentos
$ chmod g= Documentos
$ chmod o= Documentos
Después:
drwx------ 6 archie web  4096 Jul  6 17:32 Documentos
Aquí, debido a que desea denegar permisos, no coloca ninguna letra después de
=
donde se introduciría los permisos. Ahora puede ver que solo los permisos del propietario son
rwx
y todos los demás permisos son
-
.
Esto se puede revertir con:
Antes:
drwx------ 6 archie web  4096 Jul  6 17:32 Documentos
$ chmod g=rx Documentos
$ chmod o=rx Documentos
Después:
drwxr-xr-x 6 archie web  4096 Jul  6 17:32 Documentos
En el siguiente ejemplo, desea otorgar permisos de lectura y ejecución al grupo y a otros usuarios, por lo que coloca las letras de los permisos (
r
y
x
) después de
=
, sin espacios.
Puede simplificar esto para poner más de una letra
who
en la misma orden, por ejemplo:
$ chmod go=rx Documentos
Nota
No importa en qué orden coloques las letras
who
o las letras de permiso en una orden
chmod
: podría tener
chmod go=rx
archivo
o
chmod og=xr
archivo
. Es todo lo mismo.
Ahora consideremos un segundo ejemplo, supongamos que desea cambiar un archivo
foobar
para que tenga permisos de lectura y escritura, y otros usuarios en el grupo
web
que pueden ser colegas que trabajan en
foobar
, también puede leerlo y escribirlo, pero otros usuarios solo pueden leerlo:
Antes:
-rw-r--r-- 1 archie web  5120 Jun 27 08:28 foobar
$ chmod g=rw foobar
Después:
-rw-rw-r-- 1 archie web  5120 Jun 27 08:28 foobar
Esto es exactamente como el primer ejemplo pero con un archivo, no un directorio, y otorga permiso de escritura (solo para dar un ejemplo de otorgamiento de todos los permisos).
Atajos de método de texto
La orden
chmod
permite añadir y quitar permisos de un conjunto existente utilizando
+
o
-
en lugar de
=
. Esto es diferente de las órdenes anteriores, que esencialmente reescriben los permisos (por ejemplo, para cambiar un permiso de
r--
a
rw-
, aún necesita incluir
r
así como
w
después de
=
en la orden
chmod
. Si olvidó
r
, le quitaría el permiso
r
ya que se están reescribiendo con
=
. Utilizar
+
y
-
evita esto añadiendo o quitando fuera del conjunto de permisos
actual
).
Probemos este método
+
y
-
con el ejemplo anterior de añadir permisos de escritura al grupo:
Antes:
-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar
$ chmod g+w foobar
Después:
-rw-rw-r-- 1 archie web  5120 Jun 27 08:28 foobar
Otro ejemplo, quitar permisos de escritura a todos (
a
):
Antes:
-rw-rw-r-- 1 archie web  5120 Jun 27 08:28 foobar
$ chmod a-w foobar
Después:
-r--r--r-- 1 archie web  5120 Jun 27 08:28 foobar
Un atajo diferente es el modo especial
X
: este no es un modo de archivo actual, pero a menudo se utiliza junto con la opción
-R
para configurar el bit ejecutable solo para directorios, y déjelo sin cambios para archivos regulares, por ejemplo:
$ chmod -R a+rX ./data/
Copiar permisos
Es posible decirle a
chmod
que copie los permisos de una clase, digamos el propietario, y otorgue esos mismos permisos al grupo o incluso a todos. Para hacer esto, en lugar de poner
r
,
w
o
x
después de
=
, ponga otra letra
who
. Por ejemplo:
Antes:
-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar
$ chmod g=u foobar
Después:
-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar
Esta orden se traduce esencialmente en "cambiar los permisos del grupo (
g=
), para que sean los mismos que los del usuario propietario (
=u
). Tenga en cuenta que no puede copiar un conjunto de permisos, así como otorgar otros nuevos, por ejemplo:
$ chmod g=wu foobar
En ese caso
chmod
lanza un error.
Método numérico
chmod
también puede establecer permisos utilizando números.
El uso de números es otro método que le permite editar los permisos para propietarios, grupos y otros al mismo tiempo, así como los bits setuid, setgid y sticky. La estructura básica del código es esta:
$ chmod
xxx
archivo
'
xxx
es un número de 3 dígitos donde cada dígito puede ser cualquier valor del 0 al 7. El primer dígito se aplica a los permisos para el propietario, el segundo dígito se aplica a los permisos para el grupo y el tercer dígito se aplica a los permisos para todos los demás.
En esta notación numérica, los valores
r
,
w
y
x
tienen su propio valor numérico:
r=4
w=2
x=1
Para obtener un número de 3 dígitos, debe considerar qué permisos desea que tengan el propietario, el grupo y todos los demás, y luego totalizar sus valores. Por ejemplo, si desea otorgar al propietario de un directorio permisos de lectura, escritura y ejecución, y desea que el grupo y todos los demás solo tengan permisos de lectura y ejecución, obtendría los valores numéricos de la siguiente manera:
Propietario:
rwx
=4+2+1=7
Grupo:
r-x
=4+0+1=5
Otros:
r-x
=4+0+1=5
$ chmod 755
archivo
Esto es equivalente a utilizar lo siguiente:
$ chmod u=rwx
archivo
$ chmod go=rx
archivo
Para ver los permisos existentes de un archivo o directorio en formato numérico, utilice la orden
stat(1)
:
$ stat -c %a
archivo
Donde la opción %a especifica la salida en formato numérico.
La mayoría de los directorios están configurados en
755
para permitir la lectura, escritura y ejecución al propietario, pero niegan la escritura a todos los demás, y los archivos son normalmente
644
para permitir la lectura y escritura para el propietario pero solo lectura para todos los demás; véase la última nota sobre la falta de permisos
x
con archivos no ejecutables: es lo mismo aquí.
Para ver esto en acción con ejemplos, considere el ejemplo anterior que se ha utilizado pero con este método numérico aplicado en su lugar:
Antes:
-rw-r--r-- 1 archie web  5120 Jun 27 08:28 foobar
$ chmod 664 foobar
Después:
-rw-rw-r-- 1 archie web  5120 Jun 27 08:28 foobar
Si se tratara de un ejecutable, el número sería
774
si desea otorgar permiso de ejecución al propietario y al grupo. Alternativamente, si quisiera que todos tuvieran solo permiso de lectura, el número sería
444
. Tratar
r
como 4,
w
como 2 y
x
como 1 es probablemente la forma más fácil de calcular los valores numéricos para utilizar
chmod
xxx
archivo
, pero también hay un método binario, en el que cada permiso tiene un número binario, que a su vez se convierte en un número. Es un poco más complicado, pero aquí se incluye para completar.
Considere este conjunto de permisos:
-rwxr-xr--
Si coloca un 1 debajo de cada permiso otorgado y un 0 para cada permiso no otorgado, el resultado sería algo como esto:
-rwxrwxr-x
 111111101
A continuación, puede convertir estos números binarios:
000=0	    100=4
001=1	    101=5
010=2	    110=6
011=3	    111=7
El valor de lo anterior sería por tanto 775.
Considere que queríamos eliminar el permiso de escritura del grupo:
-rwxr-xr-x
 111101101
Por lo tanto, el valor sería 755 y utilizaría
chmod 755
archivo
para eliminar el permiso de escritura. Notará que obtiene el mismo número de tres dígitos sin importar el método que use. El uso de texto o números dependerá de las preferencias personales y la velocidad de escritura. Cuando desee restaurar un directorio o archivo a los permisos predeterminados, por ejemplo permiso de lectura y escritura (y ejecución) para el propietario, pero quitar el permiso de escritura a todos los demás, puede ser más rápido utilizar
chmod 755/644
archivo
. Sin embargo, si está cambiando los permisos a algo fuera de lo normal, puede ser más simple y rápido utilizar el método de texto en lugar de tratar de convertirlo en números, lo que podría generar un error. Se podría argumentar que no hay una diferencia significativa real en la velocidad de cualquiera de los métodos para un usuario que solo necesita utilizar
chmod
en ocasiones.
También puede utilizar el método numérico para configurar los bits
setuid
,
setgid
y
sticky
mediante cuatro dígitos.
setuid=4
setgid=2
sticky=1
Por ejemplo,
chmod 2777
archivo
establecerá bits de lectura/escritura/ejecutables para todos y también activará el bit
setgid
.
Bulk chmod
Generalmente, los directorios y los archivos no deben tener los mismos permisos. Si es necesario modificar de forma masiva un árbol de directorios, utilice
find
para modificar selectivamente uno u otro.
Para hacer un
chmod
a 755 solo a directorios:
$ find
directorio
-type d -exec chmod 755 {} +
Para hacer un
chmod
a 644 solo a archivos:
$ find
directorio
-type f -exec chmod 644 {} +
Cambiar el propietario
chown
cambia el propietario de un archivo o directorio, que es más rápido y más fácil que alterar los permisos en algunos casos.
Considere el siguiente ejemplo, creando una nueva partición con
GParted
para los datos de copia de seguridad. Gparted hace todo esto como superusuario, por lo que todo pertenece al superusuario por defecto. Todo esto está muy bien, pero cuando se trata de escribir datos en la partición montada, se niega el permiso a los usuarios normales.
brw-rw---- 1 root disk 8,    9 Jul  6 16:02 sda9
drwxr-xr-x 5 root root    4096 Jul  6 16:01 Backup
Como puede ver, el dispositivo en
/dev
es propiedad del superusuario (root), al igual que la ubicación de montaje (
/media/Backup
). Para cambiar el propietario de la ubicación de montaje, se puede hacer lo siguiente:
Antes:
drwxr-xr-x 5 root  root 4096 Jul  6 16:01 Backup
# chown archie /media/Backup
Después:
drwxr-xr-x 5 archie  root 4096 Jul  6 16:01 Backup
Ahora el nuevo propietario, archie, puede escribir datos en la partición sin alterar los permisos (ya que la tríada del propietario tenía permisos
rwx
).
Nota
chown
siempre borra los bits setuid y setgid.
Los usuarios que no son superusuario no pueden usar
chown
para "donar" archivos que poseen a otro usuario.
Listas de control de acceso
Las
Listas de control de acceso
proporcionan un mecanismo de permisos adicional y más flexible para los sistemas de archivos al permitir establecer permisos para cualquier usuario o grupo en cualquier archivo.
Umask
La utilidad
umask
se utiliza para controlar la máscara del modo de creación de archivos, que determina el valor inicial de los bits de permiso para los archivos recién creados.
Atributos de archivo
Aparte de los bits de modo de archivo que controlan los permisos de lectura, escritura y ejecución de
usuario y grupo
, varios
sistemas de archivos
soportan atributos de archivos que permiten una mayor personalización de las operaciones de archivos permitidas.
Advertencia
De forma predeterminada,
cp
,
rsync
y otros programas similares no conservan los atributos de los archivos.
El paquete
e2fsprogs
contiene los programas
lsattr(1)
y
chattr(1)
que listan y cambian los atributos de un archivo, respectivamente.
Estos son algunos atributos útiles. No todos los sistemas de archivos admiten todos los atributos.
a
- añadir solo: el archivo solo se puede abrir para añadir.
c
- comprimido: activa la compresión a nivel de sistema de archivos para el archivo.
i
- inmutable: no se puede modificar, eliminar, renombrar ni vincular. Solo puede ser establecido por el superusuario.
j
- diario de datos: utiliza
journal
para escribir datos de archivos y metadatos.
m
- sin compresión: desactiva la compresión a nivel de sistema de archivos para el archivo.
A
- sin actualización atime: No se modificará el atime del archivo.
C
- sin copia en escritura (CoW): desactiva la copia en escritura, para los sistemas de archivos que lo admitan.
Véase
chattr(1)
para obtener una lista completa de atributos y más información sobre lo que hace cada atributo.
Por ejemplo, si desea establecer el bit inmutable en algún archivo, utilice la siguiente orden:
# chattr +i
/ruta/al/archivo
Para eliminar un atributo en un archivo, simplemente cambie
+
a
-
.
Atributos extendidos
De
xattr(7)
: "Los atributos extendidos son pares nombre:valor asociados permanentemente con archivos y directorios". Hay cuatro clases de atributos extendidos: security (seguridad), system (sistema), trusted (confianza) y user (usuario).
Advertencia
De forma predeterminada,
cp
,
rsync
y otros programas similares no conservan los atributos extendidos; véase
#Preservar atributos extendidos
.
Los atributos extendidos también se utilizan para establecer
Capacidades
.
Atributos extendidos de usuario
Los atributos extendidos del usuario se pueden utilizar para almacenar información arbitraria sobre un archivo. Para crear uno:
$ setfattr -n user.checksum -v "3baf9ebce4c664ca8d9e5f6314fb47fb" foo.txt
Utilice getfattr para mostrar atributos extendidos:
$ getfattr -d foo.txt
# file: foo.txt
user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"
Finalmente, para eliminar un atributo extendido:
$ setfattr -x user.checksum foo.txt
Preservar atributos extendidos
Orden
Opción requerida
cp
--preserve=mode,ownership,timestamps,xattr
mv
preserva por defecto
1
tar
--xattrs
para creación y
--xattrs-include='*'
para extracción
bsdtar
-p
para extracción
rsync
--xattrs
mv descarta silenciosamente los atributos extendidos cuando el sistema de archivos de destino no los soporta.
Para preservar los atributos extendidos con
editores de texto
, debe configurarlos para truncar los archivos al guardarlos en lugar de utilizar
rename(2)
.
[1]
Consejos y trucos
Preservar root
Utilice la opción
--preserve-root
para evitar que
chmod
actúe de forma recursiva en
/
. Esto puede, por ejemplo, evitar que elimine el bit ejecutable en todo el sistema y, por lo tanto, lo rompa. Para utilizar esta opción cada vez, configúrela dentro de un
alias
. Véase también
[2]
.
Véase también
wikipedia:Chattr
Confusión de permisos de archivos de Linux
Confusión de permisos de archivos de Linux, parte 2
wikipedia:Extended file attributes#Linux
Atributos extendidos: lo bueno, lo no tan bueno, lo malo.
Copia de seguridad y restauración de permisos de archivos en Linux
¿Por qué "chmod -R 777 /" es destructivo?
El cómo y por qué de los grupos privados de usuarios en Unix