Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Hola a todos. Esta es una traducción de un artículo del libro RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 y EX300.

De mi mismo: Espero que el artículo sea útil no solo para los principiantes, sino que también ayude a los administradores más experimentados a optimizar sus conocimientos.

Así que, vamos.

Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Para acceder a archivos en Linux, se utilizan permisos. Estos permisos se asignan a tres objetos: el propietario del archivo, el propietario del grupo y otro objeto (es decir, todos los demás). En este artículo, aprenderá a aplicar permisos.

Este artículo comienza con una descripción general de los conceptos básicos, seguido de una discusión sobre los permisos especiales y las listas de control de acceso (ACL). Al final de este artículo, cubrimos la configuración de permisos predeterminados a través de umask, así como la administración de atributos de usuario extendidos.

Gestión de propiedad de archivos

Antes de discutir los permisos, debe tener en cuenta el rol del propietario del archivo y del directorio. La propiedad de archivos y directorios es vital para gestionar los permisos. En esta sección, primero aprenderá cómo puede ver al propietario. Luego aprenderá a cambiar el propietario y el usuario del grupo para archivos y directorios.

Mostrar el propietario de un archivo o directorio

En Linux, cada archivo y cada directorio tiene dos propietarios: un usuario y un propietario de grupo.

Estos propietarios se establecen cuando se crea un archivo o directorio. El usuario que crea el archivo se convierte en propietario de ese archivo y el grupo principal al que pertenece el mismo usuario también se convierte en propietario de ese archivo. Para determinar si usted, como usuario, tiene permiso para acceder a un archivo o directorio, el shell verifica la propiedad.

Esto sucede en el siguiente orden:

  1. El shell verifica si usted es el propietario del archivo al que desea acceder. Si usted es el propietario, obtiene permisos y el shell deja de verificar.
  2. Si no es el propietario del archivo, el shell verificará si es miembro de un grupo que tiene permisos en el archivo. Si es miembro de este grupo, accederá al archivo con los permisos que el grupo ha establecido y el shell dejará de verificar.
  3. Si no es usuario ni propietario de un grupo, se le otorgan los derechos de otros usuarios (Otros).

Para ver las asignaciones de propietarios actuales, puede usar el comando ls -l. Este comando muestra el usuario y el propietario del grupo. A continuación puede 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

Usando el comando ls puede mostrar el propietario de los archivos en un directorio determinado. A veces puede ser útil obtener una lista de todos los archivos en el sistema que tienen un usuario o grupo dado como propietario. Para esto puedes usar encontrar. Argumento encontrar usuario se puede utilizar para este propósito. Por ejemplo, el siguiente comando enumera todos los archivos que son propiedad del usuario linda:

find / -user linda

También puedes usar encontrar para buscar archivos que tengan un determinado grupo como propietario.

Por ejemplo, el siguiente comando busca todos los archivos que pertenecen al grupo usuarios:

find / -group users

cambio de dueño

Para aplicar los permisos adecuados, lo primero que hay que tener en cuenta es la propiedad. Hay un comando para esto chown. La sintaxis de este comando es fácil de entender:

chown кто что

Por ejemplo, el siguiente comando cambia el propietario del directorio /home/account al usuario linda:

chown linda /home/account

Equipo chown tiene varias opciones, una de las cuales es particularmente útil: -R. Puede adivinar lo que hace porque esta opción también está disponible para muchos otros comandos. Esto le permite establecer recursivamente el propietario, lo que le permite establecer el propietario del directorio actual y todo lo que se encuentra debajo. El siguiente comando cambia la propiedad del directorio /home y todo lo que está debajo de él al usuario 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

Hagamos:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Ahora la usuaria lisa se ha convertido en propietaria del directorio de cuentas:

