La pregunta
Tiene un directorio de disco compartido entre clientes Linux y Microsoft Windows. Múltiples usuarios necesitan acceso a este recurso compartido de directorio, pero cuando los archivos se crean o modifican desde los clientes de Linux, se aplican los permisos de archivo de Linux, lo que dificulta o imposibilita que los clientes de Windows accedan a estos archivos.
Le gustaría compartir estos recursos de disco de forma homogénea.
La solución
Dependiendo de su estrategia de mantenimiento general, se puede utilizar una de las siguientes técnicas.
1. Forzar la propiedad del usuario o del grupo
En el archivo /etc/samba/smb.conf puede usar la directiva:
force user = [user] force group = [group]
Esto anulará los atributos normales de propiedad de archivos para el acceso a archivos o directorios. Por defecto, se utilizan las credenciales de usuario efectivas. Al usar cualquiera de las directivas anteriores (o ambas), la credencial asociada se puede forzar a un valor específico. Por lo tanto, todos los accesos a archivos se realizarán como si el proceso de acceso se estuviera ejecutando con la credencial especificada.
Si la directiva toma la forma:
force group = +[group]
entonces, solo los usuarios de Linux que ya son miembros de [grupo] cambiarán su grupo principal a [grupo] durante la duración del acceso. Los usuarios de Linux que aún no son miembros del [grupo] no se ven afectados por esta directiva.
2. Utilice los permisos de acceso al directorio
Considere el director /tmp:es un bloc de notas que permite a varios usuarios crear, modificar o eliminar archivos. Para evitar que el usuario A elimine un archivo propiedad del usuario B, el directorio tiene el bit fijo establecido:
$ ls -ld /tmp drwxrwxrwt 14 root root 360 Mar 19 08:25 /tmp
Observe la t flag de los permisos:esto indica el “sticky El bit ” está establecido para el directorio. Cualquier usuario puede crear archivos en este directorio, pero solo el usuario propietario puede eliminar la entrada; sin el bit adhesivo, cualquiera podría eliminar cualquier archivo ya que el directorio tiene permisos de lectura/escritura/ejecución mundial.
1. Una forma de sortear este problema es hacer que el directorio SAMBA compartido sea propiedad del usuario SAMBA:
# /bin/mkdir [/path/to/SAMBA/share] # /bin/chown -R [user]:[group] -R [/path/to/SAMBA/share]
2. A continuación, active el bit setgid para que el directorio fuerce las credenciales de grupo de cualquier entrada de directorio para que coincidan con las credenciales de grupo de ese directorio:
# /bin/chmod g+s [/path/to/SAMBA/share] # /bin/ls -ld [/path/to/SAMBA/share] drwxrws--- 1 [user] [group] 0 Mar 19 09:07 [/path/to/SAMBA/share]
3. Ahora cree un archivo dentro de [/path/to/SAMBA/share] como usuario raíz. El archivo será propiedad de root pero su grupo será el grupo [group]:
# /bin/mkdir /example # /bin/chown root:oracle /example # /bin/chmod g+s /example # /bin/ls -ld /example drwxr-sr-x 2 root oracle 4096 Mar 19 10:03 /example
4. Por último, cree un archivo en /example como usuario raíz:
# id uid=0(root) gid=0(root) groups=0(root) # touch /example/file # ls -ld /example /example/file drwxrws--- 2 root oracle 4096 Mar 19 10:09 /example -rw-r--r-- 1 root oracle 0 Mar 19 10:09 /example/file
Tenga en cuenta que aunque las credenciales utilizadas para crear el archivo eran root:root, las credenciales de acceso guardadas para el archivo eran root:oracle; la propiedad del grupo se estableció automáticamente en el grupo del directorio.
Nota
El método setgid descrito anteriormente también funciona si se usa el bit setuid en su lugar. En el paso chmod, haz esto en su lugar:
# chmod u+s [/path/to/SAMBA/share]
También puede anular tanto la propiedad del archivo como la pertenencia al grupo de esta manera:
# chmod u+s,g+s [/path/to/SAMBA/share]
Aunque es una capacidad fascinante, esto puede tener una utilidad limitada.
3. Usar listas de control de acceso (ACL)
Las listas de control de acceso, o ACL, son funciones del sistema de archivos en las que se almacena un conjunto adicional de atributos de archivo además de los permisos normales de propietario/grupo/otros archivos de Linux. El uso de ACL permite un control muy detallado sobre el tipo exacto de acceso que se otorgará a un tipo de acceso dado.
La implementación del sistema de archivos SAMBA en Linux admite listas de control de acceso, pero la función debe habilitarse explícitamente a través del atributo de montaje acl. Es posible habilitar esta característica dinámicamente, como:
# mount -o remount,acl [/path/to/samba/mount/point]
Como ejemplo, supongamos que tenemos un recurso compartido /samba/office/ donde permitimos que cualquier usuario escriba un archivo, pero la credencial del grupo debe forzarse a office. Podríamos usar el comando:
# mount -o remount,acl /group # setfacl -R -d -m u::rwx,g:office:rwx,o::r-x /samba/office
# /bin/getfacl /samba/office # file: samba/office/ # owner: root # group: office user::rwx group::rwx other::rwx default:user::rwx default:group:office:rwx default:mask::rwx default:other::r-x
Como estamos estableciendo esta ACL para el directorio, se aplica a los archivos y subdirectorios que contiene.