sudo를 사용하지 않고 LDAP 사용자 목록을 얻는 방법은 무엇입니까? [복사]

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

OR 둘 /etc/passwd다 내가 원하는 목록을 제공하지 않습니다(내 사용자 이름도 포함되지 않음).ls -lsa /vargetent 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>.하나항목이 있으므로 일부 사용자를 잃을 수도 있습니다.

사용자가 일반적으로 기본 그룹 외부의 하나 이상의 그룹에 속하는 경우 사용자 목록을 얻는 한 가지 방법은 동일한 방법을 사용하여 그룹 목록을 쿼리하고 해당 구성원을 확인하는 것입니다.

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

여기서는 sss사용되지 않습니다 . 대신 in을 사용해야 합니다 sss.ldapnsswitch.conf

이는 처리될 것입니다 libnss-ldap(또는 libnss-ldapd를 확인하십시오 dpkg -l | grep ldap) ldap. 구성은 /etc/libnss-ldap.conf또는 /etc/ldap.conf또는 에 있을 수 있습니다 /etc/ldap/ldap.conf.

이 내용을 읽을 수 있으면 디렉토리 트리에서 서버 이름과 사용자 위치의 세부 정보를 찾을 수 있으며 이를 사용하여 ldapsearch관련 정보를 얻을 수 있습니다(액세스 권한이 부여된 경우).

관련 정보