Creación de archivos y directorios con un determinado propietario (usuario / grupo) mientras se realiza la sudoing

18

necesito wget algo (da como resultado un archivo comprimido en cwd), luego tengo que extraerlo, luego hacer algo de copiar / mover / modificar y quizás finalmente ejecutar un script (del archivo descargado).

Ahora todas estas tareas ya sea directamente ( wget, extraer, etc.) o indirectamente (ejecutar el script) da como resultado la creación de archivos y directorios (todo en el directorio de trabajo actual). Hago todas estas cosas como root (No hay forma de hacerlo con el usuario final, deseado).

El problema es: todo lo creado en el proceso es propiedad de root o del usuario sudo. Cuando termine (ya veces en el medio), tengo que emitir una serie de chmod y chown Comandos para hacer las cosas bien.

Ahora sería bueno si de alguna manera pudiéramos decirle al sistema que "a partir de ahora, cualquier archivo o directorio que crees cuando emito comandos como root, deberías crearlos con tal o cual propiedad y permisos".

اشکان نظری
fuente

Respuestas:

20

Tu siempre puedes sudo -u username touch filename cuando tu script se ejecuta como root. Por lo general no requiere contraseña, dependiendo de su sudoers configuración.

Alternativamente, ejecute su username -c touch filename. Los argumentos adicionales se suministran al shell del usuario, y el -c La opción al shell ejecuta los comandos especificados por convención.


Algunos comandos (como mkdir ) Soporta argumentos para especificar los permisos:

mkdir -m 0700 foo

Por defecto, las operaciones de archivo respetan la umask establecer para la cáscara. Define cuales permisos son negado . UNA umask de 0022 por ejemplo hace no Establecer permisos de escritura para grupo y otros. Ajustado a 0077 para evitar que el grupo y otros obtengan cualquier permiso.


Puede configurar el setgid en los directorios para que todos los archivos creados dentro hereden su pertenencia a grupos:

chmod g+s someDir

Algunos unixes apoyo el mismo comportamiento para setuid ( chmod u+s ), pero no Linux.

Daniel Beck
fuente
1
Creo que es seguro asumir que no hay un soporte dedicado para lo que está pidiendo. Solo el superusuario puede chown archivos a un usuario diferente, y establecer un valor predeterminado como este tiene el potencial de errores de usuario, dando a otros usuarios permisos sin la root El usuario se da cuenta.
Daniel Beck
7

Hay otra forma, bastante elegante, creo. Utilizando instalar (1)

Por ejemplo, zabbix-agentd necesita una subcarpeta dentro de / var / run, pero las distribuciones recientes usan tmpfs para / var / run, por lo que el directorio no sobrevive a los reinicios. Lo resolví creando un archivo / etc / sysconfig / zabbix-agentd que contiene:

install -g zabbix -o zabbix -d /var/run/zabbix
Angelo Turetta
fuente
Añadir también -m 0700 por ejemplo. los responder.
Ring Ø
2
Tenga en cuenta que install crea el directorio y entonces Cambia el propietario / grupo. Por lo tanto, hay un breve período de tiempo en el que el directorio no tiene el propietario / grupo especificado. En algunos contextos puede ser importante.
user368507
3

En sistemas similares a Unix, los archivos y directorios recién creados son propiedad del propietario del proceso que los creó. Las utilidades estándar normalmente no tienen la opción de cambiar el propietario de los archivos creados.

Variables con UID y GID del usuario original.

Si ejecuta algunos comandos repetidamente, puede usar las variables $SUDO_UID y $SUDO_GID para referirse al usuario que invocó sudo:

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

Obtención automática de la lista de archivos y directorios creados.

Si desea obtener la lista de archivos y directorios creados (y posiblemente modificados) automáticamente, puede ejecutar sus comandos bajo strace vigilancia que se basa en la ptrace() syscall:

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

o puedes usar por ejemplo Installwatch que se basa en el LD_PRELOAD mecanismo.

Ideas para seguir trabajando

Sobre la base de los métodos mencionados anteriormente, es posible crear una herramienta que cambiaría automáticamente el propietario y posiblemente los derechos de acceso de los archivos creados / modificados. El uso podría ser tan simple como:

sudo watch-chown do_something
pabouk
fuente