Configuración de nombre de usuario y grupo predeterminados para archivos en el directorio

13

Utilizando esta útil publicación, puedo establecer un grupo predeterminado y permisos de archivo en una carpeta.

Tengo problemas para configurar un propietario predeterminado (teamlead uid 1234).

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Con ese:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Por lo tanto, se asigna el grupo correcto, pero el nuevo archivo tiene la propiedad del usuario que crea el archivo. Me gustaría que los archivos recién creados tengan teamlead: web_prod owner / group.

Parece que también setfaclse puede usar para establecer un usuario predeterminado. Con la carpeta existente config de acl (arriba):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Ahora para crear un archivo como un usuario diferente. Espero que tenga teamlead: propiedad de web_prod.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

El nuevo archivo todavía tiene la propiedad del propietario que crea el archivo, no el 1234 (teamlead).

¿Es posible lo que busco, o la forma en que estoy haciendo esto está mal?

un codificador
fuente

Respuestas:

18

Con setfacl puede establecer permisos predeterminados, pero no el propietario / grupo predeterminado para los archivos recién creados.

Para que los archivos sean propiedad de un usuario específico, necesitaría un bit setuid que funcione como el bit setgid en los directorios. Lamentablemente eso no está implementado.

Con setfacl puede hacer algo que es casi equivalente en la mayoría de los escenarios: puede establecer un ACL como default:user:teamlead:rwx. De esa forma, el usuario nombrado puede escribir los nuevos archivos, incluso si alguien más lo posee.

Michael Suelmann
fuente
Actualice esta respuesta con el comando para aplicar 'default: user: teamlead: rwx' al directorio '/ foo'
user319862
10

Siempre se crea un nuevo archivo que pertenece al usuario con el que se ejecuta el proceso de creación del archivo. (El ID de usuario efectivo, para ser precisos). Esto no se puede cambiar, ya que permitir a los usuarios crear archivos que pertenecen a otros usuarios sería un agujero de seguridad, similar a permitir que los usuarios no root regalen un archivo .

Lo que sea que estés tratando de hacer, no necesitas hacer esto. Las ACL son suficientes para garantizar que cualquier cosa que necesite leer el archivo más adelante tenga permisos suficientes. Deje el archivo propiedad del usuario que lo creó.

Gilles 'SO- deja de ser malvado'
fuente
"Las ACL son suficientes para garantizar que cualquier cosa que necesite leer el archivo más tarde tenga permisos suficientes". Falso. El grupo de su nuevo archivo será el grupo predeterminado de su usuario. Si los usuarios que colaboran tienen diferentes grupos predeterminados, no podrán acceder a los archivos de los demás. Necesita setgid para hacer que el grupo de la carpeta principal se "pegue" a todos los hijos.
bviktor
@bviktor Puede lograr el mismo efecto con ACL.
Gilles 'SO- deja de ser malvado'
¿Cómo se especifica el propietario y el grupo para los nuevos archivos con ACL?
bviktor
@bviktor El propietario es quien crea el archivo, eso no cambia. El grupo que posee el archivo en los permisos tradicionales es irrelevante. La ACL en archivos nuevos es la ACL predeterminada del directorio, de la misma manera que el grupo propietario en los archivos nuevos es el grupo propietario del directorio con semántica BSD ( g+s).
Gilles 'SO- deja de ser malvado'
@Gilles no. El grupo de archivos nuevos será el "grupo de inicio de sesión inicial" del usuario creador, no el grupo de la carpeta principal. El comportamiento que describe (es decir, el nuevo archivo obtiene el grupo del directorio principal) requiere que setgid se establezca en el principal. Y el grupo es muy relevante porque cuando los usuarios colaboran, no pueden acceder a los archivos de los demás si el grupo es diferente. A menos que sus archivos sean accesibles al mundo, lo cual no es exactamente una gran idea.
bviktor
1

Si desea que los nuevos archivos se creen con el nuevo grupo, debe cambiar el grupo primario.

Para esto puede usar usermod y el parámetro -g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

p.ej

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1
sinkmanu
fuente
0

En Linux, debe tener sgid en el directorio principal para heredar el grupo de archivos. (Aunque no necesita sgid en el directorio en sistemas BSD).

jirib
fuente
La pregunta es sobre la asignación de propiedad a los archivos recién creados. El grupo ya está asignado correctamente.
un codificador el