Linux NFS crea máscara y fuerza equivalente de usuario

11

Tengo dos servidores Linux:

servidor de archivos
Debian 5.0.3 (2.6.26-2-686)
Samba versión 3.4.2

apache
Ubuntu 10.04 LTS (2.6.32-23-generic)
Apache 2.2.14

Tengo varios recursos compartidos de Samba en el servidor de archivos para poder acceder a los archivos de las PC con Windows. También estoy exportando /data/www-dataal servidor apache , donde lo tengo montado como /var/www.

La configuración está bien, excepto cuando vengo a crear archivos en el soporte NFS. Termino con archivos que Apache no puede leer, o que otros usuarios de mi sistema no pueden modificar.

Con Samba, puedo especificar force user, force group, create masky directory mask, y esto asegura que todos los archivos se crean con permisos adecuados para mi servidor web Apache. No puedo encontrar una manera de hacer esto con NFS. ¿Hay alguna manera de forzar los permisos y la propiedad con NFS? ¿Me estoy perdiendo algo obvio?

Aunque he pasado bastante tiempo con Linux, y me estoy desconectando de Windows, todavía no he podido controlar los permisos de Linux ... Si esta no es la forma correcta de hacer las cosas, estoy abierto a sugerencias alternativas

Miguel
fuente

Respuestas:

12

Dado que viene de Windows, encontrará que NFS es ... diferente.

El problema con el que te encuentras es bastante común. NFS está pasando el UID y el GID de los archivos / directorios de un lado a otro entre las máquinas con el supuesto de que las ID de usuario y grupo se asignan de forma idéntica en ambos . Esto significa que puede obtener una situación en la que el UID / GID en el servidor se devuelve a un cliente NFS, pero no puede coincidir con el cliente /etc/passwdo /etc/group, lo que significa que no hay acceso.

En el pasado (distante) esto se coordenó con NIS y NIS +, aunque hay otros esquemas que se han incluido en este marco (el Winbind de Samba es uno de ellos). Sin embargo, esto requiere un servidor de identificación central, seguido de muchos permisos de reparación manual.

Hay diferentes formas de solucionar esto, pero la más barata / más rápida es crear un grupo con el mismo número de ID de grupo en ambas máquinas, por ejemplo, ID de grupo 50000, y establecer los bits de grupo en el servidor de archivos mientras agrega el usuario apropiado al grupo en el cliente; luego use los permisos de grupo en los archivos para controlar el acceso. No es una gran solución, pero funcionará. Tenga en cuenta que podría tener problemas con los servicios que cambian explícitamente su grupo en tiempo de ejecución (también conocido como caída de privilegios) y es posible que deba cambiar la configuración que controla qué grupo se supone en tiempo de ejecución para asegurarse de que sea el que ha creado.

Para aquellos archivos que ingresan a través de un recurso compartido de Windows (también conocido como Samba), simplemente fuerce al grupo a ser el mismo que creó. De esa forma, todos los archivos obtienen automáticamente el GID "correcto".

Avery Payne
fuente
Gracias por la respuesta considerada. Examinaré el método de bits grupales y les haré saber cómo me llevo.
Mike
Creé un www-datagrupo en el servidor de archivos, asigné los usuarios necesarios, luego configuré el mismo www-dataID de grupo en ambos servidores. También configuré los bits de grupo en la /data/www-datacarpeta con chmod -R g+s /var/www-data. Ahora está funcionando perfectamente. Gracias por tu ayuda.
Mike
¡Alegra oírlo!
Avery Payne
Sería bueno si NFS pudiera hacer esto para clientes Mac.
d -_- b
9

También puede usar la all_squashopción que hace anónimos (usuario y grupo) todos los archivos y carpetas exportados, y adjuntarlos a un GID y UID específico.

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)

El problema con eso es que todos los usuarios en el apacheservidor verán su punto de montaje nobody nobodycomo usuario y grupo, y podrían escribir en el montaje (pero de todos modos, en el servidor Samba, los archivos se crearán como <your UID>/ <your GID>).

Anthony O.
fuente
¡Eso resolvió mi problema!
Luciano Andress Martini