El valor total de un conjunto de permisos se puede calcular y pasar al comando chmod como un único argumento. Tome el ejemplo con Denise y su script de respaldo. Si usa el modo numérico para establecer los permisos en su secuencia de comandos, primero debe calcular el valor total:
nombre | simbólico | numérico |
setuid | s | 4000 |
setgid | s | 2000 |
pegajoso | t | 1000 |
El SetUID bit impone la propiedad del usuario en un archivo ejecutable. Cuando se establece, el archivo se ejecutará con el ID de usuario del propietario del archivo, no con la persona que lo ejecuta.
$ chmod u+s
El SetGID bit impone la propiedad del grupo en archivos y directorios. Cuando se establece, cualquier archivo o directorio creado en un directorio obtendrá la propiedad del grupo del directorio, no la del usuario. Cuando se establece en un archivo, el archivo siempre se ejecutará como su grupo propietario en lugar de como el usuario:
$ chmod g+s
El pegajoso bit, también conocido como el "indicador de eliminación restringida", se puede configurar en un directorio para evitar que cualquier persona, excepto el propietario del directorio, elimine un archivo en ese directorio:
$ chmod o+t
El sticky bit se puede configurar en modo numérico agregando su valor a los de los otros permisos. Si tiene un objeto con un valor de 755 y desea establecer el sticky bit, agregue 1000:
1000 + 400 + 200 + 100 + 40 + 10 + 4 + 1 =1755
Este comando sería chmod 1755 . Varios métodos simbólicos son equivalentes; un ejemplo es chmod u=rwx,go=rx,o+t .
La letra a es un atajo para asignar permisos a todos los usuarios. El comando chmod a+rwx es equivalente a chmod ugo+rwx .
Recursivo
Como muchos otros comandos de Linux, chmod tiene un argumento recursivo, -R , que le permite operar en un directorio y su contenido de forma recursiva. Por recursivo, se entiende que el comando intentará operar en todos los objetos debajo del directorio especificado en lugar de solo en el directorio mismo. Este ejemplo comienza en un directorio vacío y agrega -v argumento (detallado), por lo que chmod informará lo que está haciendo:
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
conf:
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
$ chmod -vR 700 conf
mode of 'conf' changed from 0775 (rwxrwxr-x) to 0700 (rwx------)
mode of 'conf/conf.xml' changed from 0664 (rw-rw-r--) to 0700 (rwx------)
Referencia
Un comando de archivo de referencia (--reference=RFILE ) se puede utilizar para duplicar el modo de otro archivo (RFILE ), conocido como archivo de referencia. Esto es útil cuando está cambiando los modos en los archivos para que coincidan con una determinada configuración o cuando no conoce el modo exacto, o no desea tomarse el tiempo para calcularlo:
$ ls -l
-rw-r--r-x 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
$ chmod --reference=readme.txt notes.txt
$ ls -l
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
Reportar cambios
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
El comando chmod también tiene un -c (--cambios ), que le dice a chmod que informe solo cuando se realiza un cambio (frente a -v , o -detallado , que le dice a chmod que reporte toda su salida). Chmod aún informará de otras cosas, como si una operación no está permitida.
El argumento -f (--silencio , --silencio ) suprime la mayoría de los mensajes de error. Usando este argumento con -c mostrará solo cambios reales.
Preservar raíz
La raíz (/ ) del sistema de archivos de Linux debe tratarse con gran respeto. Si alguien comete un error de comando en este nivel, las consecuencias pueden ser terribles y dejar un sistema completamente inútil, particularmente cuando está ejecutando un comando recursivo que hará cualquier tipo de cambio, o peor aún:eliminaciones. Afortunadamente, el --preserve-root del comando chmod argumento protegerá y preservará la raíz. Si el argumento se usa con un comando chmod recursivo en la raíz, no pasará nada y verá este mensaje:
[alan@localhost ~]# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe
La opción no tiene efecto cuando no se usa con recursivo. Sin embargo, si el usuario raíz ejecuta el comando, los permisos de / cambiarán, pero no los de otros archivos o directorios.
[alan@localhost ~]$ chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted
[root@localhost /]# chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)
Sorprendentemente, este no es el argumento predeterminado; --no-conservar-raíz es. Si ejecuta un comando sin la opción "preservar", se establecerá de manera predeterminada en el modo "no preservar" y posiblemente cambie los permisos de los archivos que no se deben cambiar.
[alan@localhost ~]$ chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Conclusión
Todos los objetos en un sistema Linux tienen un conjunto de permisos. Es importante revisarlos y mantenerlos de vez en cuando para evitar accesos no deseados.