Linux

使用LDAP伺服器身份驗證的Linux中單個使用者的多個登錄名

  • July 18, 2009

我的實驗室中有大約 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

引用自:https://serverfault.com/questions/38154