Problema muy extraño ...
Samba compartir en remoto:
[javaerpm]
path = /u/abas/erpm/java
force user = erpm
guest ok = yes
read only = no
writeable = yes
Montar comando en local usando root:
root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm
Root puede leer / escribir / cd sin ningún problema:
root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r-- 1 501 users 0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test
Pero si cambio a un usuario normal y hago lo mismo, obtengo esto:
shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied
Puedo ll
y puedo ver que de todos modos escribió el archivo:
shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r-- 1 501 users 0 Sep 24 09:55 test
Incluso rm
no puedo problema:
shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$
He probado diferentes opciones de montaje. uid=501
no cambia nada Intenté nounix
pero luego no funciona en absoluto y no veo nada con el usuario root o shawn.
Respuestas:
Nota: Solo estoy adivinando aquí, no soy un samba guru.
Samba / CIFS, al menos la forma en que lo está utilizando aquí, no reproduce credenciales entre el servidor y el cliente. Debido a la
force user
directiva en el servidor, todas las operaciones se realizan como el usuarioerpm
en el servidor. Sin embargo, debido a que tanto el cliente como el servidor ejecutan un sistema unix, negociaron automáticamente las extensiones POSIF CIFS . Esto hace que los permisos de Unix parezcan funcionar hasta cierto punto, pero solo en la medida en que el servidor lo permita, y se ha topado con un caso en el que lo que afirman los permisos de Unix y lo que permite el servidor difieren.Notarás que todos los archivos aparecen como ID de usuario 501. Ese es su uid en el servidor.
Cuando intenta crear o eliminar un archivo, esto requiere permiso de escritura en el directorio. Todos los accesos se asignan a un solo usuario en el servidor, por lo que el permiso de escritura se reduce a si
erpm
se permite escribir en ese directorio en el servidor. La respuesta es sí.Cuando ejecuta
touch
, crea el archivo y luego cambia su hora de modificación. Cambiar el tiempo de modificación de un archivo requiere propiedad, y esto se prueba mediante el código genérico del sistema de archivos, en el lado del cliente.Si ejecuta
strace touch test
, notará que laopen
llamada (que crea el archivo) tiene éxito, entonces lautimes
llamada (o más bien en Linux, lautimensat
llamada del sistema) no puede establecer los tiempos.Esto es realmente un poco extraño porque
utimes
debería tener éxito, ya que lotouch
llama con un argumento NULL (que significa "establecer la marca de tiempo a la hora actual"), y se supone que está permitido a cualquier persona que llame que pueda escribir en el archivo, y no solo al propietario le gusta establecer una marca de tiempo arbitraria. Sospecho que enutimensat
realidad está haciendo una verificación basada en permisos y determinando que los permisos dicen que no puede escribir en ese archivo, a pesar de que el sistema de archivos permitiría una operación de escritura independientemente de los permisos reales.La principal ventaja de las extensiones POSIX de CIFS cuando el lado del servidor se ejecuta con los permisos de un usuario no root es transferir el bit ejecutable y posiblemente la propiedad del grupo. Puede ser menos confuso si asigna la propiedad del usuario a un solo usuario del lado del cliente con la
forceuid
opción de montaje.fuente
username=guest,defaults,noperm
y eso solucionó totalmente el problema. No sé qué respuesta aceptar en este caso, ya queusername=guest,defaults,noperm
probablemente no sea la mejor respuesta y simplemente no tengo más tiempo para probar su respuesta. ¡Gracias de nuevo!