Hola a todos. Esta es la traducción de un artículo del libro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 y EX300.
Por mi parte: Espero que el artículo sea útil no solo para principiantes, sino que también ayude a administradores más experimentados a organizar sus conocimientos.
Así que, ¡empecemos!

Para acceder a archivos en Linux, se utilizan permisos. Estos permisos se asignan a tres entidades: el propietario del archivo, el propietario del grupo y otro objeto (es decir, todos los demás). En este artículo aprenderás cómo aplicar permisos.
El artículo comienza con una revisión de conceptos básicos, luego se discuten permisos especiales (Special permissions) y listas de control de acceso (ACL). Al final de este artículo se aborda la configuración de permisos por defecto a través de umask, así como la gestión de atributos extendidos de usuario.
Gestión de propiedad de archivos
Antes de discutir sobre permisos, debes conocer el papel del propietario de un archivo y un directorio. La propiedad de archivos y directorios es vital para trabajar con permisos. En esta sección, primero aprenderás cómo puedes ver al propietario. Luego aprenderás cómo cambiar el propietario del grupo y del usuario para archivos y directorios.
Visualización del propietario de un archivo o directorio
En Linux, cada archivo y cada directorio tiene dos propietarios: el usuario y el propietario del grupo.
Estos propietarios se establecen al crear un archivo o un directorio. El usuario que crea el archivo se convierte en el propietario de ese archivo, y el grupo primario al que pertenece este mismo usuario también se convierte en el propietario de ese archivo. Para determinar si como usuario tienes acceso a un archivo o directorio, la shell verifica la propiedad de los mismos.
Esto ocurre en el siguiente orden:
- La shell verifica si eres el propietario del archivo al que deseas acceder. Si eres ese propietario, obtienes los permisos y la shell deja de verificar.
- Si no eres el propietario del archivo, la shell comprobará si eres miembro del grupo que tiene permisos para ese archivo. Si eres miembro de ese grupo, obtienes acceso al archivo con los permisos que se establecieron para el grupo, y la shell detendrá la verificación.
- Si no eres ni un usuario ni el propietario del grupo, obtienes los derechos de otros usuarios (Other).
Para ver las asignaciones actuales del propietario, puedes usar el comando ls -l. Este comando muestra el usuario y el propietario del grupo. A continuación, puedes ver la configuración del propietario para los directorios en el directorio /home.
[root@server1 home]# ls -l
total 8
drwx------. 3 bob bob 74 Feb 6 10:13 bob
drwx------. 3 caroline caroline 74 Feb 6 10:13 caroline
drwx------. 3 fozia fozia 74 Feb 6 10:13 fozia
drwx------. 3 lara lara 74 Feb 6 10:13 lara
drwx------. 5 lisa lisa 4096 Feb 6 10:12 lisa
drwx------. 14 user user 4096 Feb 5 10:35 user
Con el comando Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual. puedes mostrar el propietario de los archivos en este directorio. A veces puede ser útil obtener una lista de todos los archivos en el sistema donde se especifica a este usuario o grupo como propietario. Para ello, puedes usar find. El argumento find -user puede ser utilizado para este propósito. Por ejemplo, el siguiente comando muestra todos los archivos cuyo propietario es el usuario linda:
find / -user lindaTambién puedes usar find para buscar archivos cuyo propietario sea un grupo específico.
Por ejemplo, el siguiente comando busca todos los archivos pertenecientes al grupo usuarios:
find / -group usersCambio de propietario
Para aplicar los permisos adecuados, lo primero que hay que considerar es la propiedad. Para esto existe el comando chown. La sintaxis de este comando es fácil de entender:
chown quien quePor ejemplo, el siguiente comando cambia el propietario del directorio /home/account al usuario linda:
chown linda /home/accountComando chown tiene varias opciones, una de las cuales es especialmente útil: -R. Puedes adivinar lo que hace, porque esta opción está disponible también para muchos otros comandos. Esto te permite establecer el propietario de manera recursiva, lo que te permite establecer el propietario del directorio actual y todo lo que se encuentra debajo. El siguiente comando cambia el propietario del directorio /home y todo lo que contiene a la usuaria linda:
Ahora los propietarios se ven así:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Ejecutemos:
[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#
Ahora la usuaria lisa se ha convertido en propietaria del directorio account:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Cambio de propietario del grupo
Hay dos formas de cambiar la propiedad de un grupo. Puedes hacerlo usando chown, pero hay un comando especial llamado chgrp, que hace este trabajo. Si deseas usar el comando chown, utiliza . o : antes del nombre del grupo.
El siguiente comando cambia el propietario del grupo de /home/account a el grupo account:
chown .account /home/account
Puedes usar chown para cambiar el propietario de usuario y/o grupo de varias maneras. Aquí tienes algunos ejemplos:
- chown lisa myfile1 establece al usuario lisa como el propietario del archivo myfile1.
- chown lisa.sales myfile establece al usuario lisa como el propietario del archivo myfile, y también establece al grupo sales como el propietario de ese mismo archivo.
- chown lisa:sales myfile es lo mismo que el comando anterior.
- chown .sales myfile establece al grupo sales como el propietario del archivo myfile sin cambiar el propietario del usuario.
- chown :sales myfile es lo mismo que el comando anterior.
Puedes usar el comando chgrp, para cambiar el propietario del grupo. Considera el siguiente ejemplo, donde puedes usar chgrp para establecer como propietario del directorio account al grupo sales:
chgrp .sales /home/accountAl igual que con chown, puedes usar la opción -R con chgrp, y también cambiar recursivamente el propietario del grupo.
Entendiendo el propietario por defecto
Puedes haber notado que cuando un usuario crea un archivo, se aplica la propiedad por defecto.
El usuario que crea el archivo automáticamente se convierte en el propietario de ese archivo, y el grupo principal de ese usuario se convierte automáticamente en el propietario de ese archivo. Normalmente, este es el grupo que se indica en el archivo /etc/passwd como el grupo principal del usuario. Sin embargo, si el usuario es miembro de varios grupos, puede cambiar su grupo principal efectivo.
Para mostrar el grupo primario efectivo actual, el usuario puede usar el comando groups:
[root@server1 ~]# groups lisa
lisa : lisa account sales
Si el usuario actual linda quiere cambiar su grupo primario efectivo, usará el comando newgrp, seguido del nombre del grupo que desea establecer como su nuevo grupo primario efectivo. Después de usar el comando newgrp el grupo primario estará activo hasta que el usuario escriba el comando exit o cierre sesión.
A continuación se muestra cómo el usuario linda utiliza este comando, convirtiendo al grupo sales en su grupo primario:
lisa@server1 ~]$ groups
lisa cuenta ventas
[lisa@server1 ~]$ newgrp ventas
[lisa@server1 ~]$ groups
ventas lisa cuenta
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa ventas 0 Feb 6 10:06 file1
Después de cambiar el grupo principal activo, todos los nuevos archivos creados por el usuario se asignarán a este grupo como propietario del grupo. Para volver a la configuración original del grupo primario, utilice exit.
Para poder usar el comando newgrp, el usuario debe ser miembro del grupo que desea utilizar como primario. Además de esto, se puede usar la contraseña grupal para el grupo con el comando gpasswd. Si el usuario utiliza el comando newgrp, pero no es miembro del grupo de destino, la shell solicitará la contraseña del grupo. Después de ingresar la contraseña grupal correcta, se establecerá un nuevo grupo primario efectivo.
Gestión de permisos primarios
El sistema de permisos de Linux fue inventado en la década de 1970. Dado que las necesidades computacionales eran limitadas en esos años, el sistema básico de permisos era bastante restringido. Este sistema de permisos utiliza tres permisos que se pueden aplicar a archivos y directorios. En esta sección, aprenderá a utilizar y modificar estos permisos.
Comprensión de los permisos de lectura, escritura y ejecución
Los tres permisos básicos le permiten leer, escribir y ejecutar archivos. El efecto de estos permisos es diferente al aplicarse a archivos o directorios. En relación a un archivo, el permiso de lectura le da derecho a abrir el archivo para leerlo. Por lo tanto, puede leer su contenido, pero esto significa que su computadora puede abrir el archivo para hacer algo con él.
Un archivo de programa que requiere acceso a una biblioteca, por ejemplo, debe tener acceso de lectura a esa biblioteca. Esto implica que el permiso de lectura es el permiso más básico que necesita para trabajar con archivos.
En relación a un directorio, la lectura permite mostrar el contenido de ese directorio. Debe saber que este permiso no le permite leer archivos dentro del directorio. El sistema de permisos de Linux no entiende la herencia, y la única forma de leer un archivo es usar permisos de lectura para ese archivo.
Como probablemente puedas adivinar, el permiso de escritura, si se aplica a un archivo, permite escribir en el archivo. En otras palabras, permite modificar el contenido de archivos existentes. Sin embargo, no permite crear o eliminar nuevos archivos ni cambiar los permisos del archivo. Para ello, necesitas otorgar permiso de escritura al directorio donde deseas crear el archivo. En los directorios, este permiso también permite crear y eliminar nuevos subdirectorios.
El permiso de ejecución es lo que necesitas para ejecutar un archivo. Nunca se establece por defecto, lo que hace que Linux sea prácticamente inmune a los virus. Solo alguien con permisos de escritura en el directorio puede aplicar el permiso de ejecución.
A continuación se resume el uso de los permisos básicos:

