Я установил домашние папки этих пользователей через файл /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.