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

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

我的實驗室大約有 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 或類似磁碟機)上。

這是標準方法。你有什麼理由不這樣做嗎?

相關內容