私はサーバーに対する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
OR どちら/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
ベストアンサー1
LDAP 構成が列挙を許可しない可能性が高くなります。
ユーザーIDの範囲がわかっている場合は、すべてのユーザーIDを照会してユーザーのリストを取得できます。
getent passwd {0..65535}
これは、シェルが中{x..y}
括弧拡張(zsh、bash、ksh93、tcsh、yash -o中括弧拡張)をサポートしていると仮定します。
Linuxでは、uidは16ビットに制限されなくなり、一部のMicrosoft ADまたはSambaベースのディレクトリサーバーは少なくとも65535より大きい値を使用することがよくあります。{0..2147483647}
ただし、お問い合わせはできません。
これはディレクトリサーバーへの多くのLDAPクエリを意味するため、ネットワーク管理者はそれを気に入らない可能性があります。
以降から参考にしてください最初のキーデータベースpasswd
はユーザーです名前、IDではなく、各ユーザー名には複数のIDを持つことができますgetent passwd <id>
。一つアイテムがあるため、一部のユーザーを失う可能性があります。
ユーザーが通常、1 つ以上のグループに属する場合、ユーザーのリストを取得する 1 つの方法は、同じ方法を使用してグループのリストを照会し、そのメンバーを確認することです。
getent group {0..65535} | cut -d: -f4 | tr , '\n' | sort -u
ここではsss
使用されません。代わりにinを使用する必要がありますsss
。ldap
nsswitch.conf
これは処理されますlibnss-ldap
(またはlibnss-ldapdを確認してくださいdpkg -l | grep ldap
)ldap
。設定は/etc/libnss-ldap.conf
またはまたは/etc/ldap.conf
にすることができます/etc/ldap/ldap.conf
。
これを読むことができる場合は、ディレクトリツリーでサーバー名とユーザーの場所の詳細を見つけることができ、それを使用してldapsearch
関連情報を取得できます(アクセス権が付与されている場合)。