私はユーザーのリストを知りたいサーバーへの非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}
ここでは、{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
を使用して関連情報を取得できる可能性があります(ただし、許可されたアクセス)。