GNU/Linux >> Tutoriales Linux >  >> Linux

Crear y configurar directorios setgid para colaboración:preparación de objetivos de RHCSA

Los permisos y derechos del sistema de archivos GNU/Linux son la base de la seguridad del sistema, y ​​uno de sus principios es la separación clara de los derechos de archivos y carpetas. En un entorno muy multiusuario, como el servidor de una escuela, los derechos de archivo evitan que un usuario elimine o sobrescriba accidentalmente los documentos de otro. Sin embargo, hay casos de uso en los que varios usuarios necesitan acceder (leer, escribir e incluso eliminar) los archivos de otros usuarios; tal puede ser el caso del servidor escolar mencionado anteriormente, donde los estudiantes trabajan en el mismo proyecto. En esta sección de preparación para el examen RHCSA, aprenderemos cómo crear un entorno para dicha colaboración, utilizando la técnica setgid (set groupID). Tenga en cuenta que si bien realizamos estos pasos en un sistema operativo reciente, el setgid no es algo nuevo y lo encontrará en todas y cada una de las distribuciones.

En este tutorial aprenderás:

  • Cómo agregar usuarios a un grupo complementario
  • Cómo usar set-GID en un directorio
  • Cómo verificar la propiedad adecuada dentro del directorio set-GID
  • Cómo usar el directorio especial como miembro del grupo

Habilitación de la colaboración con el directorio setgid.

Requisitos de software y convenciones utilizadas

El caso de uso

Para demostrar el uso de setgid, tenemos un servidor virtual y en él necesitamos crear un grupo de usuarios, agregar miembros y configurar un directorio al que ambos tengan acceso. Hasta ahora, esto es solo una
cuestión de configuración de permisos. El truco será agregar el setgid al directorio, por lo que los archivos creados dentro del directorio tendrán el grupo propietario del directorio principal. Dado que el grupo tendrá permisos de lectura y escritura dentro del directorio, cualquier miembro del grupo puede leer y escribir los archivos, sin necesidad de que el usuario original establezca explícitamente la pertenencia al grupo.

Configuración básica

Primero creamos los objetos necesarios. Vamos a crear el directorio del proyecto:

# mkdir -p /student_projects/rocket_science

Y nuestros dos usuarios, sarah y john , usando el comando useradd:

# useradd john
# useradd sarah

También necesitamos crear un grupo de usuarios que permita la colaboración entre sus miembros:

# groupadd rocketengineers

A continuación, establecemos este grupo como propietario del directorio del proyecto, recursivamente:

# chown -R :rocketengineers /student_projects/rocket_science

A continuación, agregamos a nuestros usuarios a los rocketengineers grupo:

# usermod -a -G rocketengineers john
# usermod -a -G rocketengineers sarah

Agregamos el grupo como grupo secundario. Para obtener más información sobre los grupos, consulte el tutorial de pertenencia a grupos.

Para finalizar la configuración básica, debemos agregar permiso completo al grupo en el directorio:

# chmod 770 /student_projects/rocket_science

Y con esto, nuestra configuración básica está completa. Ambos usuarios pueden escribir en el directorio, y los archivos creados serán propiedad del usuario, y el grupo propietario será el grupo principal del usuario. Podemos verificar los
permisos que configuramos con stat :

# stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 6         	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (0770/drwxrwx---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:29:57.500453785 +0200
Modify: 2020-10-04 18:29:47.650278956 +0200
Change: 2020-10-04 18:30:34.809115974 +0200
 Birth: -

Lo más probable es que los identificadores difieran. Podemos ver que el propietario del directorio es root , mientras que la propiedad del grupo pertenece a los rocketengineers grupo. Esto permite que ambos miembros
del grupo lean y escriban desde y hacia el directorio.

Colaboración sin setgid

Digamos que a los dos usuarios les gustaría compartir algunas notas con esta configuración. sarah obtuvo un archivo de texto con datos importantes en su directorio de inicio:

$ id
uid=1002(sarah) gid=1002(sarah) groups=1002(sarah),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ cat general_project.notes 
text

Para compartirlo con john , copia el archivo en el directorio compartido (por lo que todavía hay una copia de seguridad en su directorio de inicio, por si acaso):

$ cp general_project.notes /student_projects/rocket_science/

Al verificar las propiedades, podemos ver que el propietario es de hecho sarah , y el grupo propietario del archivo también es sarah , el grupo principal del usuario:

$ stat /student_projects/rocket_science/general_project.notes
  File: /student_projects/rocket_science/general_project.notes
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18019570    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1002/   sarah)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:31:30.229099624 +0200
Modify: 2020-10-04 18:31:30.229099624 +0200
Change: 2020-10-04 18:31:30.229099624 +0200
 Birth: -

Cambiemos a john . También tiene algunos hallazgos sobre el proyecto y le gustaría compartirlos.

$ id
uid=1001(john) gid=1001(john) groups=1001(john),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ echo "mytext" > rocket.txt
$ cp rocket.txt /student_projects/rocket_science/

Se aplican los mismos permisos, el archivo recién copiado será propiedad de john :

$ stat /student_projects/rocket_science/rocket.txt 
  File: /student_projects/rocket_science/rocket.txt
  Size: 7         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18356857    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    john)   Gid: ( 1001/    john)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:24.433075710 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:32:24.433075710 +0200
 Birth: -

