Tengo un script bash que tiene que rsync para descargar archivos escribiéndolos localmente, y luego necesito configurar el propietario en apache y el grupo en un grupo de usuarios en particular (del que apache no es miembro).
¿Hay alguna manera de crear esos archivos con esas propiedades a medida que los escribe el proceso rsync, sin tener que revisarlos y cambiarlos después usando chmod? Hay tantos archivos que el tiempo que lleva revisarlos después es prohibitivo.
Tengo que hacer esto para varios grupos de usuarios, por lo que no debería agregar Apache a estos grupos, y ciertamente no puedo convertirlos a todos en el grupo predeterminado.
En otras palabras:¿hay alguna manera de que root pueda crear un archivo como usuario X y grupo Y cuando X no es miembro de Y?
Intenté usar runuser, pero no puedo configurar el grupo (probablemente porque apache no pertenece al grupo).
Sé que puede usar chmod para cambiar los permisos y agregar cualquier combinación de usuario/grupo. Lo que estoy preguntando es si hay una forma de abrir un archivo para escribir y usar cualquier combinación de usuario/grupo mientras lo crea.
Intenta usar sudo:
[[email protected] tmp]# groups angelo
angelo : angelo wheel
[[email protected] tmp]# groups apache
apache : apache
[[email protected] tmp]# sudo -u angelo -g apache touch angelo-file
Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7
[[email protected] tmp]# ls -ld angelo-file
ls: cannot access angelo-file: No such file or directory
[[email protected] tmp]# sudo -u angelo -g angelo touch angelo-file
[[email protected] tmp]# ls -ld angelo-file
-rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file
Respuesta aceptada:
Si desea crear un archivo como un usuario y grupo específico sin usar chown
, puedes usar sudo
y especifique el usuario y el grupo:
sudo -u #49 -g #58 touch /tmp/something
Tenga en cuenta que el usuario que especifique debe tener permiso para escribir en el directorio donde intenta esto.
O bien, puede iniciar un shell como el usuario actual, con el grupo establecido en otra cosa:
sudo runuser "$USER" -g somegroup
Intenté esto en una caja de Vagrant con éxito:
[[email protected] ~]$ sudo runuser "$USER" -g floppy
[[email protected] ~]$ touch testfile
[[email protected] ~]$ ls -l testfile
-rw-r--r--. 1 vagrant floppy 0 Nov 9 15:57 testfile
[[email protected] ~]$
Esto es a pesar de que el usuario "vagabundo" no forma parte del grupo "disquete".
Relacionado:Php:image2wbmp — Imagen de salida al navegador o archivo