Linux

如何在不使用 sudo 的情況下獲取 ldap 使用者列表?

  • November 26, 2018

我對我想知道其使用者列表的伺服器具有非 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/passwdls -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而不是ldapnsswitch.conf.

那將是libnss-ldap(或者可能是 libnss-ldapd,檢查dpkg -l | grep ldap)處理對ldap. 配置可能在/etc/libnss-ldap.confor/etc/ldap.conf/etc/ldap/ldap.conf中。

如果您可以閱讀這些內容,那麼您將找到伺服器名稱和使用者在目錄樹中位置的詳細資訊,並且您可以ldapsearch用來獲取相關資訊(前提是您被授予訪問權限)。

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