Samba: cree acciones de subdirectorio con sus propios permisos

9

Tengo un recurso compartido de Samba que contiene muchas carpetas como esta:

share
  - folderA
  - folderB
  - folderC
  - folderD

Hay alrededor de 20 usuarios accediendo a esos recursos compartidos. Cada usuario puede tener acceso individual a algunos de los directorios, por ejemplo, Ben puede acceder a la carpeta A y la carpeta C, pero no a la carpeta B y la carpeta D. Jenny puede acceder a la carpeta B y la carpeta C, y así sucesivamente.

No quiero que los usuarios monten cada carpeta que necesitan. Quiero que monten la carpeta "compartir" que contiene todas las subcarpetas. El acceso se limita al establecer los permisos de Linux.

Creé un grupo para cada subdirectorio y agregué los usuarios a esos grupos. El control de acceso funciona perfectamente para archivos existentes. Pero cada vez que un usuario crea un archivo en un subdirectorio, se le niega a cualquier otro usuario que tenga permiso para acceso de lectura / escritura en ese directorio. Para resolver esto, jugué con el enmascaramiento de samba, pero no puedo hacer que funcione.

Mi conf Samba se ve así:

guest ok = no

[global]
workgroup = WORKGROUP
security  = user
encrypt passwords = yes

[Share]
path        = /var/samba
valid users = @everybody
read only   = no
writeable   = yes

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderA

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderB

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderC

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderD

Obviamente, cada usuario está en el grupo todos, para que puedan montar el recurso compartido con los subdirectorios. El acceso para cada subdirectorio funciona perfectamente bien. Pero cada vez que Ben crea un archivo en la carpeta C, el archivo obtiene los permisos de archivo -rwxr - r-- pero debería ser -rwxrwx ---

Creo que los recursos compartidos para las carpetas individuales no funcionan en absoluto porque intenté configurar writeable = no y read only = yes para probarlo. Reinició smbd y nmbd y volvió a montar el recurso compartido de red (en Windows 10). Los usuarios pudieron crear archivos y modificar los suyos.

Esto se ejecuta en una frambuesa pi con raspbian. El disco duro con los archivos está formateado como ext4 y montado a través de fstab.

soner
fuente
Para forzar los derechos de acceso deseados a los archivos, use la force create mode = 770declaración en la folderCsección de su configuración.
Oleg Bolden
Gracias, eso en realidad no resolvió el problema, pero noté que tenía espacios en las rutas de mi smb.conf real: [folderA] ruta = / var / samba / alguna carpeta con espacios. Resolví esto encerrando la ruta con "(" / var / samba / alguna carpeta con espacios "). La configuración en el párrafo [carpetaA] solo se usa cuando el usuario monta [carpetaA] directamente, pero la configuración no se utiliza cuando se utilizan los soportes de usuario [acción] y navega en Foldera la configuración de [Compartir] para Foldera ¿Cómo puedo pasar por alto la configuración de [acción] para Foldera sin montar Foldera directamente, sino acceder a él desde [compartir]..?
Soner

Respuestas:

5

Pruebe esta configuración (para compartir secciones):

[Share]
path        = /var/samba
valid users = @everybody
force group = +everybody
writeable   = yes
create mask = 0660
force create mode = 0110
directory mask = 0770

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
force group = +users_folderA
browseable = no

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
force group = +users_folderB
browseable = no

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
force group = +users_folderC
browseable = no

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
force group = +users_folderD
browseable = no

No olvides verificar la configuración y reiniciar samba:

# testparm
# service smbd restart
# service nmbd restart

Establecer permisos:

chown root:everybody /var/samba
chmod 770 /var/samba
chown root:users_folderA /var/samba/folderA
chmod 2770 /var/samba/folderA
chown root:users_folderB /var/samba/folderB
chmod 2770 /var/samba/folderB
chown root:users_folderC /var/samba/folderC
chmod 2770 /var/samba/folderC
chown root:users_folderD /var/samba/folderD
chmod 2770 /var/samba/folderD

De esta manera, el acceso directo a las carpetas internas no está permitido. Además, no son visibles en absoluto y solo se puede acceder a través de la carpeta principal.

Oleg Bolden
fuente
Gracias, esto funcionó. Ahora tenemos otro problema: Excel 2016 no puede guardar archivos de más de 13 KB en Samba. Pero ese es otro tema. ¡Muchas gracias por ayudar!
soner