我透過 /etc/passwd 檔案設定這些使用者的主資料夾,但當他們登入時,我希望他們啟動 python virtualenv。如果他們有個人.bashrc
文件,我只需activate
在其中包含命令,並將目錄更改為 virtualenv 的啟動後掛鉤。
但是,這些使用者沒有主資料夾,也沒有個人.bashrc
檔案。
如何在登入時為每個使用者執行不同的命令? (只需執行一條指令即可。)
這些用戶僅使用 SSH 登錄su
,而從不使用 SSH。該機器是運行 Ubuntu 12.04.3 LTS 的 VPS。
答案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
在使用者的主目錄中。您可以將更複雜的 shell 片段放入~/.profile
.
所有使用者帳戶都有一個主目錄,即使它不屬於他們。雖然您可以擁有主目錄不存在的帳戶,但這樣做沒有多大意義。如果您願意,可以使用 root 擁有的單一目錄作為這些使用者的主目錄。
在登入時執行命令的另一種可能性是添加pam_exec
到 PAM 堆疊。但要注意,正確使用它是相當棘手的,因為程式運行時原來的用戶或 root 用戶,而不是目標用戶,並且它在原始用戶選擇的環境中運行,因此如果以 root 身份運行,則很難確保其安全。