GNU/Linux >> Tutoriales Linux >  >> Linux

Introducción al comando chmod de Linux

Cada objeto en su sistema Linux tiene un modo de permiso que describe qué acciones puede realizar un usuario en él. Hay tres tipos de permisos:lectura (r ), escribe (w ) y ejecutar (x ).

Para leer un archivo es ver su contenido. Por ejemplo, un archivo de texto debe tener leer permiso para que alguien lea el texto dentro. Si el usuario quiere agregar una oración a ese archivo, necesita escribir permiso. El ejecutar El permiso permite que alguien ejecute un archivo, como un script de shell o un archivo de programa binario.

Permisos básicos

El ls -l El comando muestra los permisos asignados a un archivo. Por ejemplo:

ls -l
-rw-rw-r-- 1 bruce bruce    0 Jul 30 16:25 schedule1.txt

Algunos permisos (rw ) aparecen más de una vez porque se refieren a diferentes entidades:usuario , grupo y otro . Usuario es sinónimo de propietario y grupo se refiere al grupo principal del usuario, los cuales son bruce . Otro se refiere a todos los demás usuarios.

La primera posición indica el tipo de objeto:- para un archivo, d para un directorio, y l para un enlace simbólico. Las siguientes nueve posiciones se agrupan en grupos de tres y describen el modo de permiso. Las posiciones están ordenadas r ,w ,x , y los grupos están ordenados usuario , grupo , otro .

Archivos

Aparecería un archivo con bits de lectura, escritura y ejecución establecidos para todas las entidades:

rwxrwxrwx 

Por supuesto, no solemos configurar archivos de forma tan permisiva en el mundo real; esto es solo una ilustración de cómo se usa cada posición.

En el siguiente ejemplo, se configura un archivo para su propietario (pablo ) para tener permisos de lectura y escritura, para que los miembros del grupo solo tengan permiso de lectura y para que todos los demás no tengan permisos.

-rw-r----- 1 pablo pablo    0 Jul 30 16:25 textfile

El chmod El comando modifica el modo de permiso de los objetos en el sistema. Es uno de los comandos más utilizados e importantes del conjunto de comandos de seguridad de Linux.

Un plus (+ El símbolo ) agrega un permiso y un signo menos (- El símbolo ) elimina un permiso. Puedes leer chmod u+r como "usuario más lectura", ya que le da al usuario leer permiso. El comando chmod u-r significa "usuario menos lectura", ya que toma la lectura permiso lejos del usuario.

Directorios

Los mismos tres permisos también se aplican a un directorio. Un directorio debe tener el leer permiso para que un usuario vea su contenido. Necesitará escribir permiso para que un usuario agregue al directorio (por ejemplo, para crear un nuevo archivo). Para que un usuario cambie a un directorio (cd ), debe tener ejecutar permiso.

drw-rw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS

Pablo puede ser el propietario del directorio JBOSS, pero como no tiene permiso de ejecución, no puede cd en ello. Puede usar el comando chmod u+x para agregar el permiso, y luego puede cd en él.

$ cd JBOSS
bash: cd: JBOSS: Permission denied
$ chmod u+x JBOSS
$ ls -l
drwxrw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
$ cd JBOSS
$ pwd
/opt/JBOSS

Argumentos combinados

Puede combinar argumentos usando una coma. En este ejemplo, solo necesita un comando para establecer permisos para que el grupo no pueda escribir en un archivo ni el resto del mundo pueda leerlo:

$ chmod o-r,g-w readme.txt
$ ls -l
-rw-r----- 1 pablo share 0 Jul 31 13:34 readme.txt

Puede leer esto como "otros menos lectura y grupo menos escritura".

Supongamos que Denise ha escrito un script Bash llamado home_backup.sh y quiere darle ejecutar permiso. También quiere evitar que alguien más lo lea, escriba o ejecute. Una forma de hacerlo es con los símbolos más y menos:

$ chmod go-rw,u+x home_backup.sh

Otra forma es usando los iguales (= ) símbolo. Esto establecerá los permisos absolutamente sin tener en cuenta la configuración anterior. Tenga en cuenta que hay un espacio después del segundo igual; esto indica un valor de ninguno :

$ chmod u=rwx,go= home_backup.sh

Puede leer esto como "permisos para el usuario iguales a lectura, escritura y ejecución y permisos para grupos y otros iguales a ninguno".

Modo numérico

Chmod también admite un modo numérico, que utiliza valores asignados a cada posición:

--- --- --- rwx rwx rwx
uuu ggg ooo u=usuario, g=grupo, o=otro

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:

-rwx------ 1 denise denise 0 Jul 31 13:53 home_backup.sh

Denise agrega los números que corresponden a cada permiso que quiere aplicar:

400 + 200 + 100 =700

Su comando será chmod 700 home_backup.sh . Supongamos que Denise quisiera restablecer los permisos originales en el archivo:

-rw-rw-r-- 1 denise denise 0 Jul 31 13:53 home_backup.sh

El valor de estos permisos se calcula en 664:

400 + 200 + 40 + 20 + 4 =664

Denise puede usar el comando chmod 664 home_backup.sh para restaurar los permisos originales.

Modos especiales

Se pueden establecer otros tres modos en un objeto:

propietario grupo otro
r w x r w x r w x
400 200 100 40 20 10 4 2 1

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 .

Extras

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.


Linux
  1. Una introducción al uso de tcpdump en la línea de comandos de Linux

  2. Introducción al comando chown de Linux

  3. Domina el comando ls de Linux

  4. Comando chmod de Linux

  5. El comando de localización en Linux

Domina la línea de comandos de Linux

Restaurar permiso ejecutable al comando Chmod en Linux

El comando elegir en Linux

El comando del temporizador en Linux

5 ejemplos prácticos del comando de lectura en Linux

Ejemplos esenciales del comando ps en Linux

    nombre simbólico numérico
    setuid s 4000
    setgid s 2000
    pegajoso t 1000