¿Cómo ejecuto un comando al iniciar sesión para un usuario del sistema que no tiene una carpeta de inicio ni un archivo .bashrc personal?

¿Cómo ejecuto un comando al iniciar sesión para un usuario del sistema que no tiene una carpeta de inicio ni un archivo .bashrc personal?

Configuré las carpetas de inicio de estos usuarios a través del archivo /etc/passwd, pero cuando inician sesión me gustaría que activen un virtualenv de Python. Si tuvieran un .bashrcarchivo personal, simplemente incluiría el activatecomando allí y el directorio cambiaría como un enlace posterior a la activación con virtualenv.

Sin embargo, estos usuarios no tienen carpetas de inicio ni .bashrcarchivos personales.

¿Cómo puedo ejecutar un comando diferente al iniciar sesión para cada uno de estos usuarios? (Solo es necesario ejecutar un comando).

Estos usuarios solo inician sesión mediante su, nunca SSH. La máquina es un VPS que ejecuta Ubuntu 12.04.3 LTS.

Respuesta1

Puede agregar un archivo al /etc/profiile.ddirectorio del sistema que incluya una if/thendeclaración para cada uno de los usuarios para los que desea ejecutar virtualenv.

Ejemplo

Digamos que creo un archivo como este, /etc/profile.d/me.sh.

if [ "$USER" == "saml" ]; then
  touch /tmp/samsfile
fi

Hazlo ejecutable:

$ chmod +x /etc/profile.d/me.sh

Y luego inicie sesión como saml, usando su:

$ su saml

Si verificamos si se creó el archivo temporal, fue:

$ ls -l /tmp/samsfile 
-rw-rw-r-- 1 saml saml 0 Oct 14 00:31 /tmp/samsfile

Respuesta2

Si todo lo que quiere hacer es definir variables de entorno, puede ponerlas en~/.environmenten el directorio de inicio de los usuarios. Puedes poner fragmentos de shell más complejos en ~/.profile.

Todas las cuentas de usuario tienen un directorio de inicio, incluso si no les pertenece. Si bien puedes tener cuentas cuyo directorio personal no exista, no tiene mucho sentido hacerlo. Puede utilizar un único directorio propiedad de root como directorio de inicio de estos usuarios si lo desea.

Otra posibilidad de ejecutar un comando en el momento de iniciar sesión sería agregarpam_execa la pila PAM. Pero tenga en cuenta que esto es bastante complicado de usar correctamente, porque el programa se ejecuta como eloriginalusuario, o como root, y no como usuario de destino, y se ejecuta en el entorno elegido por el usuario original, por lo que es difícil hacerlo seguro si se ejecuta como root.

información relacionada