使用LDAP伺服器身份驗證的Linux中單個使用者的多個登錄名
我的實驗室中有大約 30 台系統(獨立 PC),將近 200 名學生將使用它。每個系統都有一個名為 USER 的帳戶,其密碼為 123456,這 200 人都知道。因此,他們可以訪問任何免費的系統並工作一段時間。只需註冊簿條目即可記錄它們的使用情況。我想給每個使用者單獨的登錄名和密碼,這很容易通過 LDAP 伺服器實現。但我不想在每台 PC 上創建 200 個使用者帳戶。我想將所有 200 個人登錄映射到使用者帳戶本身。它們將具有相同的配置文件和相同的主目錄。我只想在文件中記錄個人實驗室使用的時間和日期。這可以使用 LDAP 或其他軟體來完成嗎?
同意 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 文件(閱讀上面的文件,這裡太多了)。
一件非常重要的事情!!!!
如果您的 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