El shell puede expandirse ~
a su directorio de inicio. $HOME
generalmente tiene el mismo trato, pero a menudo desea consultar el directorio de inicio de los usuarios actuales desde un contexto que puede no admitir dicha expansión.
He tenido archivos de configuración donde $HOME
funciona pero ~
no funciona y viceversa.
Supongo que el fusible podría proporcionar algo en este sentido, algo así como /var/myself
->$HOME
Con eso podría colocar valores en los archivos de configuración para señalar cosas como /var/myself/backdrops/pornography/wtf/yarly.jpg
¿Hay algo como esto ya? Si no, ¿hay buenas razones para que no haya algo como esto?
Respuestas:
Entiendo su preocupación, pero la respuesta es "no", no existe tal cosa.
El método habitual es preguntar al sistema operativo la ruta de inicio del usuario u obtener la variable $ HOME.
Todas estas opciones siempre necesitan algo de codificación de la aplicación. Muchas aplicaciones, como bash, ofrecen el "alias" ~ (open (2) no traduce eso).
Por supuesto, se podría implementar un vfs o un módulo de fusibles para hacer esto. Probablemente haya algo para hacer eso, ¡voy a preguntar eso!
¿Pero es realmente necesario? Puede usar una solución alternativa como:
Cree un script para iniciar el programa que vincule $ HOME a una ruta relativa o una ubicación conocida.
Use pam_exec para vincular el directorio $ HOME a una ubicación conocida http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
fuente
Un truco (al menos en Linux) sería cambiar el directorio a
$HOME
antes de ejecutar la aplicación y luego usarlo/proc/self/cwd/...
en el archivo de configuración.fuente
/proc/self
no/proc/PID
, ya que no se puede saber de antemano lo que el PID va a ser.La mayoría de los programas le permiten especificar una ruta al archivo de configuración en la línea de comando. Por lo tanto, podría escribir un contenedor que tome un archivo de configuración estándar, lo filtre para sustituirlo
$HOME
por el usuario actual y luego pase el archivo de configuración temporal modificado al programa.fuente
Puede obtener el pid del usuario requestin y el sistema ask de su directorio personal. Entonces es posible.
Sin embargo, no estoy seguro de si no hay programas SUID que supongan FS como estático.
Editar:
El código anterior no es ideal, pero debería funcionar para casos comunes.
fuente
getpwuid
ogetpwuid_r
.