Ya que ambos son miembros de los rocketengineers grupo, pueden leer el contenido del directorio, y dado que sus notas son legibles para todo el mundo, ambos pueden leer los archivos
del otro.

$ cat /student_projects/rocket_science/general_project.notes 
text

El problema surge cuando john me gustaría agregar algunas notas sobre sarah Archivo de datos importantes:

$ echo "some comments" >>  /student_projects/rocket_science/general_project.notes 
-bash: /student_projects/rocket_science/general_project.notes: Permission denied

En efecto, no pueden trabajar en los archivos de los demás, solo leerlos. Ahora sarah podría establecer la propiedad del grupo de su archivo en su grupo común, resolviendo así el problema. Pero, ¿por qué necesitaría
eso con cada archivo, si tenemos el setgid para ayudarnos?

Configuración de la bandera setgid

Para configurar el indicador setgid, usamos chmod :

# chmod g+s /student_projects/rocket_science

Observe el indicador "s" en los permisos de grupo (establecido en negrita para mayor claridad):

# stat /student_projects/rocket_science
  File: /student_projects/rocket_science
  Size: 53        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 17789698    Links: 2
Access: (2770/drwxrws---)  Uid: (    0/    root)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:32:29.389167450 +0200
Modify: 2020-10-04 18:32:24.433075710 +0200
Change: 2020-10-04 18:34:04.449927062 +0200
 Birth: -

Probar y verificar los resultados

Ahora sarah puede compartir sus nuevas notas de investigación:

$ cat findings.txt 
rocket needs wings
$ cp findings.txt /student_projects/rocket_science/
$ stat /student_projects/rocket_science/findings.txt 
  File: /student_projects/rocket_science/findings.txt
  Size: 19        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 18999000    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1002/   sarah)   Gid: ( 1003/rocketengineers)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-10-04 18:35:15.195236593 +0200
Modify: 2020-10-04 18:35:15.195236593 +0200
Change: 2020-10-04 18:35:15.195236593 +0200
 Birth: -

La propiedad del grupo se establece en el grupo del directorio principal debido al setgid en su lugar. Eso hará que john para poder comentar las nuevas notas de investigación:

$ echo "verified!" >> /student_projects/rocket_science/findings.txt
$ cat /student_projects/rocket_science/findings.txt 
rocket needs wings
verified!

Y con eso completamos nuestro objetivo de configurar un directorio de colaboración para un grupo de usuarios. Podríamos hacerlo para otros grupos con el método anterior, separando los datos de diferentes proyectos por
permisos, para que un miembro de un grupo no pueda eliminar accidentalmente los datos de otro proyecto.

# Título del video:Trabajar en un directorio setgid
# Descripción del video:Editar archivos de otros usuarios en un directorio setgid
# Nombre del archivo de video:rhcsa_setgid.webm

Trabajar en un directorio setgid:editar archivos de otros usuarios en un directorio setgid

Conclusión

Bajo los estrictos permisos y derechos de propiedad de GNU/Linux, setgid es una forma sencilla de permitir que los usuarios del sistema interactúen con los archivos de los demás de una manera segura, lo que permite el trabajo en grupo
sin el uso de una solución externa pesada o estropeando los grupos y permisos iniciales del usuario. En el ejemplo anterior, no necesitábamos tocar los directorios de inicio de los usuarios, o sus permisos de todo el sistema
, simplemente configuramos un lugar especial donde pueden compartir lo que necesitan.

Ejercicios

  1. Cree múltiples directorios de proyectos con diferentes grupos. Compruebe si los miembros de un proyecto pueden leer los archivos de otro proyecto.
  2. Cree un directorio entre proyectos, donde cualquier miembro del proyecto tenga acceso.
  3. Crear un proyecto cruzado solo lectura directorio, donde solo los miembros de un proyecto (gestión de proyectos) pueden escribir, pero los miembros de todos los proyectos pueden leer.

Linux
  1. Crear, eliminar y administrar directorios en Linux

  2. Cómo crear y eliminar un grupo de usuarios en Linux

  3. 5 ejemplos para crear múltiples directorios en Linux

  4. ¿Crear un archivo como un usuario y grupo diferente?

  5. Cree un archivo zip e ignore la estructura del directorio

Configurar sistemas para montar sistemas de archivos en el arranque mediante una identificación única universal (UUID) o una etiqueta:preparación de objetivos de RHCSA

Objetivos de estudio para el examen RHCSA y guía de preparación

Agregue nuevas particiones, volúmenes lógicos e intercambie a un sistema de forma no destructiva:preparación de objetivos de RHCSA

Cómo crear directorios en Linux (comando mkdir)

Crear directorio de inicio para usuarios existentes en Linux

Crear y configurar un usuario en MSSQL

    Requisitos de software y convenciones de la línea de comandos de Linux
    Categoría Requisitos, convenciones o versión de software utilizada
    Sistema Red Hat Enterprise Linux 8
    Software GNU Coreutils 8.30
    Otro Acceso privilegiado a su sistema Linux como root o a través de sudo comando.
    Convenciones # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando
    $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios