Puppet

puppet nis使用者管理

  • August 5, 2014

我開始使用 puppet 來管理我們的 RHEL 伺服器。此時我嘗試設置使用者管理。我們在校園裡執行一個 NIS 環境,所以直到現在我將 +testuser::::: 行添加到 /etc/passwd 文件中,然後通過 NIS 接收使用者資訊。我想要實現的是我有一組可以登錄到每台機器的管理員使用者(admin1、admin2 和 admin3)和一組在每台機器上都不同的使用者(user1、user2 和 user3)。在 passwd 文件的末尾,我需要一個輸入行 +::::::/sbin/nologin 以提供所有使用者資訊,但不授予對他們的訪問權限。

所以 /etc/passwd 在一台機器上看起來像

+admin1::::::
+admin2::::::
+admin3::::::
+user1::::::
+user2::::::
+::::::/sbin/nologin

在另一台機器上

+admin1::::::
+admin2::::::
+admin3::::::
+user1::::::
+user3::::::
+::::::/sbin/nologin

因為管理員使用者是相當靜態的,但普通使用者因係統而異,所以我想在一個模組中聲明管理員使用者,並在每個節點的基礎上聲明普通使用者。

我的第一個問題是,如何編輯 /etc/passwd 文件以添加行。此外,排序正確很重要,因此 nologin 行位於末尾。您知道如何以靈活的方式實現這一目標嗎?

謝謝並恭祝安康

當您將資源添加到清單時, Puppet 將/etc/passwd自行編輯user,例如

user {
   'admin1':
       ensure => present,
       uid => 1003,
       password => '$6$...',
}

現有生產線的訂購充其量是棘手的。Puppet 本身不支持這樣的東西。我的建議是使用這樣的exec資源:

exec {
   '/path/to/script-that-moves-nologin-line-to-the-end':
       unless => '/script/that/returns-true-if-nologins-line-is-currently-at-the-end'
}

您希望 Puppet 在將所有使用者資源同步到您的系統後執行該操作。有不同的方法可以解決這個問題,各有優缺點。

假設您的清單不是太複雜,您可能會擺脫該user類型的全域預設值。

User { before => Exec['/path/to/script-that-moves-nologin-line-to-the-end'] }

請注意,沒有user資源會用不同的before值覆蓋它。

其他選擇包括

其中可能是可以想像的。

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