web-dev-qa-db-ja.com

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/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
6

ほとんどの場合、LDAP構成では列挙が許可されていません。

ユーザーIDの範囲がわかっている場合は、可能なすべてのユーザーIDを照会して、ユーザーリストを取得できます。

getent passwd {0..65535}

ここでは、{x..y}形式のブレース展開(zsh、bash、ksh93、tcsh、yash -o braceexpand)をサポートするシェルを想定しています。

Linuxでは、uidはもはや16ビットに制限されておらず、一部のMicrosoft ADまたはsambaベースのディレクトリサーバーは少なくとも65535より大きい値を使用することに注意してください。{0..2147483647}のクエリは問題外です。

ディレクトリサーバーに対して多くのLDAPクエリを実行することになるため、ネットワーク管理者はおそらくそれを好まないでしょう。

passwdデータベースの主キーはユーザーではないため、IDではなくユーザーnameであることに注意してください。ユーザー名ごとに複数のIDがある場合があります。 getent passwd <id>oneエントリのみを返すため、一部のユーザーが欠落している可能性があります。

ユーザーが通常、プライマリグループの横にある少なくとも1つのグループに属している場合、ユーザーのリストを取得する1つの方法は、同じメソッドでグループのリストをクエリして、メンバーを確認することです。

getent group {0..65535} | cut -d: -f4 | tr , '\n' | sort -u

ここではsssは使用されていません。 nsswitch.confには、sssではなくldapが含まれます。

これは、_ldapのクエリを処理するlibnss-ldap(または場合によってはlibnss-ldapd、dpkg -l | grep ldapで確認)になります。構成は、おそらく/etc/libnss-ldap.confまたは/etc/ldap.confまたは/etc/ldap/ldap.confにあります。

それらを読むことができれば、サーバー名とユーザーがディレクトリツリーのどこにいるかの詳細がわかり、ldapsearchを使用して関連情報を取得できる可能性があります(ただし、許可されたアクセス)。

4