// Actualizado el 8 de febrero: cuestiones pendientes breves:
- ¿Cómo enmascarar directorios de manera diferente a los archivos?
- ¿Cómo enmascarar en Nautilus copiar / pegar?
- ¿Cómo configurar umask para SSHFS?
NUESTRA SITUACIÓN
Varias personas de nuestra empresa inician sesión en un servidor y cargan archivos. Todos deben poder cargar y sobrescribir los mismos archivos. Tienen diferentes nombres de usuario, pero todos forman parte del mismo grupo. Sin embargo, este es un servidor de Internet, por lo que los "otros" usuarios deberían tener (en general) solo acceso de solo lectura. Entonces, lo que quiero tener son estos permisos estándar:
archivos: 664
directorios: 771
Mi objetivo es que todos los usuarios no tengan que preocuparse por los permisos. El servidor debe configurarse de tal manera que estos permisos se apliquen a todos los archivos y directorios, recién creados, copiados o sobrescritos. Solo cuando necesitemos algunos permisos especiales lo modificaremos manualmente.
Subimos archivos al servidor mediante SFTP-ing en Nautilus, montando el servidor usando sshfs y accediendo a él en Nautilus como si fuera una carpeta local, y SCP-ing en la línea de comandos. Eso básicamente cubre nuestra situación y lo que pretendemos hacer.
Ahora, he leído muchas cosas sobre la hermosa funcionalidad de umask. Por lo que entiendo, umask (junto con PAM) debería permitirme hacer exactamente lo que quiero: establecer permisos estándar para nuevos archivos y directorios. Sin embargo, después de muchas horas de lectura y prueba y error, todavía no consigo que esto funcione. Obtengo muchos resultados inesperados. Realmente me gusta tener una sólida comprensión de umask y tengo muchas preguntas sin responder. Publicaré estas preguntas a continuación, junto con mis hallazgos y una explicación de mis ensayos que condujeron a estas preguntas. Dado que muchas cosas parecen salir mal, creo que estoy haciendo varias cosas mal. Por lo tanto, hay muchas preguntas.
NOTA: Estoy usando Ubuntu 9.10 y, por lo tanto , no puedo cambiar el sshd_config para configurar la umask para el servidor SFTP. SSH OpenSSH_5.1p1 instalado Debian-6ubuntu2 <requiere OpenSSH 5.4p1. Así que aquí van las preguntas.
1. ¿NECESITO REINICIAR PARA QUE LOS CAMBIOS DE PAM TENGAN EFECTO?
Comencemos con esto. Había tantos archivos involucrados y no pude averiguar qué afecta y qué no afecta las cosas, también porque no sabía si tenía que reiniciar todo el sistema para que los cambios de PAM surtan efecto. Lo hice después de no ver los resultados esperados, pero ¿es esto realmente necesario? ¿O simplemente puedo cerrar sesión en el servidor y volver a iniciar sesión, y las nuevas políticas PAM deberían ser efectivas? ¿O hay algún programa 'PAM' para recargar?
2. ¿HAY UN SOLO ARCHIVO PARA CAMBIAR QUE AFECTA A TODOS LOS USUARIOS PARA TODAS LAS SESIONES?
Así que terminé cambiando MUCHOS archivos, mientras leía MUCHAS cosas diferentes. Terminé configurando la umask en los siguientes archivos:
~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002
Quiero que este cambio se aplique a todos los usuarios, por lo que sería mejor algún tipo de cambio en todo el sistema. ¿Se puede lograr?
3. DESPUÉS DE TODO, ESTA COSA DE UMASK, ¿FUNCIONA?
Entonces, después de cambiar umask a 0002 en todos los lugares posibles, ejecuto pruebas.
------------ SCP -----------
PRUEBA 1:
scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile 100% 4 0.0KB/s 00:00
Verifiquemos los permisos:
user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)
ACTUALIZACIÓN: corregido SOLO configurando umask en pam.d / common-sessions (ver comentarios)
--------- SSH ------------
PRUEBA 2:
ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)
-------- SFTP -----------
Nautilus: sftp: // servidor / inicio /
Copie y pegue newfile de cliente a servidor (777 en el cliente)
PRUEBA 3:
user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)
Crea un nuevo archivo a través de Nautilus. Verifique los permisos de archivo en la terminal:
PRUEBA 4:
user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders 0 2011-02-05 18:06 newfile (600)
Quiero decir ... ¡¿QUÉ acaba de pasar aquí ?! Nos deberíamos obtener 644 cada vez. En cambio, obtengo 711, 777, 600 y luego una vez 644. Y el 644 solo se logra al crear un nuevo archivo en blanco a través de SSH, que es el escenario menos probable.
Entonces, estoy preguntando, ¿umask / pam funciona después de todo?
ACTUALIZACIÓN: prueba fija 4 al SOLO configurar umask en pam.d / common-sessions (ver comentarios)
4. ¿Y QUÉ SIGNIFICA UMASK SSHFS?
A veces montamos un servidor localmente, usando sshfs. Muy útil. Pero nuevamente, tenemos problemas de permisos.
Así es como montamos:
sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt
NOTA: usamos umask = 113 porque aparentemente, sshfs comienza desde 777 en lugar de 666, por lo que con 113 obtenemos 664, que es el permiso de archivo deseado.
Pero lo que sucede ahora es que vemos todos los archivos y directorios como si fueran 664. Navegamos en Nautilus hasta / mnt y:
- Haga clic derecho -> Nuevo archivo (archivo nuevo) --- PRUEBA 5
- Haga clic derecho -> Nueva carpeta (nueva carpeta) --- PRUEBA 6
- Copie y pegue un archivo 777 de nuestro cliente local --- PRUEBA 7
Así que veamos en la línea de comando:
user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007 3 Feb 5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007 0 Feb 5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb 5 18:15 newfolder (664)
Pero bueno, revisemos esta misma carpeta en el lado del servidor:
user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders 0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)
¡¿Qué?! Los permisos de archivo REAL son muy diferentes de lo que vemos en Nautilus. Entonces, ¿esta umask en sshfs solo crea un 'filtro' que muestra permisos de archivos irreales? Y traté de abrir un archivo de otro usuario pero del mismo grupo que tenía 600 permisos reales pero 644 permisos 'falsos', y todavía no podía leer esto, entonces, ¿de qué sirve este filtro?
5. UMASK ES TODO SOBRE ARCHIVOS. ¿Pero qué hay de los directorios?
De mis pruebas puedo ver que la umask que se está aplicando también influye de alguna manera en los permisos del directorio. Sin embargo, quiero que mis archivos sean 664 (002) y mis directorios sean 771 (006). Entonces, ¿es posible tener una umask diferente para los directorios?
6. Quizás UMASK / PAM ES REALMENTE FRESCO, ¿PERO UBUNTU ES SOLO BUGGY?
Por un lado, he leído temas de personas que han tenido éxito con PAM / UMASK y Ubuntu. Por otro lado, he encontrado muchos errores más antiguos y más nuevos con respecto a umask / PAM / fuse en Ubuntu:
- https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/241198
- https://bugs.launchpad.net/ubuntu/+source/fuse/+bug/239792
- https://bugs.launchpad.net/ubuntu/+source/pam/+bug/253096
- https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/549172
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=314796
Entonces ya no sé qué creer. ¿Debería rendirme? ¿ ACL resolvería todos mis problemas? ¿O tengo problemas nuevamente con Ubuntu?
Una palabra de precaución con las copias de seguridad con tar. Las distribuciones de Red Hat / Centos admiten acls en el programa tar, pero Ubuntu no admite acls al realizar una copia de seguridad. Esto significa que todas las acls se perderán cuando cree una copia de seguridad.
Estoy muy dispuesto a actualizar a Ubuntu 10.04 si eso también soluciona mis problemas, pero primero quiero entender lo que está sucediendo.