[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

Cambiar el propietario de un grupo

Hay dos formas de cambiar la propiedad de un grupo. Puedes hacer esto usando chown, pero hay un comando especial llamado chgrpeso hace el trabajo Si desea utilizar el comando chown, usar . o : delante del nombre del grupo.

El siguiente comando cambia cualquier propietario del grupo /home/account al grupo de cuentas:

chown .account /home/account

Puede utilizar chown para cambiar el propietario de un usuario y/o grupo de varias maneras. Aquí hay unos ejemplos:

  • chown lisa mi archivo1 establece al usuario lisa como propietario de myfile1.
  • chown lisa.ventas myfile establece al usuario lisa como propietario del archivo myfile y también establece al grupo de ventas como propietario del mismo archivo.
  • chown lisa: mi archivo de ventas lo mismo que el comando anterior.
  • chown .ventas mi archivo establece el grupo de ventas como propietario de myfile sin cambiar el propietario del usuario.
  • chown :miarchivo de ventas lo mismo que el comando anterior.

Puedes usar el comando chgrppara cambiar el propietario del grupo. Considere el siguiente ejemplo, donde puede usar chgrp establezca el propietario del directorio de la cuenta en el grupo de ventas:

chgrp .sales /home/account

Como en el caso de chown, puedes usar la opción -R с chgrp, así como cambiar recursivamente el propietario del grupo.

Comprensión del propietario predeterminado

Es posible que haya notado que cuando un usuario crea un archivo, se aplica la propiedad predeterminada.
El usuario que crea el archivo se convierte automáticamente en el propietario de ese archivo y el grupo principal de ese usuario se convierte automáticamente en el propietario de ese archivo. Este suele ser el grupo que aparece en el archivo /etc/passwd como el grupo principal del usuario. Sin embargo, si el usuario es miembro de más de un grupo, el usuario puede cambiar el grupo principal efectivo.

Para mostrar el grupo primario efectivo actual, el usuario puede usar el comando grupos:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Si el usuario linda actual quiere cambiar el grupo primario efectivo, usará el comando nuevo gruposeguido del nombre del grupo que desea establecer como el nuevo grupo principal efectivo. Después de usar el comando nuevo grupo el grupo primario estará activo hasta que el usuario ingrese un comando salida o no cerrar la sesión.

A continuación, se muestra cómo el usuario linda usa este comando, con ventas como grupo principal:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Después de cambiar el grupo principal efectivo, todos los archivos nuevos creados por el usuario tendrán ese grupo como propietario del grupo. Para volver a la configuración del grupo principal original, use salida.

Para poder usar el comando nuevo grupo, el usuario debe ser miembro del grupo que desea utilizar como grupo principal. Además, se puede usar una contraseña de grupo para un grupo usando el comando gcontraseña. Si el usuario usa el comando nuevo grupopero no es miembro del grupo objetivo, el shell solicita la contraseña del grupo. Después de ingresar la contraseña de grupo correcta, se establecerá un nuevo grupo principal efectivo.

Gestión de derechos fundamentales

El sistema de permisos de Linux se inventó en la década de 1970. Dado que las necesidades informáticas eran limitadas en esos años, el sistema básico de permisos era bastante limitado. Este sistema de permisos utiliza tres permisos que se pueden aplicar a archivos y directorios. En esta sección, aprenderá a usar y cambiar estos permisos.

Descripción de los permisos de lectura, escritura y ejecución

Tres permisos básicos le permiten leer, escribir y ejecutar archivos. El efecto de estos permisos difiere cuando se aplica a archivos o directorios. Para un archivo, el permiso de lectura le otorga el derecho de abrir el archivo para leerlo. Por lo tanto, puede leer su contenido, pero eso significa que su computadora puede abrir el archivo para hacer algo con él.

Un archivo de programa que necesita acceso a una biblioteca debe, por ejemplo, tener acceso de lectura a esa biblioteca. De ello se deduce que el permiso de lectura es el permiso más básico que necesita para trabajar con archivos.

Cuando se aplica a un directorio, la lectura le permite mostrar el contenido de ese directorio. Debe tener en cuenta que este permiso no le permite leer los archivos en el directorio. El sistema de permisos de Linux no conoce la herencia, y la única forma de leer un archivo es usar permisos de lectura en ese archivo.

Como probablemente pueda adivinar, el permiso de escritura, si se aplica a un archivo, permite escribir en el archivo. En otras palabras, le permite cambiar el contenido de los archivos existentes. Sin embargo, no le permite crear o eliminar archivos nuevos ni cambiar los permisos de los archivos. Para hacer esto, debe otorgar permiso de escritura en el directorio donde desea crear el archivo. En los directorios, este permiso también le permite crear y eliminar nuevos subdirectorios.

El permiso de ejecución es lo que necesita para ejecutar el archivo. Nunca se instalará de forma predeterminada, lo que hace que Linux sea casi completamente 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:

Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Usando chmod

El comando se utiliza para administrar los permisos. chmod... Utilizando chmod puede establecer permisos para el usuario (usuario), grupos (grupo) y otros (otros). Puede usar este comando en dos modos: modo relativo y modo absoluto. En modo absoluto, se utilizan tres dígitos para establecer permisos básicos.

Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Al establecer permisos, calcule el valor que necesita. Si desea configurar lectura/escritura/ejecución para el usuario, lectura/ejecución para el grupo y lectura/ejecución para otros en/algún archivo, use el siguiente comando chmod:

chmod 755 /somefile

cuando usas chmod de esta manera, todos los permisos actuales se reemplazan por los permisos que establezca.

Si desea cambiar los permisos relativos a los permisos actuales, puede utilizar chmod en modo relativo. Usando chmod en modo relativo trabajas con tres indicadores para indicar lo que quieres hacer:

  1. Primero especifica para quién desea cambiar los permisos. Para ello, puede elegir entre usuario (u), grupo (g) y otros (o).
  2. A continuación, utiliza una declaración para agregar o eliminar permisos del modo actual, o establecerlos de forma absoluta.
  3. Al final usas r, w и xpara especificar qué permisos desea establecer.

Al cambiar los permisos en modo relativo, puede omitir la parte "a" para agregar o eliminar permisos para todos los objetos. Por ejemplo, este comando agrega permiso de ejecución para todos los usuarios:

chmod +x somefile

Cuando trabaje en modo relativo, también puede usar comandos más complejos. Por ejemplo, este comando agrega permiso de escritura a un grupo y elimina el permiso de lectura para otros:

chmod g+w,o-r somefile

Cuando se utiliza el chmod -R o+rx /datos configura el permiso de ejecución para todos los directorios, así como para los archivos en el directorio /data. Para configurar el permiso de ejecución solo para directorios y no para archivos, use chmod -R o+ rX /datos.

La X mayúscula garantiza que los archivos no obtengan permiso de ejecución a menos que el archivo ya haya establecido el permiso de ejecución para algunos objetos. Esto hace que X sea una forma más inteligente de manejar los permisos de ejecución; esto evitará establecer este permiso en archivos donde no es necesario.

Derechos extendidos

Además de los permisos básicos sobre los que acaba de leer, Linux también tiene un conjunto de permisos avanzados. Estos no son los permisos que establece de forma predeterminada, pero a veces proporcionan una adición útil. En esta sección, aprenderá qué son y cómo configurarlos.

Descripción de los permisos extendidos SUID, GUID y Sticky Bit

Hay tres permisos avanzados. El primero de ellos es el permiso para establecer un identificador de usuario (SUID). En algunos casos especiales, puede aplicar este permiso a archivos ejecutables. De forma predeterminada, un usuario que ejecuta un ejecutable ejecuta ese archivo con sus propios permisos.

Para los usuarios normales, esto suele significar que el uso del programa es limitado. Sin embargo, en algunos casos, el usuario necesita permisos especiales, solo para realizar una tarea específica.

Considere, por ejemplo, una situación en la que un usuario necesita cambiar su contraseña. Para ello, el usuario debe escribir su nueva contraseña en el archivo /etc/shadow. Sin embargo, los usuarios no root no pueden escribir en este archivo:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

El permiso SUID ofrece una solución a este problema. La utilidad /usr/bin/passwd utiliza este permiso de forma predeterminada. Esto significa que al cambiar la contraseña, el usuario se convierte temporalmente en root, lo que le permite escribir en el archivo /etc/shadow. Puede ver el permiso SUID con ls -l cómo s en una posición en la que normalmente esperaría ver x para permisos personalizados:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

El permiso SUID puede parecer útil (y en algunos casos lo es), pero al mismo tiempo es potencialmente peligroso. Si no se aplica correctamente, puede ceder accidentalmente los permisos de root. Por lo tanto, recomiendo usarlo solo con el mayor cuidado.

La mayoría de los administradores nunca necesitarán usarlo; solo lo verá en algunos archivos donde el sistema operativo debería configurarlo por defecto.

El segundo permiso especial es el identificador de grupo (SGID). Este permiso tiene dos efectos. Cuando se aplica a un archivo ejecutable, otorga al usuario que ejecuta el archivo los permisos del propietario del grupo del archivo. Entonces SGID puede hacer más o menos lo mismo que SUID. Sin embargo, SGID prácticamente no se usa para este propósito.

Al igual que con el permiso SUID, SGID se aplica a algunos archivos del sistema como configuración predeterminada.

Cuando se aplica a un directorio, el SGID puede ser útil porque puede usarlo para establecer el propietario del grupo predeterminado para los archivos y subdirectorios creados en ese directorio. De forma predeterminada, cuando un usuario crea un archivo, su grupo principal efectivo se establece como el propietario del grupo para ese archivo.

Esto no siempre es muy útil, especialmente porque los usuarios de Red Hat/CentOS tienen su grupo principal establecido en un grupo con el mismo nombre que el usuario y del cual el usuario es el único miembro. Así, por defecto, los archivos que cree el usuario se compartirán de forma masiva.

Imagina una situación en la que las usuarias linda y lori trabajan en contabilidad y son miembros de un grupo cuenta. De forma predeterminada, estos usuarios son miembros de un grupo privado del que son el único miembro. Sin embargo, ambos usuarios son miembros del grupo de cuentas, pero también como un parámetro de grupo secundario.

La situación predeterminada 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 crea un directorio de grupo compartido (por ejemplo, /groups/account) y se asegura de que el permiso SGID se aplique a ese directorio y que la cuenta de grupo esté configurada como propietaria del grupo para ese directorio, todos los archivos creados en ese directorio y todos de sus subdirectorios, también obtenga la cuenta de grupo como propietario del grupo de forma predeterminada.

Por esta razón, el permiso SGID es un permiso muy útil para establecer en directorios de grupos públicos.

Permiso SGID mostrado en la salida ls -l cómo s en la posición donde normalmente encontraría permiso para ejecutar un grupo:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

El tercero de los permisos especiales es el sticky bit. Este permiso es útil para proteger los archivos de una eliminación accidental en un entorno en el que varios usuarios tienen acceso de escritura al mismo directorio. Si se usa un sticky bit, un usuario solo puede eliminar un archivo si es el usuario propietario del archivo o directorio que contiene el archivo. Por esta razón, se usa como permiso predeterminado para el directorio /tmp y también puede ser útil para los directorios de grupos públicos.

Sin el bit adhesivo, si el 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. Imagine a los usuarios linda y lori, quienes tienen permisos de escritura en el directorio /data/account y obtienen esos permisos al ser miembros del grupo de cuentas. Por lo tanto, linda puede borrar archivos creados por lori y viceversa.

Cuando aplica el bit adhesivo, el usuario solo puede eliminar archivos si se cumple una de las siguientes condiciones:

  • El usuario es el propietario del archivo;
  • El usuario es el propietario del directorio donde se encuentra el archivo.

Cuando se utiliza el ls -l, puedes ver la parte pegajosa como t en la posición donde normalmente vería el permiso de ejecución para otros:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Aplicación de derechos ampliados

Para aplicar SUID, SGID y sticky bit también puedes usar chmod. SUID tiene un valor numérico de 4, SGID tiene un valor numérico de 2 y Sticky Bit tiene un valor numérico de 1.

Si desea aplicar estos permisos, debe agregar un argumento de cuatro dígitos a chmod, cuyo primer dígito se refiere a permisos especiales. La siguiente línea, por ejemplo, agregará el permiso SGID al directorio y configurará rwx para el usuario y rx para el grupo y otros:

chmod 2755 /somedir

Esto es bastante poco práctico si necesita ver los permisos actuales que se establecen antes de trabajar con chmod en modo absoluto. (Corre el riesgo de sobrescribir los permisos si no lo hace). Por lo tanto, recomiendo ejecutar en modo relativo si necesita aplicar alguno de los permisos especiales:

  1. Para uso SUID chmod u + s.
  2. Para uso SGID chmod g + s.
  3. Para uso con punta adhesiva. chmod + t, seguido del nombre del archivo o directorio para el que desea establecer permisos.

La tabla resume todo lo que necesita saber sobre la gestión de permisos especiales.

Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Ejemplo de trabajo con derechos especiales

En este ejemplo, utiliza permisos especiales para facilitar que los miembros del grupo compartan archivos en el directorio del grupo compartido. Asigne el bit de ID al ID de grupo establecido, así como el bit fijo, y verá que una vez que se configuran, se agregan funciones para facilitar que los miembros del grupo trabajen juntos.

  1. Abra una terminal donde sea el usuario linda. Puede crear un usuario con el comando usuarioañadir linda, agregar contraseña contraseña linda.
  2. Cree el directorio /data en la raíz y el subdirectorio /data/sales con el comando mkdir -p /datos/ventas. Completo cd /datos/ventaspara ir al directorio de ventas. Completo toca linda1 и toca linda2para crear dos archivos vacíos propiedad de linda.
  3. Ejecutar su-lisa para cambiar el usuario actual al usuario lisa, que también es miembro del grupo de ventas.
  4. Ejecutar cd /datos/ventas y desde ese directorio ejecutar ls -l. Verá dos archivos que fueron creados por el usuario linda y pertenecen al grupo linda. Completo rm-f linda*. Esto eliminará ambos archivos.
  5. Ejecutar toque lisa1 и toque lisa2para crear dos archivos que son propiedad del usuario lisa.
  6. Ejecutar su- para elevar sus privilegios a root.
  7. Ejecutar chmod g+s,o+t /datos/ventaspara establecer el bit de identificador de grupo (GUID) así como el bit fijo en el directorio de grupo compartido.
  8. Ejecutar su-linda. Entonces hazlo toca linda3 и toca linda4. Ahora debería ver que los dos archivos que creó son propiedad del grupo de ventas, que es el propietario del grupo del directorio /data/sales.
  9. Ejecutar rm-rf lisa*. El sticky bit evita que estos archivos se eliminen en nombre del usuario linda, ya que usted no es el propietario de estos archivos. Tenga en cuenta que si el usuario linda es el propietario del directorio /data/sales, ¡puede eliminar estos archivos de todos modos!

Gestión de ACL (setfacl, getfacl) en Linux

Aunque los permisos extendidos discutidos anteriormente agregan una funcionalidad útil a la forma en que Linux maneja los permisos, no le permite otorgar permisos a más de un usuario o grupo en el mismo archivo.

Las listas de control de acceso ofrecen esta característica. Además, permiten a los administradores establecer permisos predeterminados de forma compleja, donde los permisos establecidos pueden variar de un directorio a otro.

Comprender las ACL

Aunque el subsistema ACL agrega una gran funcionalidad a su servidor, tiene una desventaja: no todas las utilidades lo admiten. Por lo tanto, puede perder su configuración de ACL cuando copia o mueve archivos, y su software de copia de seguridad puede fallar al realizar una copia de seguridad de su configuración de ACL.

La utilidad tar no admite ACL. Para asegurarse de que la configuración de ACL no se pierda cuando crea una copia de seguridad, utilice estrella en lugar de alquitrán. estrella funciona con las mismas opciones que tar; simplemente agrega soporte para la configuración de ACL.

También puede hacer una copia de seguridad de las ACL con obtenerfacl, que se puede restaurar con el comando setfacl. Para crear una copia de seguridad, utilice getfacl -R /directorio > archivo.acls. Para restaurar la configuración desde un archivo de copia de seguridad, utilice setfacl --restore=archivo.acl.

La falta de soporte de algunas herramientas no debería ser un problema. A menudo, las ACL se aplican a los directorios como una medida estructural en lugar de a los archivos individuales.
Por lo tanto, no habrá muchos de ellos, sino solo unos pocos, aplicados en lugares inteligentes en el sistema de archivos. Por lo tanto, restaurar las ACL originales con las que trabajó es relativamente fácil, incluso si su software de copia de seguridad no las admite.

Preparación del sistema de archivos para las ACL

Antes de comenzar a trabajar con ACL, es posible que deba preparar su sistema de archivos para admitir ACL. Debido a que los metadatos del sistema de archivos deben ampliarse, no siempre hay soporte predeterminado para las ACL en el sistema de archivos. Si recibe un mensaje de "operación no admitida" al configurar ACL para un sistema de archivos, es posible que su sistema de archivos no admita ACL.

Para solucionar esto, debe agregar la opción montura acl en /etc/fstab para que el sistema de archivos se monte con compatibilidad con ACL de forma predeterminada.

Cambiar y ver la configuración de ACL con setfacl y getfacl

Para establecer una ACL necesita el comando setfacl. Para ver la configuración actual de ACL, necesita obtenerfacl. Equipo ls -l no muestra ninguna ACL existente; solo muestra un + después de la lista de permisos, lo que indica que las ACL también se aplican al archivo.

Antes de configurar ACL, siempre es una buena idea mostrar la configuración actual de ACL con obtenerfacl. En el siguiente ejemplo, puede ver los permisos actuales, como se muestra con ls -l, y también como se muestra con obtenerfacl. Si observa lo suficientemente de cerca, verá que la información que se muestra es exactamente la misma.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Como resultado de ejecutar el comando obtenerfacl a continuación puede ver que los permisos se muestran para tres objetos diferentes: usuario, grupo y otros. Ahora agreguemos una ACL para otorgar permisos de lectura y ejecución también al grupo de ventas. comando para esto setfacl -mg:ventas:rx /dir. en este equipo -m indica que es necesario cambiar la configuración actual de ACL. Después g:ventas:rx le dice al comando que configure la ACL de lectura-ejecución (rx) para el grupo (g) ventas. A continuación, puede ver cómo se ve el comando, así como la salida del comando getfacl después de cambiar la configuración actual de ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Ahora que sabe cómo configurar una ACL de grupo, es fácil entender las ACL para usuarios y otros usuarios. Por ejemplo, el comando setfacl -mu:linda:rwx /datos otorga permisos al usuario linda en el directorio /data sin convertirlo en propietario ni cambiar la asignación del propietario actual.

Equipo setfacl tiene muchas características y opciones. Una opción es especialmente importante, el parámetro -R. Si se usa, la opción establece la ACL para todos los archivos y subdirectorios que existen actualmente en el directorio donde configuró la ACL. Se recomienda que siempre use esta opción cuando cambie las ACL para los directorios existentes.

Trabajar con ACL predeterminadas

Uno de los beneficios de usar ACL es que puede otorgar permisos a múltiples usuarios o grupos en un directorio. Otro beneficio es que puede habilitar la herencia trabajando con las ACL predeterminadas.

Al establecer la ACL predeterminada, determina los permisos que se establecerán para todos los elementos nuevos creados en el directorio. Tenga en cuenta que la ACL predeterminada no cambia los permisos en los archivos y subdirectorios existentes. ¡Para cambiarlos, también debe agregar una ACL normal!

Esto es importante saberlo. Si desea utilizar una ACL para configurar varios usuarios o grupos para acceder al mismo directorio, debe configurar la ACL dos veces. Primer uso setfacl-R-mpara cambiar la ACL de los archivos actuales. Entonces usa setfacl-md:para cuidar todos los elementos nuevos que también se crearán.

Para establecer la ACL predeterminada, solo necesita agregar la opción d después de la opción -m (¡el orden importa!). Así que usa setfacl -md:g:ventas:rx /datossi desea que Group Sales lea y ejecute lo que se haya creado en el directorio /data.

Al usar ACL predeterminadas, también puede ser útil establecer ACL para otros. Por lo general, esto no tiene mucho sentido porque también puede cambiar los permisos para otros usando chmod. Sin embargo, lo que no puedes hacer con chmod, es especificar los derechos que se deben otorgar a otros usuarios para cada nuevo archivo que se cree. Si desea evitar que otros obtengan permisos sobre cualquier cosa creada en /data, por ejemplo, use setfacl -md:o::- /datos.

Las ACL y los permisos normales no siempre están bien integrados. Pueden surgir problemas si aplica una ACL predeterminada a un directorio, luego se agregan elementos a ese directorio y luego intenta cambiar los permisos normales. Los cambios que se aplican a los permisos normales no se reflejarán bien en la descripción general de ACL. Para evitar problemas, configure primero los permisos normales, luego configure las ACL predeterminadas (e intente no volver a cambiarlas después de eso).

Ejemplo de administración de derechos elevados mediante ACL

En este ejemplo, continuará con los directorios /data/account y /data/sales que creó anteriormente. En los ejemplos anteriores, se aseguró de que el grupo de ventas tenga permisos en /datos/ventas y el grupo de cuentas tenga permisos en /datos/cuenta.

Primero, asegúrese de que el grupo de cuentas obtenga permisos de lectura en el directorio /data/sales y que el grupo de ventas obtenga permisos de lectura en el directorio /data/account.

A continuación, configura las ACL predeterminadas para asegurarse de que todos los archivos nuevos tengan los permisos correctos establecidos para todos los elementos nuevos.

  1. Abre una terminal.
  2. Ejecutar setfacl -mg:cuenta:rx /datos/ventas и setfacl -mg:ventas:rx /datos/cuenta.
  3. Ejecutar obtenerfaclpara asegurarse de que los permisos se configuraron de la manera que deseaba.
  4. Ejecutar setfacl -md:g:cuenta:rwx,g:ventas:rx /datos/ventaspara establecer la ACL predeterminada para el directorio de ventas.
  5. Agregue una ACL predeterminada para el directorio /data/account usando setfacl -md:g:ventas:rwx,g:cuenta:rx /datos/cuenta.
  6. Verifique que la configuración de ACL esté vigente agregando un nuevo archivo a /data/sales. Completo toque /datos/ventas/nuevoarchivo y hacer getfacl /datos/ventas/nuevoarchivo para comprobar los permisos actuales.

Configuración de permisos predeterminados con umask

Anteriormente, aprendió a trabajar con ACL predeterminadas. Si no está utilizando una ACL, hay una opción de shell que determina los permisos predeterminados que obtendrá: umask (máscara inversa). En esta sección, aprenderá cómo cambiar los permisos predeterminados con umask.

Es posible que haya notado que cuando crea un nuevo archivo, se establecen algunos permisos predeterminados. Estos permisos están determinados por la configuración umask. Esta configuración de shell se aplica a todos los usuarios al iniciar sesión. en parámetro umask se utiliza un valor numérico, que se resta de los permisos máximos que se pueden configurar automáticamente para el archivo; la configuración máxima para archivos es 666 y para directorios es 777.

Sin embargo, se aplican algunas excepciones a esta regla. Puede encontrar una descripción completa de la configuración umask en la tabla a continuación.

De los números usados ​​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 predeterminados establecidos para otros. Significado umask el valor predeterminado 022 da 644 para todos los archivos nuevos y 755 para todos los directorios nuevos creados en su servidor.

Resumen completo de todos los valores numéricos umask y sus resultados en la siguiente tabla.

Permisos en Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Una manera fácil de ver cómo funciona la configuración de umask es la siguiente: comience con los permisos predeterminados del archivo establecidos en 666 y reste el umask para obtener los permisos efectivos. Haga lo mismo para el directorio y sus permisos predeterminados de 777.

Hay dos formas de cambiar la configuración de umask: para todos los usuarios y para usuarios individuales. Si desea configurar umask para todos los usuarios, debe asegurarse de que la configuración de umask se tenga en cuenta al iniciar los archivos de entorno de shell, como se especifica 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 desea usar en ese script de shell. Si se cambia el umask en este archivo, se aplica a todos los usuarios después de iniciar sesión en el servidor.

Una alternativa a la configuración de 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 de inicio de cada usuario.

La configuración aplicada en este archivo se aplica solo al usuario individual; por lo tanto, este es un buen método si necesita más detalles. Personalmente, me gusta esta función para cambiar el umask predeterminado para el usuario raíz a 027 mientras los usuarios normales se ejecutan con el umask predeterminado de 022.

Trabajar con atributos de usuario ampliados

Esta es la sección final sobre los permisos de Linux.

Cuando se trabaja con permisos, siempre existe una relación entre un objeto de usuario o de grupo y los permisos que tienen los objetos de usuario o de grupo en un archivo o directorio. Un método alternativo para proteger archivos en un servidor Linux es trabajar con atributos.
Los atributos hacen su trabajo independientemente del usuario que acceda al archivo.

Al igual que con las ACL, es posible que los atributos de archivo deban incluir la opción montar.

esta es una opcion usuario_xattr. Si recibe un mensaje de "operación no admitida" cuando trabaja con atributos de usuario extendidos, asegúrese de establecer el parámetro montar en /etc/fstab.

Muchos atributos están documentados. Algunos atributos están disponibles pero aún no están implementados. No los use; no te traerán nada.

A continuación se muestran los atributos más útiles que puede aplicar:

A Este atributo garantiza que el tiempo de acceso al archivo del archivo no cambie.
Por lo general, cada vez que se abre un archivo, el tiempo de acceso del archivo debe registrarse en los metadatos del archivo. Esto impacta negativamente en el rendimiento; por lo que para los archivos a los que se accede regularmente, el atributo A se puede utilizar para desactivar esta función.

a Este atributo le permite agregar pero no eliminar un archivo.

c Si está utilizando un sistema de archivos que admite la compresión a nivel de volumen, este atributo de archivo garantiza que el archivo se comprima la primera vez que se activa el mecanismo de compresión.

D Este atributo garantiza que los cambios en los archivos se escriban en el disco inmediatamente en lugar de almacenarse primero en caché. Este es un atributo útil en archivos de base de datos importantes para asegurarse de que no se pierdan entre la caché de archivos y el disco duro.

d Este atributo garantiza que el archivo no se guardará en las copias de seguridad donde se utiliza la utilidad de volcado.

I Este atributo habilita la indexación del 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 la base de datos B-tree para un 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 cual es útil para archivos que necesitan protección adicional.

j Este atributo garantiza que, en un sistema de archivos ext3, el archivo se escriba primero en el diario y luego en los bloques de datos del disco duro.

s Sobrescriba los bloques en los que se guardó el archivo a 0 después de eliminar el archivo. Esto garantiza que un archivo no se pueda restaurar una vez que se haya eliminado.

u Este atributo almacena información sobre la eliminación. Esto le permite desarrollar una utilidad que trabaje con esta información para rescatar archivos eliminados.

Si desea aplicar los atributos, puede utilizar el comando charlar. Por ejemplo, use chattr +s algún archivopara aplicar atributos a algún archivo. ¿Necesita eliminar un atributo? Entonces usa chattr -s algún archivoy será eliminado. Para obtener una descripción general de todos los atributos que se aplican actualmente, use el comando lsattr.

Resumen

En este artículo, aprendió a trabajar con permisos. Leíste sobre los tres permisos básicos, los permisos avanzados y cómo aplicar ACL en un sistema de archivos. También aprendió a usar la opción umask para aplicar permisos predeterminados. Al final de este artículo, aprendió a usar atributos extendidos por el usuario para aplicar una capa adicional de seguridad del sistema de archivos.

Si te gustó esta traducción, escríbela en los comentarios. Habrá más motivación para hacer traducciones útiles.

Se corrigieron algunos errores tipográficos y gramaticales en el artículo. Redujo algunos párrafos voluminosos a otros más pequeños para una mejor legibilidad.

En lugar de "Solo alguien con derechos administrativos en el directorio puede aplicar el permiso de ejecución". se corrigió a "Solo alguien con permisos de escritura en el directorio puede aplicar el permiso de ejecución", lo que sería más correcto.

Gracias por los comentarios boina.

Reemplazado:
Si no es el propietario del usuario, el shell verificará si es miembro de un grupo, también conocido como el grupo del archivo.

En:
Si no es el propietario del archivo, el shell verificará si es miembro de un grupo que tiene permisos en el archivo. Si es miembro de este grupo, accederá al archivo con los permisos que el grupo ha establecido y el shell dejará de verificar.

gracias por tu comentario criptopirata

Fuente: habr.com

Añadir un comentario