Uso de chmod
Para gestionar los permisos se utiliza el comando chmod. Al usar chmod puedes establecer permisos para el usuario (user), el grupo (group) y otros (other). Puedes usar este comando en dos modos: modo relativo y modo absoluto. En modo absoluto, se utilizan tres cifras para establecer los permisos básicos.

Al configurar los permisos, calcula el valor que necesitas. Si deseas establecer lectura, escritura y ejecución para el usuario, lectura y ejecución para el grupo, así como lectura y ejecución para otros en el archivo /somefile, usarías el siguiente comando chmod:
chmod 755 /somefileCuando usas chmod de esta manera, todos los permisos actuales son sustituidos por los permisos que tú estableciste.
Si deseas cambiar los permisos en relación a los permisos actuales, puedes usar chmod en modo relativo. Al usar chmod en modo relativo trabajas con tres indicadores para indicar qué quieres hacer:
- Primero indicas para quién deseas cambiar los permisos. Para ello, puedes elegir entre el usuario (» podemos tratarlos como funciones normales de entrada/salida que toman archivo, posición, búfer en memoria y cuentan la cantidad de bytes a leer o escribir.), el grupo (g) y otros (o).
- ). Luego usas un operador para añadir o eliminar permisos del modo actual o estableces los permisos de manera absoluta.
- Por último, usas r, w y x, para indicar qué permisos deseas establecer.
Al cambiar permisos en modo relativo, puedes omitir la parte de «quién» para añadir o eliminar permisos para todos los objetos. Por ejemplo, este comando añade permisos de ejecución para todos los usuarios:
chmod +x somefileAl trabajar en modo relativo, también puedes usar comandos más complejos. Por ejemplo, este comando añade permisos de escritura al grupo y elimina permisos de lectura para otros:
chmod g+w,o-r somefileAl usar chmod -R o+rx /data estás estableciendo permisos de ejecución para todos los directorios, así como para los archivos en el directorio /data. Para establecer permisos de ejecución solo para directorios y no para archivos, utiliza chmod -R o+ rX /data.
La 'X' en mayúscula garantiza que los archivos no obtengan permisos de ejecución si el archivo ya no ha establecido permisos de ejecución para algunos objetos. Esto hace que 'X' sea una forma más sensata de manejar permisos de ejecución; evitará establecer este permiso en archivos donde no es necesario.
Permisos avanzados
Además de los permisos básicos que acabas de leer, Linux también tiene un conjunto de permisos avanzados. No son los permisos que estableces por defecto, pero a veces proporcionan un complemento útil. En esta sección aprenderás lo que son y cómo configurarlos.
Comprensión de los permisos avanzados SUID, GUID y sticky bit
Hay tres permisos avanzados. El primero de ellos es el permiso de establecimiento del identificador de usuario (SUID). En algunas situaciones especiales, puedes aplicar este permiso a los archivos ejecutables. Por defecto, el usuario que ejecuta un archivo ejecutable, corre este archivo con sus propios permisos.
Para los usuarios normales, esto suele significar que el uso del programa está limitado. Sin embargo, en algunas ocasiones, el usuario requiere permisos especiales solo para realizar una tarea específica.
Consideremos, por ejemplo, la situación en la que el usuario necesita cambiar su contraseña. Para ello, el usuario debe escribir su nueva contraseña en el archivo /etc/shadow. Sin embargo, este archivo no está disponible para escritura para los usuarios que no tienen permisos de acceso root:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Abr 30 16:54 /etc/shadow
La autorización SUID ofrece una solución a este problema. En la utilidad /usr/bin/passwd, esta autorización se aplica por defecto. Esto significa que al cambiar la contraseña, el usuario obtiene temporalmente derechos de root, lo que le permite escribir en el archivo /etc/shadow. Puede ver la autorización SUID con ls -l cómo s en la posición donde normalmente esperarías ver x para permisos de usuario:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd
La autorización SUID puede parecer útil (y en algunos casos lo es), pero al mismo tiempo puede ser potencialmente peligrosa. Si se aplica incorrectamente, podrías otorgar accidentalmente permisos de root. Por lo tanto, recomiendo utilizarla solo con la máxima precaución.
La mayoría de los administradores nunca tendrán que usarla; solo la verás en algunos archivos donde el sistema operativo debe establecerla por defecto.
La segunda autorización especial es el identificador de grupo (SGID). Esta autorización tiene dos efectos. Cuando se aplica a un archivo ejecutable, otorga al usuario que ejecuta el archivo los permisos del propietario del grupo de ese archivo. Así, SGID puede realizar más o menos lo mismo que SUID. Sin embargo, para este propósito, SGID se utiliza muy raramente.
Al igual que con la autorización SUID, SGID se aplica a algunos archivos del sistema como configuración predeterminada.
Cuando se aplica a un directorio, SGID puede ser útil, porque lo puedes usar para establecer el propietario del grupo por defecto para los archivos y subdirectorios creados en ese directorio. Por defecto, cuando un usuario crea un archivo, su grupo primario efectivo se establece como el propietario del grupo para ese archivo.
Esto no siempre es muy útil, sobre todo porque los usuarios de Red Hat/CentOS tienen asignado como grupo principal un grupo con el mismo nombre que el usuario, y de los cuales el usuario es el único miembro. Así, por defecto, los archivos que crea el usuario serán grupales para acceso común.
Imagina una situación en la que las usuarias linda y lori trabajan en contabilidad y son miembros del grupo account. Por defecto, estos usuarios son miembros de un grupo privado, del cual son los únicos miembros. Sin embargo, ambos usuarios son miembros del grupo account, pero también como parámetro de un grupo secundario.
La situación por defecto es que, cuando cualquiera de estos usuarios crea un archivo, el grupo principal se convierte en el propietario. Por lo tanto, por defecto, linda no puede acceder a los archivos creados por lori, y viceversa. Sin embargo, si creas un directorio compartido de grupo (digamos, /groups/account) y te aseguras de que se aplique el permiso SGID a este directorio y que la cuenta del grupo esté establecida como propietario del grupo para este directorio, todos los archivos creados en este directorio y en todos sus subdirectorios también reciben al grupo account como el propietario por defecto.
Por esta razón, el permiso SGID es un permiso muy útil para establecer en los directorios de grupos compartidos.
El permiso SGID se muestra en la salida ls -l cómo s en la posición donde normalmente encuentras el permiso de ejecución del grupo:
[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Abr 30 21:28 account
El tercero de los permisos especiales es el sticky bit. Este permiso es útil para proteger archivos contra eliminación accidental en un entorno donde varios usuarios tienen permisos de escritura en el mismo directorio. Si se aplica el sticky bit, un usuario solo puede eliminar un archivo si es el propietario del archivo o del directorio que contiene el archivo. Por esta razón, se aplica como permiso por defecto para el directorio /tmp y también puede ser útil para los directorios de grupos compartidos.
Sin el sticky bit, si un usuario puede crear archivos en un directorio, también puede eliminar archivos de ese directorio. En un entorno de grupo público, esto puede ser molesto. Imagina a los usuarios linda y lori, quienes ambos tienen permisos de escritura en el directorio /data/account y obtienen estos permisos gracias a su participación en el grupo account. Por lo tanto, linda puede eliminar archivos creados por lori, y viceversa.
Cuando aplicas el sticky bit, un usuario puede eliminar archivos solo si se cumple una de las siguientes condiciones:
- El usuario es el propietario del archivo;
- El usuario es el propietario del directorio que contiene el archivo.
Al usar ls -l, puedes ver el sticky bit como t en la posición donde normalmente verá los permisos de ejecución para otros:
[root@hnl data]# ls -ld cuenta/
drwxr-sr-t. 2 root cuenta 4096 Abr 30 21:28 cuenta/
Aplicación de permisos avanzados
Para aplicar SUID, SGID y el sticky bit, también puede utilizar chmod. SUID tiene un valor numérico de 4, SGID tiene un valor numérico de 2, y el sticky bit tiene un valor numérico de 1.
Si desea aplicar estos permisos, necesita agregar un argumento de cuatro dígitos en chmod, el primer dígito se refiere a los permisos especiales. La siguiente línea, por ejemplo, agregará el permiso SGID al directorio y establecerá rwx para el usuario y rx para el grupo y otros:
chmod 2755 /somedirEsto es bastante impráctico si necesita ver los permisos actuales que están establecidos, antes de trabajar con chmod en modo absoluto. (Usted corre el riesgo de sobrescribir los permisos si no lo hace.) Por lo tanto, recomiendo trabajar en modo relativo si necesita aplicar alguno de los permisos especiales:
- Para SUID utilice chmod u+s.
- Para SGID utilice chmod g+s.
- Para el sticky bit utilice chmod +t, y luego el nombre del archivo o directorio para el que desea establecer los permisos.
La tabla resume todo lo que es importante saber sobre la gestión de permisos especiales.

Ejemplo de trabajo con permisos especiales
En este ejemplo, utiliza permisos especiales para facilitar que los miembros del grupo intercambien archivos en el directorio del grupo compartido. Asigna el bit ID del identificador de grupo y también el sticky bit, y ve que después de configurarlos, se agregan funciones que facilitan la colaboración entre los miembros del grupo.
- Abre la terminal, en la que eres el usuario linda. Puedes crear un usuario con el comando useradd linda, agrega una contraseña passwd linda.
- Crea en la raíz el directorio /data y el subdirectorio /data/sales con el comando mkdir -p /data/sales. Ejecuta cd /data/sales, para cambiar al directorio sales. Ejecuta touch linda1 y touch linda2, para crear dos archivos vacíos, cuyo propietario es linda.
- Ejecuta su - lisa para cambiar el usuario actual al usuario lisa, que también es miembro del grupo sales.
- Ejecuta cd /data/sales y desde este directorio ejecuta ls -l. Verás los dos archivos que fueron creados por el usuario linda y pertenecen al grupo linda. Ejecuta rm -f linda*. Esto eliminará ambos archivos.
- Ejecuta touch lisa1 y touch lisa2, para crear dos archivos, que pertenecen al usuario lisa.
- Ejecuta su - para elevar sus privilegios al nivel root.
- Ejecuta chmod g+s,o+t /data/sales, para establecer el bit de identificador de grupo (GUID), así como el bit sticky en el directorio del grupo compartido.
- Ejecuta su — linda. Luego ejecute touch linda3 y touch linda4. Ahora debe ver que los dos archivos que creó pertenecen al grupo sales, que es el propietario del grupo del directorio /data/sales.
- Ejecuta rm -rf lisa*. El bit sticky impide la eliminación de estos archivos en nombre del usuario linda, ya que no es el propietario de esos archivos. Tenga en cuenta que si el usuario linda es el propietario del directorio /data/sales, aún puede eliminar esos archivos.
Gestión de ACL (setfacl, getfacl) en Linux
Incluso si los permisos extendidos discutidos anteriormente agregan funcionalidad útil a cómo Linux maneja los permisos, no le permiten otorgar permisos a más de un usuario o un grupo en un solo archivo.
Las listas de control de acceso ofrecen esta función. Además, permiten a los administradores establecer permisos predeterminados de manera compleja, donde los permisos establecidos pueden variar en diferentes directorios.
Entendiendo las ACL
Aunque la subestructura de ACL agrega excelentes funcionalidades a su servidor, tiene una desventaja: no todas las utilidades la soportan. Por lo tanto, puede perder configuraciones de ACL al copiar o mover archivos, y el software de respaldo puede no realizar una copia de seguridad de las configuraciones de ACL.
La utilidad tar no soporta ACL. Para asegurarse de que las configuraciones de ACL no se pierdan al hacer una copia de seguridad, utilice star en lugar de tar. star funciona con los mismos parámetros que tar; simplemente agrega soporte para las configuraciones de ACL.
También puede hacer una copia de seguridad de ACL utilizando getfacl, que se puede restaurar con el comando setfacl. Para hacer una copia de seguridad, use getfacl -R /directory > file.acls. Para restaurar configuraciones desde un archivo de respaldo, use setfacl —restore=file.acl.
La falta de soporte por algunas herramientas no debería ser un problema. Las listas de ACL a menudo se aplican a directorios como medida estructural, en lugar de a archivos individuales.
Por lo tanto, no habrá muchos, solo unos pocos, aplicados en lugares inteligentes del sistema de archivos. Por lo tanto, restaurar las listas ACL originales con las que trabajó será relativamente fácil, incluso si su software de respaldo no las soporta.
Preparación del sistema de archivos para ACL
Antes de comenzar a trabajar con ACL, puede ser necesario preparar el sistema de archivos para soportar ACL. Dado que es necesario ampliar los metadatos del sistema de archivos, no siempre hay soporte por defecto para ACL en el sistema de archivos. Si al configurar las listas ACL para el sistema de archivos recibe el mensaje 'operación no soportada', es posible que su sistema de archivos no soporte ACL.
Para corregir esto, necesita agregar la opción acl mount en el archivo /etc/fstab, para que el sistema de archivos se monte con el soporte de ACL por defecto.
Modificar y ver la configuración de ACL con setfacl y getfacl
Para establecer ACL, necesita el comando setfacl. Para ver la configuración actual de ACL, necesita getfacl. El comando ls -l no muestra ninguna ACL existente; simplemente muestra un + después de la lista de permisos, indicando que las listas ACL se aplican también al archivo.
Antes de configurar las listas ACL, siempre es útil mostrar la configuración actual de ACL con getfacl. A continuación, en el ejemplo, puede ver los permisos actuales, como se muestra con ls -l, así como se muestra con getfacl. Si observa con suficiente atención, verá que la información mostrada es exactamente la misma.
[root@server1 \/]# ls -ld \/dir\ndrwxr-xr-x. 2 root root 6 Feb 6 11:28 \/dir\n[root@server1 \/]# getfacl \/dir\ngetfacl: Eliminando el '/' inicial de los nombres de las rutas absolutas\n# file: dir\n# owner: root\n# group: root\nuser::rwx\ngroup::r-x\nother::r-x
Como resultado de ejecutar el comando getfacl se observa a continuación que los permisos se muestran para tres objetos diferentes: usuario, grupo y otros. Ahora, agreguemos ACL para otorgar permisos de lectura y ejecución al grupo sales. El comando para esto es setfacl -m g:sales:rx \/dir. En este comando -m indica que la configuración actual de ACL debe modificarse. Después de esto, g:sales:rx indica al comando establecer ACL de lectura y ejecución (rx) para el grupo (g) sales. A continuación, puede ver cómo se ve el comando y la salida del comando getfacl después de modificar la configuración actual de ACL.
[root@server1 \/]# setfacl -m g:sales:rx \/dir\n[root@server1 \/]# getfacl \/dir\ngetfacl: Eliminando el '/' inicial de los nombres de las rutas absolutas\n# file: dir\n# owner: root\n# group: root\nuser::rwx\ngroup::r-x\ngroup:sales:r-x\nmask::r-x\nother::r-x
Ahora que entiendes cómo configurar un ACL grupal, es fácil comprender los ACL para usuarios y otros usuarios. Por ejemplo, el comando setfacl -m u:linda:rwx /data otorga permisos al usuario linda en el directorio /data, sin convertirlo en propietario y sin cambiar la asignación del propietario actual.
Comando setfacl tiene muchas posibilidades y opciones. Una opción es especialmente importante, el parámetro -R. Si se utiliza, esta opción configura los ACL para todos los archivos y subdirectorios que actualmente existen en el directorio donde estableces los ACL. Se recomienda utilizar siempre esta opción al modificar las listas de ACL para directorios existentes.
Trabajando con ACL por defecto
Una de las ventajas de usar listas de ACL es que puedes otorgar permisos a varios usuarios o grupos en un directorio. Otra ventaja es que puedes habilitar la herencia, trabajando con ACL por defecto.
Al establecer ACL por defecto, definirás los permisos que se aplicarán a todos los nuevos elementos creados en el directorio. Ten en cuenta que los ACL por defecto no cambian los permisos de los archivos y subdirectorios existentes. Para cambiarlos, ¡necesitas agregar también un ACL normal!
Esto es importante saber. Si deseas usar ACL para configurar el acceso de varios usuarios o grupos a un mismo directorio, debes establecer ACL dos veces. Primero utiliza setfacl -R -m, para modificar los ACL de los archivos actuales. Luego utiliza setfacl -m d:, para ocuparte de todos los nuevos elementos que también se crearán.
Para establecer ACL por defecto, solo necesitas añadir la opción d después de la opción -m (¡el orden importa!). Así que usa setfacl -m d:g:sales:rx /data, si deseas que el grupo de ventas lea y ejecute todo lo que se cree en el directorio /data.
Al utilizar listas de ACL por defecto, también puede ser útil establecer ACL para otros. Generalmente, esto no tiene mucho sentido porque también puedes cambiar los permisos para otros utilizando chmod. Sin embargo, lo que no puedes hacer con esto es chmod, que es especificar los permisos que deben otorgarse a otros usuarios para cada nuevo archivo que se cree. Si desea que otros no tengan ningún permiso sobre lo que se crea en /data, por ejemplo, use setfacl -m d:o::- /data.
Los ACL y los permisos habituales no siempre están bien integrados. Pueden surgir problemas si ha aplicado ACL por defecto a un directorio, y luego se agregan elementos a ese directorio y se intenta cambiar los permisos habituales. Los cambios que se aplican a los permisos habituales no se reflejarán bien en la revisión de los ACL. Para evitar problemas, primero establezca los permisos habituales, y después establezca los ACL por defecto (y después de eso, intente no volver a cambiarlos).
Ejemplo de gestión de permisos avanzados utilizando ACL
En este ejemplo, continuará trabajando con los directorios /data/account y /data/sales que creó anteriormente. En ejemplos anteriores, garantizó que el grupo sales tuviera permisos en /data/sales, y que el grupo account tuviera permisos en /data/account.
Primero, asegúrese de que el grupo account tenga permisos de lectura en el directorio /data/sales, y que el grupo sales tenga permisos de lectura en el directorio /data/account.
Luego, establece las listas de ACL por defecto para asegurarte de que todos los nuevos archivos tengan los permisos correctos para todos los nuevos elementos.
- Abre el terminal.
- Ejecuta setfacl -m g:account:rx /data/sales y setfacl -m g:sales:rx /data/account.
- Ejecuta getfacl, para asegurarte de que los permisos se establecieron como deseabas.
- Ejecuta setfacl -m d:g:account:rwx,g:sales:rx /data/sales, para establecer ACL por defecto para el directorio sales.
- Agrega ACL por defecto para el directorio /data/account, usando setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Asegúrate de que las configuraciones de ACL estén funcionando al agregar un nuevo archivo a /data/sales. Ejecuta touch /data/sales/newfile y ejecuta getfacl /data/sales/newfile para comprobar los permisos actuales.
Estableciendo permisos por defecto con umask
Arriba aprendiste cómo trabajar con ACL por defecto. Si no usas ACL, hay un parámetro de shell que define los permisos por defecto que recibirás: umask (máscara inversa). En esta sección aprenderás cómo modificar los permisos por defecto con umask.
Probablemente notaste que al crear un nuevo archivo, se establecen algunos permisos por defecto. Estos permisos se determinan por la configuración umaskEste parámetro de la shell se aplica a todos los usuarios al iniciar sesión en el sistema. En el parámetro umask se utiliza un valor numérico que se resta de los permisos máximos que pueden establecerse automáticamente para un archivo; la configuración máxima para archivos es 666 y para directorios es 777.
Sin embargo, hay algunas excepciones a esta regla. Puedes encontrar una revisión completa de la configuración umask en la tabla a continuación.
De los números utilizados en umask, como en el caso de los argumentos numéricos para el comando chmod, el primer dígito se refiere a los permisos del usuario, el segundo dígito se refiere a los permisos del grupo y el último se refiere a los permisos por defecto establecidos para otros. El valor umask por defecto 022 da 644 para todos los nuevos archivos y 755 para todos los nuevos directorios creados en tu servidor.
Una revisión completa de todos los valores numéricos umask y sus resultados en la tabla a continuación.

Una forma sencilla de ver cómo funciona el parámetro umask es la siguiente: comienza con los permisos por defecto del archivo establecidos en 666 y resta umask para obtener los permisos efectivos. Haz lo mismo para el directorio y sus permisos por defecto 777.
Hay dos maneras de cambiar la configuración de umask: para todos los usuarios y para usuarios individuales. Si deseas establecer umask para todos los usuarios, debes asegurarte de que el parámetro umask se tenga en cuenta al iniciar archivos de entorno de shell, como se indica en /etc/profile. El enfoque correcto es crear un script de shell llamado umask.sh en el directorio /etc/profile.d y especificar el umask que deseas utilizar en este script de shell. Si se cambia umask en este archivo, se aplica a todos los usuarios después de iniciar sesión en el servidor.
Una alternativa a configurar umask a través de /etc/profile y archivos relacionados, donde se aplica a todos los usuarios que inician sesión, es cambiar la configuración de umask en un archivo llamado .profile que se crea en el directorio personal de cada usuario.
Las configuraciones aplicadas en este archivo se aplican solo a un usuario individual; por lo tanto, este es un buen método si necesitas más detalle. Personalmente, me gusta esta función para cambiar el valor de umask por defecto para el usuario root a 027, mientras que los usuarios normales trabajan con umask por defecto 022.
Trabajo con atributos extendidos del usuario
Esta es la sección final sobre los permisos en Linux.
Al trabajar con permisos, siempre hay una relación entre el objeto del usuario o del grupo y los permisos que esos objetos de usuario o grupo tienen para un archivo o directorio. Un método alternativo para proteger archivos en un servidor Linux es trabajar con atributos.
Los atributos funcionan independientemente del usuario que accede al archivo.
Al igual que con las ACL, para los atributos de archivo puede ser necesario habilitar la opción mount.
Esta es la opción user_xattr. Si recibe el mensaje "operación no soportada" al trabajar con atributos extendidos del usuario, asegúrese de que la opción esté establecida mount en el archivo /etc/fstab.
Muchos atributos están documentados. Algunos atributos están disponibles, pero aún no se han implementado. No los use; no le ofrecerán nada.
A continuación se presentan los atributos más útiles que puede aplicar:
A Este atributo garantiza que el tiempo de acceso al archivo no cambie.
Normalmente, cada vez que se abre un archivo, el tiempo de acceso debe registrarse en los metadatos del archivo. Esto afecta negativamente al rendimiento; por lo tanto, para archivos a los que se accede regularmente, se puede utilizar el atributo A para desactivar esta función.
a Este atributo permite añadir, pero no eliminar, el archivo.
c Si utiliza un sistema de archivos que admite compresión a nivel de volumen, este atributo del archivo garantiza que el archivo se comprima al activar por primera vez el mecanismo de compresión.
ataques Este atributo garantiza que los cambios en los archivos se escriban en el disco de inmediato, en lugar de en la caché primero. Este es un atributo útil en archivos importantes de bases de datos, asegurando que no se pierdan entre la caché del archivo y el disco duro.
d Este atributo garantiza que el archivo no se guarde en copias de seguridad donde se utiliza la utilidad de volcado.
I Este atributo habilita la indexación para el directorio en el que está habilitado. Esto proporciona un acceso más rápido a los archivos para sistemas de archivos primitivos, como Ext3, que no utilizan una base de datos B-tree para el acceso rápido a los archivos.
i Este atributo hace que el archivo sea inmutable. Por lo tanto, no se pueden realizar cambios en el archivo, lo que es útil para archivos que requieren protección adicional.
j Este atributo garantiza que en el sistema de archivos ext3, el archivo se registra primero en el diario y luego en los bloques de datos en el disco duro.
s Sobrescribir los bloques en los que se guardó el archivo con ceros tras su eliminación. Esto garantiza que la recuperación del archivo sea imposible una vez que ha sido eliminado.
» podemos tratarlos como funciones normales de entrada/salida que toman archivo, posición, búfer en memoria y cuentan la cantidad de bytes a leer o escribir. Este atributo conserva información sobre la eliminación. Esto permite desarrollar una utilidad que trabaje con esta información para recuperar archivos eliminados.
Si desea aplicar los atributos, puede utilizar el comando chattr. Por ejemplo, use chattr +s somefile, para aplicar los atributos a somefile. ¿Necesita eliminar el atributo? Entonces use chattr -s somefile, y será eliminado. Para obtener una visión general de todos los atributos que actualmente se aplican, use el comando lsattr.
Currículum
En este artículo, aprendió cómo trabajar con permisos. Leyó sobre los tres permisos básicos, permisos extendidos y cómo aplicar listas ACL en el sistema de archivos. También aprendió a usar el parámetro umask para establecer permisos predeterminados. Al final de este artículo, aprendió a usar atributos de usuario extendidos para aplicar un nivel adicional de seguridad al sistema de archivos.
Si le gustó esta traducción, le agradecería que lo dijera en los comentarios. Sería más motivación para hacer traducciones útiles.
En el artículo corregí algunos errores tipográficos y gramaticales. Reduje algunos párrafos extensos a otros más cortos para facilitar la lectura.
En lugar de "Solo alguien con derechos administrativos en el directorio puede aplicar el permiso de ejecución." lo corregí a "Solo alguien con permisos de escritura en el directorio puede aplicar el permiso de ejecución.", lo cual es más correcto.
Gracias por los comentarios .
Reemplacé:
Si no es el propietario del usuario, el shell verificará si es miembro de un grupo que también se llama grupo de archivo.Por:
Si no eres el propietario del archivo, la shell comprobará si eres miembro del grupo que tiene permisos para ese archivo. Si eres miembro de ese grupo, obtienes acceso al archivo con los permisos que se establecieron para el grupo, y la shell detendrá la verificación.Gracias por el comentario
Fuente: habr.com
