我的實驗室大約有 30 台系統(獨立 PC),將有近 200 名學生使用它。每個系統都有一個名為 USER 的帳戶,其密碼為 123456,這 200 個人都知道該帳戶。因此,他們可以訪問任何免費的系統並工作一段時間。它們的使用情況僅透過登記簿條目進行記錄。我想為每個用戶提供單獨的登入名稱和密碼,這可以透過 LDAP 伺服器輕鬆實現。但我不想在每台電腦上建立 200 個使用者帳戶。我想將所有 200 個人的登入對應到使用者帳戶本身。他們將具有相同的設定檔和相同的主目錄。我只想將個人實驗室使用的時間和日期記錄在文件中。可以使用 LDAP 或其他軟體來完成此操作嗎?
答案1
同意 SLESKE 的觀點,但要擴展他/她的評論,您需要先做幾件事!
在 Linux 中,控制登入的程式庫需要重定向以使用 LDAP 後端,而不是在 /etc/passwd 中尋找內容。
如果您使用 OpenLDAP,那麼您需要注意兩件事:
NSCD(名稱伺服器快取守護程式),用於快取 LDAP 查詢。您將在使用者登入的每台主機上運行它。
NSSLDAP(LDAP 的名稱伺服器交換器)這是導致登入查詢 NSCD 的黏合劑,NSCD 反過來將查詢 LDAP 後端,或者如果 NSCD 過時或不可用,NSSLDAP 將直接查詢 LDAP 後端。
因此,如果 OpenLDAP、NSCD 和 NSSLDAP 不是您的發行版的一部分,您將需要在每個工作站上安裝它們。需要 OpenLDAP 來取得知道如何使用 LDAP 協定的客戶端程式庫。
然後您需要對一些文件進行編輯:
/etc/nscd.conf 該檔案控制快取的內容。以下是我的一個充當 Samba 伺服器的系統的轉儲:
enable-cache passwd yes
positive-time-to-live passwd 10
negative-time-to-live passwd 3
suggested-size passwd 211
check-files passwd yes
persistent passwd yes
shared passwd yes
max-db-size passwd 33554432
auto-propagate passwd yes
enable-cache group yes
positive-time-to-live group 3600
negative-time-to-live group 3
suggested-size group 211
check-files group yes
persistent group yes
shared group yes
max-db-size group 33554432
auto-propagate group yes
enable-cache hosts yes
positive-time-to-live hosts 3600
negative-time-to-live hosts 3
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
然後,您需要修改 nsswitch.ldap 檔案(閱讀其中的 DOC,這裡無法詳細介紹)。
一件非常重要的事!
如果您的 LDAP 伺服器已關閉,您需要確保本機 root 帳戶仍可登入。
因此,當我的 Linux 機器啟動時,我有一個腳本總是將 nsswitch.conf 檔案複製到如下所示的位置:
密碼:compat 組:compat
主機:檔案 dns 網路:文件
服務:檔案 協定:檔案 rpc:檔案 ethers:檔案 網路遮罩:檔案 網路群組:檔案 bootparams:文件
自動掛載:檔案別名:文件
當我準備好使用 LDAP 進行登入時,我將 nsswitch.conf 檔案替換為以下內容:
passwd:檔案 ldap 群組:檔案 ldap 影子:檔案 ldap
主機:檔案 dns 網路:文件
服務:檔案 協定:檔案 rpc:檔案 ethers:檔案 網路遮罩:檔案 網路群組:檔案 bootparams:文件
自動掛載:檔案別名:文件
前者允許我在本地登錄,後者允許兩者,但由於 NSCD 緩存,NSCD 需要一段時間才能過時,導致登錄延遲或問題。
關於這一點還有很多話要說,但希望這能讓您開始。
順便一提:我是 Pozix Linux 和 Pozix Linux Small Business Server 的開發人員,我們有超過 400 個 Samba 系統以這種方式運作!
同意,TRS80 的註解是有效的,但這裡是我們用來從 /etc/passwd 檔案建立 LDIF 檔案的腳本。產生的 LDIF 檔案可用於填入 LDAP 資料庫。您需要確保,如果您在多個工作站上執行此腳本,則可以清除重複的帳戶名稱,以便最終獲得具有唯一 UID 的唯一帳戶名稱。
cat /etc/passwd | while read i; do
uid=`echo $i | cut -d : -f 1`
uidNumber=`echo $i | cut -d : -f 3`
gidNumber=`echo $i | cut -d : -f 4`
gecos=`echo $i | cut -d : -f 5`
homeDirectory=`echo $i | cut -d : -f 6`
loginShell=`echo $i | cut -d : -f 6`
userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`
echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
echo "objectClass: account"
echo "objectClass: posixAccount"
echo "cn: $gecos"
echo "uid: $uid"
echo "uidNumber: $uidNumber"
echo "gidNumber: $gidNumber"
echo "homeDirectory: $homeDirectory"
echo "loginShell: $loginShell"
echo "userPassword: $userPassword"
done
答案2
如果您將每個帳戶的 uidNumber 和 homeDirectory 屬性設定為相同,那麼事情可能會按照您想要的方式運作。
答案3
您不需要在每台 PC 上建立 200 個使用者帳戶。 Linux 可以從 LDAP 取得所有使用者資訊,因此帳戶在本機上不存在(即在 /etc/passwd 中)。主目錄通常位於網路磁碟機(NFS 或類似磁碟機)上。
這是標準方法。你有什麼理由不這樣做嗎?