如何在沒有主資料夾和個人 .bashrc 檔案的系統使用者登入時執行命令?

如何在沒有主資料夾和個人 .bashrc 檔案的系統使用者登入時執行命令?

我透過 /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 身份運行,則很難確保其安全。

相關內容