Как выполнить команду при входе в систему для пользователя, у которого нет домашней папки и личного файла .bashrc?

Как выполнить команду при входе в систему для пользователя, у которого нет домашней папки и личного файла .bashrc?

Я установил домашние папки этих пользователей через файл /etc/passwd, но когда они входят в систему, я бы хотел, чтобы они активировали python virtualenv. Если бы у них был личный .bashrcфайл, я бы просто включил activateтуда команду, а смену каталога как пост-активационный хук с virtualenv.

Однако у этих пользователей нет домашних папок и личных .bashrcфайлов.

Как мне выполнить разные команды при входе в систему для каждого из этих пользователей? (Необходимо выполнить только одну команду.)

Эти пользователи входят в систему только с помощью su, никогда не SSH. Машина представляет собой VPS с Ubuntu 12.04.3 LTS.

решение1

Вы можете добавить в системный /etc/profiile.dкаталог файл, содержащий if/thenинструкцию для каждого пользователя, для которого вы хотите запустить команду virtualenv.

Пример

Допустим, я создаю такой файл, /etc/profile.d/me.sh.

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

Сделайте его исполняемым:

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

А затем войдите как saml, используя su:

$ su saml

Если мы проверим, был ли создан временный файл, то увидим:

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

решение2

Если все, что вам нужно сделать, это определить переменные окружения, вы можете поместить их в~/.environmentв домашнем каталоге пользователя. Вы можете поместить более сложные фрагменты оболочки в ~/.profile.

У всех учетных записей пользователей есть домашний каталог, даже если он им не принадлежит. Хотя у вас могут быть учетные записи, домашний каталог которых не существует, в этом нет особого смысла. Вы можете использовать один каталог, принадлежащий root, в качестве домашнего каталога этих пользователей, если хотите.

Другой возможностью выполнить команду во время входа в систему было бы добавитьpam_execв стек PAM. Но учтите, что это довольно сложно использовать правильно, потому что программа работает какоригинальныйили как пользователь root, а не как целевой пользователь, и он работает в среде, выбранной исходным пользователем, поэтому его сложно защитить, если он работает как пользователь root.

Связанный контент