Dar permisos de grupo a los archivos de otros usuarios

Dar permisos de grupo a los archivos de otros usuarios

Estoy usando Debian 7 y he creado un nuevo usuario (sitio web) con un directorio htdocs como este:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Ahora me gustaría que los usuarios de otro grupo (desarrolladores) tuvieran acceso al directorio del usuario. Yo he tratado:

$ sudo chown -R :developers /home/website

Puedo ver que el grupo está asignado (con ls -lao stat) y que los usuarios están en el grupo, pero no tienen acceso ¿verdad?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Yo también quiero:

  • Permitir que otro grupo, los 'contratistas', accedan a los archivos del sitio web

  • Restringir el acceso de los usuarios del sitio web únicamente a sus directorios personales

  • Asegúrese de que los nuevos archivos del sitio web hereden estos permisos

¿Tiene que usar listas de control de acceso o hay una mejor manera de hacerlo (como no usar un usuario separado para cada sitio)?

Respuesta1

Es difícil dar comandos precisos sin conocer el sistema operativo o la distribución; ¡y si! ACL funcionaría, pero también existe una forma estándar.

Hay addusery useradduno de ellos en su distribución puede crear el directorio de inicio del usuario automáticamente. Si es así, entonces el contenido del /etc/skel/directorio se copiará en el directorio de inicio del usuario, se establecerán los permisos y tal vez se puedan llevar a cabo algunas otras acciones apropiadas.

Es posible que existan grupos predefinidos para compartir, como "personal"; pero, si queremos crear nuestro propio grupo para compartir, no tiene nada de malo. Entonces, cree un grupo nuevo o use un grupo existente. Asegúrate de que los usuarios que van a ser miembros del grupo hayan sido definidos como tales con usermod, moduser, o vigrquizás, según el sistema operativo. Cada usuario que haya iniciado sesión actualmente debe cerrar sesión y volver a iniciarla para convertirse en miembro de un nuevo grupo.

Cree un directorio común para todos los usuarios, como /home/share_directory/cualquier otro directorio que tenga más sentido para su situación. Una mejor práctica relevante es no utilizar un directoriodentrodirectorio de inicio de cualquier usuario. Si nadie, excepto el propietario y el grupo, debería poder ver los archivos en el directorio, cambie los permisos del directorio a 0770. Si "otros" aceptan la lectura, utilice 0775. Es casi seguro que el propietario del directorio debería ser root.

chown root:group_name /home/share_directory/

A continuación, cambie el bit setuid.

chmod +s /home/share_directory/

Si ningún usuario debería poder modificar el archivo de otro usuario, configure también el bit de palanca.

chmod +t /home/share_directory/

Estos ejemplos configuran los bits setuid y sticky al mismo tiempo usandonotación octal.

chmod 5775 /home/share_directory/

o

chmod 5770 /home/share_directory/

Para la pregunta actualizada, parece que ACL es la herramienta adecuada. La mayoría de las distribuciones de Linux ahora incluyen la aclopción en la defaultsopción. Si su distribución no incluye la aclopción de forma predeterminada, entonces se necesita un poco de trabajo para comenzar a usarla. Primero monte los sistemas de archivos con la aclopción en /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Si es necesario, vuelva a montar el sistema de archivos: sudo mount -o remount,acl /. Luego cree un grupo al que pueda pertenecer un usuario para este fin. Es posible que también necesite instalar las herramientas ACL: apt-get install acl.

sudo groupadd developers
sudo usermod -a -G developers $username

(O el grupo podría ser "contratistas"). Un usuario que haya iniciado sesión actualmente debe cerrar sesión y volver a iniciarla para convertirse en miembro del nuevo grupo. Por supuesto, no hagas esto si tienes contenido en el directorio /var/www que deseas conservar, pero solo para ilustrar cómo configurarlo para comenzar:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Arriba, la diferencia entre los setfaclcomandos es la siguiente: la primera instancia usa el grupo predeterminado (propietario del grupo del directorio) mientras que la segunda especifica un grupo explícitamente. El -dmodificador establece la máscara predeterminada ( -m) para todos los objetos nuevos del sistema de archivos dentro del directorio. Sin embargo, también necesitamos ejecutar el comando nuevamente sin el -dmodificador para aplicar la ACL al directorio mismo. Luego reemplace las referencias a "/var/www" con "/var/www/public" en un archivo de configuración y vuelva a cargar.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Si quisiéramos restringir la eliminación y el cambio de nombre de todos excepto del usuario que creó el archivo: sudo chmod +t /var/www/public. De esta manera, si queremos crear directorios para marcos que existen fuera de la raíz del documento de Apache o tal vez crear directorios en los que se pueda escribir en el servidor, sigue siendo fácil.

Directorio de registros grabables en Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Directorio de biblioteca legible por Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Un poco de "juego" en un directorio que no importa debería ayudar a que esto sea perfecto para su situación.

En cuanto a las restricciones, utilizo dos enfoques diferentes: el shell, rssh, se creó para proporcionar acceso SCP/SFTP pero no acceso SSH; o, para restringir el uso a un directorio de inicio, puede usar el subsistema interno-sftp, configurado en /etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Cree un grupo llamado, por ejemplo, sftonly. Haga que los usuarios sean miembros del grupo sftonly. Cambie sus directorios de inicio /debido al chroot. El directorio, /home/nombredeusuario, debe ser propiedad de root. También puede configurar el shell del usuario en /bin/false para evitar el acceso SSH. Lo que más me preocupa es el acceso interactivo, así que, en general, sigo el rsshcamino. (No pueden escribir en ningún lugar excepto donde yo haya definido la capacidad de escritura).

información relacionada