Permitir que un usuario lea los directorios de inicio de otros usuarios

10

Soy nuevo en la administración del sistema y tengo una consulta relacionada con los permisos. Tengo un grupo llamado administration. Dentro del administrationgrupo, tengo los usuarios user1, user2, user3, superuser. Todos los usuarios están en el administrationgrupo. Ahora, necesito dar permisos al usuario superuserpara poder ver el /homedirectorio de los otros usuarios. Sin embargo, no quiero user1, user2, user3para ver el hogar de cualquier otro usuario que no sea él mismo. (Es decir, user1debería poder ver solo user1el hogar, etc.).

Creé los usuarios y grupos y asigné todos los usuarios al grupo. ¿Cómo debo especificar los permisos por superuserahora?

En otras palabras, estoy pensando en tener dos grupos (digamos NormalUsersy Superuser). El NormalUsersgrupo tendrá los usuarios user1, user2y user3. El Superusergrupo solo tendrá el usuario Superuser. Ahora, necesito Superusertener acceso completo a los archivos de los usuarios del grupo NormalUsers. ¿Es esto posible en Linux?

Ramesh
fuente
¿Cómo es esto diferente de su pregunta anterior ?
Gilles 'SO- deja de ser malvado'
En mi pregunta anterior, estaba más preocupado por editar el archivo / etc / sudoers y hacer que el usuario fuera un administrador parcial. Aquí, estoy tratando de modificar los permisos de un usuario local. Sí, es similar a lo que estoy tratando de lograr, pero estoy tratando de abordar un método diferente aquí.
Ramesh

Respuestas:

10

Si los usuarios cooperan, puede usar las listas de control de acceso (ACL). Establezca una ACL en el directorio de inicio de user1(y amigos) que otorgue acceso de lectura superuser. Establezca también la ACL predeterminada, para los archivos recién creados, y también la ACL en los archivos existentes.

setfacl -R -m user:superuser:rx ~user1
setfacl -d -R -m user:superuser:rx ~user1

user1 puede cambiar la ACL en sus archivos si lo desea.

Si siempre desea dar superuseracceso de lectura a user1los archivos de, puede crear otra vista de los directorios de inicio de los usuarios con diferentes permisos, con bindfs .

mkdir -p ~superuser/spyglass/user1
chown superuser ~superuser/spyglass
chmod 700 ~superuser/spyglass
bindfs -p a+rX-w ~user1 ~superuser/spyglass/user1

Los archivos a los que se accede a través de ~ superuser / spyglass / user1 son legibles en todo el mundo. Aparte de los permisos, ~superuser/spyglass/user1es una vista del user1directorio de inicio de. Dado que superuseres el único usuario que puede acceder ~superuser/spyglass, solo superuserpuede beneficiarse de esto.

Gilles 'SO- deja de ser malvado'
fuente
En mi sistema, los permisos y el nombre de usuario se intercambian: setfacl -R -m user:superuser:rx ~user1.
Aurélien Ooms
10

Puede usar ACL para otorgar acceso a un directorio particular a un grupo arbitrario.

Por ejemplo, si ejecutó setfacl -m g:dba:rwx /home/foo, los miembros del grupo dba tendrían permisos rwx, independientemente de qué grupo posea el directorio.

Probablemente también desee establecer la ACL "predeterminada" (la ACL para los objetos recién creados dentro del directorio) para incluir también este permiso.

derobert
fuente
sí, exactamente ... También descubrí lo mismo, pero aún no estoy seguro de si es una buena idea otorgar ACL en el servidor para los usuarios de LDAP.
Ramesh
@Ramesh Bueno, si son usuarios en el sistema (porque estás usando nss-ldap, sssd, etc.), entonces no estoy seguro de por qué no estaría bien.
derobert
Estaba tratando de replicar esto en el banco de pruebas. Cuando estoy iniciando sesión como usuario (por ejemplo, foo), veo un mensaje de advertencia como "los permisos deben establecerse en 644". Creo que la advertencia puede ser ignorada. Pero no quiero que los usuarios de laboratorio sepan que sus cuentas de usuario se han visto comprometidas. Cuando cambio el rwx a solo r en el comando setfacl, no puedo ver el directorio de foo.
Ramesh
2
@Ramesh Necesita + x para ir a través de los directorios. No estoy seguro de lo que le dice que un directorio debe ser 644, eso es una tontería, debería ser 755 o similar. Pero de cualquier manera, el usuario verá un + en el campo de permiso de ls y puede ejecutar getfacl para verlo, no es secreto.
derobert
Bien, recibí el mensaje de advertencia, el directorio $ HOME del usuario debe ser propiedad del usuario y no debe ser escrito por otros usuarios. Eliminé el permiso de escritura en el comando setacl y ahora no veo el mensaje de advertencia.
Ramesh
0

Desafortunadamente, no hay realmente ninguna forma de hacer esto directamente en Linux vainilla.

Es posible que pueda crear un nuevo grupo en sudoers para los administradores parciales con una lista blanca de comandos aceptables que desea permitirles ejecutar.

Sin embargo, para lograr exactamente lo que está pidiendo, tendría que usar Apparmor o SELinux para lograr lo que desea. Desafortunadamente, ninguna de estas herramientas es fácil de configurar y usar, y los ejemplos están muy lejos del alcance de una respuesta rápida aquí.

suizo
fuente
1
Linux ha soportado ACL por un tiempo ahora. Las ACL te permiten hacer esto.
derobert
Sí, acabo de encontrar esa solución y actualicé la respuesta. Sin embargo, todavía no sé si se puede usar en el servidor y eso también para los usuarios de LDAP.
Ramesh
@derobert Por lo que entiendo, es imposible otorgarle a alguien permisos de nivel raíz a través de sudo mientras usa simultáneamente ACL para limitar el acceso. Tienes que usar SELinux u otro MAC para lograrlo.
Suizo
1
Creo que cuando OP dice que el usuario es "superusuario", lo dice literalmente, no root.
derobert