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".
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 laroot
El usuario se da cuenta.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:
fuente
-m 0700
por ejemplo. los responder.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.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
: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 laptrace()
syscall: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:
fuente