如何在不使用 sudo 的情況下獲取 ldap 使用者列表?
我對我想知道其使用者列表的伺服器具有非 sudo ssh 訪問權限,我認為該伺服器正在使用 ldap,因為:
-bash-4.2$ cat /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files ldap group: files ldap shadow: files ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
但:
-bash-4.2$ cd /etc/sssd/ -bash: cd: /etc/sssd/: No such file or directory
請注意兩者都沒有
/etc/passwd
,ls -lsa /var
或者getent passwd
沒有給出我想要的列表(他們甚至不包括我自己的使用者名)那麼,有沒有人知道如何獲取該伺服器的使用者名和 ID 列表?
-bash-4.2$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.11 (wheezy) Release: 7.11 Codename: wheezy
很可能 ldap 配置不允許列舉。
如果您知道使用者 ID 的範圍,您可以嘗試通過查詢每個可能的使用者 ID 來獲取使用者列表:
getent passwd {0..65535}
這裡假設一個 shell 支持
{x..y}
大括號擴展的形式(zsh、bash、ksh93、tcsh、yash -o 大括號擴展)。請注意,在 Linux 上,uid 不再限於 16 位,並且某些基於 Microsoft AD 或 samba 的目錄伺服器至少經常使用大於 65535 的值。
{0..2147483647}
不過,查詢是不可能的。您的網路管理員可能不會喜歡這樣,因為這意味著對目錄伺服器執行大量 LDAP 查詢。
請注意,由於數據庫中的主鍵
passwd
是使用者名,而不是 id,因此每個使用者名可能有多個 id,angetent passwd <id>
只返回一個條目,因此您可能會失去一些使用者。如果使用者通常在他們的主要組之外的至少一個組中,獲取使用者列表的一種方法可能是使用相同方法查詢組列表並查看其成員:
getent group {0..65535} | cut -d: -f4 | tr , '\n' | sort -u
這裡
sss
不使用。您將擁有sss
而不是ldap
在nsswitch.conf
.那將是
libnss-ldap
(或者可能是 libnss-ldapd,檢查dpkg -l | grep ldap
)處理對ldap
. 配置可能在/etc/libnss-ldap.conf
or/etc/ldap.conf
或/etc/ldap/ldap.conf
中。如果您可以閱讀這些內容,那麼您將找到伺服器名稱和使用者在目錄樹中位置的詳細資訊,並且您可以
ldapsearch
用來獲取相關資訊(前提是您被授予訪問權限)。