Active-Directory

從 Active Directory 分配 UID 和 GID

  • August 11, 2018

我的 CentOS 7 機器已成功加入域 FOOBAR(由 驗證realm list),以下是來自 AD(非本地)的使用者的資訊:

[root@centos7 ~]# id jdoe@FOOBAR.GLOBAL
uid=5631533(jdoe@FOOBAR.GLOBAL) gid=5600513(domain users@FOOBAR.GLOBAL)
groups=5600513(domain users@FOOBAR.GLOBAL),5631532(othergroup@FOOBAR.GLOBAL) 

UID 和 GID 是如何分配的?是否有可能以某種方式將它們映射到某個期望的值?

SSSD 中的 AD 映射是使用守護程序本身中的算法(可能是雜湊函式)確定的:因為它是內置的,如果您保持預設值相同,則使用 SSSD 的每台電腦都應將 ID 映射到相同的值,而不管電腦如何正在使用。以下是Red Hat 對 AD 映射的解釋:

SSSD 可以使用 AD 使用者的 SID 在稱為 ID 映射的過程中通過算法生成 POSIX ID。ID 映射在 AD 中的 SID 和 Linux 上的 ID 之間創建映射。

  • 當 SSSD 檢測到新的 AD 域時,它會將一系列可用 ID 分配給新域。因此,每個 AD 域在每個 SSSD 客戶端電腦上具有相同的 ID 範圍。
  • 當 AD 使用者首次登錄 SSSD 客戶端電腦時,SSSD 會在 SSSD 記憶體中為該使用者創建一個條目,包括基於使用者 SID 的 UID 和該域的 ID 範圍。
  • 因為 AD 使用者的 ID 是從同一個 SID 以一致的方式生成的,所以使用者在登錄到任何 Red Hat Enterprise Linux 系統時都具有相同的 UID 和 GID。

[您可以使用 sssd.conf的 domain/ name [] 部分中的](https://linux.die.net/man/5/sssd.conf)[`min_id`max_id](https://linux.die.net/man/5/sssd.conf)設置 ID 最小值和最大值。在“域部分”下查看描述;“範例”有一個使用範例:

[sssd]
domains = LDAP
services = nss, pam
config_file_version = 2

[nss]
filter_groups = root
filter_users = root

[pam]

[domain/LDAP]
id_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com

auth_provider = krb5
krb5_server = kerberos.example.com
krb5_realm = EXAMPLE.COM
cache_credentials = true

min_id = 10000
max_id = 20000
enumerate = False

如果您覆蓋這些值,如果您想保持一致的映射,請確保在使用 SSSD 中該域的任何其他系統上設置相同的映射!

引用自:https://unix.stackexchange.com/questions/461565