OpenLDAP 명령 요약
- ldapsearch: OpenLDAP 디렉터리 트리 항목을 검색하세요.
- ldapadd: LDIF 형식을 통해 디렉터리 트리 항목을 추가합니다.
- ldapdelete: OpenLDAP 디렉터리 트리 항목을 삭제합니다.
- ldapmodify: OpenLDAP 디렉터리 트리 항목을 수정합니다.
- ldapwhoami: OpenLDAP 사용자의 신원을 검증합니다.
- ldapmodrdn: OpenLDAP 디렉터리 트리 DN 항목을 판단합니다.
- ldapcompare: DN 값과 지정된 매개변수 값이 동일한 항목에 속하는지 여부를 결정합니다.
- ldappasswd: OpenLDAP 디렉터리 트리 사용자 항목을 수정하여 비밀번호 재설정을 수행합니다.
- slaptest: slapd.conf 파일 또는 cn=configuration 디렉터리를 확인하세요.
- slapindex: 쿼리 효율성을 제공하기 위해 OpenLDAP 디렉터리 트리 인덱스를 생성합니다.
- 슬랩캣: 데이터를 OpenLDAP용 LDIF 파일로 변환합니다.
LDAPADD 명령어
옵션 | 묘사 | -x | 간단한 인증 수행 | -D | 서버를 바인딩하는 데 사용된 DN | -h | 디렉토리 서비스의 주소 | -w | DN 비밀번호를 묶기 | -f | 입력 더하기 위해 LDIF 파일을 사용하는 파일 |
먼저, 다음 명령어가 포함된 test.ldif 파일을 준비합니다:
내용은 다음과 같습니다:
dn: uid=xzz,ou=Users,dc=itsvse,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/itsvse_xzz
loginShell: /bin/bash
cn: xzz
uidNumber: 1000
gidNumber: 1000
sn: System Administrator
mail: xzz@itsvse.com
postalAddress: shanghai
mobile: 13788888888
명령어를 다음과 같이 추가하세요:
비밀번호를 입력하면 아래 그림과 같이 성공적으로 추가됩니다:
ldapmodified 명령어
ldapmodify 명령어는 고정되어 있으며 주로 구성 파일을 통해 다양한 수정 기능을 구현합니다.
demo.ldif 파일은 다음과 같으며, 이는 사용자 uid=xzz의 uidNumber 매개변수가 수정됨을 의미합니다.
LDAPPASSWD 사령부
ldappasswd는 LDAP 서버에 연결을 열고 진입 비밀번호를 변경합니다.
옵션 | 묘사 | -x | 간단한 인증 수행 | -D | 서버를 바인딩하는 데 사용된 DN | -w | DN 비밀번호를 묶기 | -S | 비밀번호를 입력하면 안내받으세요 | -s | 패스를 통해 패스를 설정하세요 | -a | 패스 설정 올드 패스 도어 투 | -A | 옛 passwd 설정을 프롬프트 | -H | 는 결속할 서버를 의미합니다 | -나는 | SASL 세션 메서드를 사용하세요 |
LDAPSEARCH 명령어
LDAP 검색 명령어
[root@VM_0_9_centos ~]# ldapsearch -h
ldapsearch: option requires an argument -- 'h'
ldapsearch: unrecognized option -h
usage: ldapsearch [options] [filter [attributes...]]
where: 필터 RFC 4515 준수 LDAP 검색 필터 속성 공백으로 분리된 속성 설명 목록 여기에는 다음이 포함될 수 있습니다: 1.1 속성 없음 * 모든 사용자 속성 + 모든 운영 속성 검색 옵션: - 절대 (기본값), 항상, 검색, 찾기 중 하나의 deref - 속성 이름만 가져옴(값 없음) -B 베이스 DNS 검색을 위한 -c 연속 작동 모드 (오류 시 멈추지 않음) -E [!] <ext>[=<extparam>] 검색 확장 (! 는 중요도를 나타냅니다) [!] domainScope (도메인 범위) !dontUseCopy(카피를 사용하지 마세요) [!] mv=<filter> (RFC 3876 매칭 바운드 필터) [!] pr=<size>[/prompt|noprompt] (RFC 2696 페이지 결과/prompt) [!] sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...] (RFC 2891 서버 측 정렬) [!] 하위 항목[=true|false] (RFC 3672 하위 항목) [!] sync=ro[/<cookie>] (RFC 4533 LDAP 동기화 refresh only) rp[/<cookie>][/<slimit>] (refreshAndPersist) [!] vlv=<before><after>/(/<offset>/<count>|<value>:) (LDAPV3-VLV-09 가상 목록 뷰) [!] deref=derefAttr:attr[,...] [; derefAttr:attr[,...] [; ...]] [!] <oid>[=:<b64value>] (일반 대조군; 응답 처리 없음) -f 파일 읽기 작업 'file'에서 -F 접두사 URL 접두사 파일 (기본값: file:///tmp/) - I 검색 시간 제한(초 단위, 또는 "없음" 또는 "최대 시간") - L LDIFv1 형식의 출력 응답 -LL 주석 없이 LDIF 형식으로 응답을 출력합니다 - 주석 없이 LDIF 형식의 LLL 출력 응답 그리고 버전 -M DSA IT 제어 관리 활성화 (-MM로 임명을 변경) -P 버전 프로토콜 버전 (기본값: 3) -s 스코프 1 베이스, 1, 서브 또는 자식 (탐색 스코프) -S attr 속성을 'attr'로 정렬 -t 임시 디렉터리의 파일에 이진 값을 쓰는 방식 -tt: 임시 디렉터리의 파일에 모든 값을 쓰기 -T 경로: 경로로 지정된 디렉터리에 파일을 쓰기 (기본값: /tmp) -u는 출력 시 사용자 친화적인 항목 이름을 포함합니다 -z 검색에 대한 크기 제한(항목 단위, 또는 "none" 또는 "max")이 있습니다 일반적인 선택지: -d 레벨 설정: LDAP 디버깅 레벨을 '레벨'로 설정하세요. -D binddn bind DN -e [!] <ext>[=<extparam>] 일반 확장(! 는 임계성을 나타냅니다) [!] assert=<filter> (RFC 4528; RFC 4515 필터 문자열) [!] authzid=<authzid> (RFC 4370; "DN:<dn>" 또는 "U:<user>") [!] 체인 처리[=<resolveBehavior>[/<continuationBehavior>]] "chainingPreferred", "chainingRequired" 중 하나, "추천 우선", "추천 필수" [!] manageDSAit (RFC 3296) [!] NOOP Ppolicy [!] postread[=<attrs>] (RFC 4527; 쉼표 구분 ATTR 목록) [!] 프리리드[=<attrs>] (RFC 4527; 쉼표 구분 ATTR 목록) [!] 진정해. [!] 세션트래킹 버려, 취소, 무시(SIGINT가 포기/취소를 보냅니다, 또는 응답을 무시하거나; 중요하다면 SIGINT를 기다리지 마세요. 조작 자체는 아니에요) -h 호스트 LDAP 서버 - H URI LDAP 균일 자원 식별자(들) -저는 SASL 인터랙티브 모드를 사용합니다 -그리고 실제로 하지 말고 할 수 있는 일을 보여주세요 -N 역방향 DNS를 사용해 SASL 호스트 이름을 정규화하지 마세요 -O props SASL 보안 속성 -o <opt>[=<optparam>] 일반 옵션 nettimeout=<timeout> (초 단위, 또는 "없음" 또는 "최대값") ldif-wrap=<width> (열로 표시, 또는 'no'는 랩이 없음) -p 포트 LDAP 서버의 포트 -Q SASL 조용한 모드 사용 -R 영역 SASL 영역 - U authcid SASL 인증 식별자 -V 실행 중(진단 → 표준 출력) -V 인쇄 버전 정보 (-VV 전용) -w passwd bind password (간단한 인증용) -W 바인드 비밀번호 프롬프트 -x 단순 인증 - X authzid SASL 권한 식별 식별자("dn:<dn>" 또는 "u:<user>") -y 파일 파일에서 비밀번호 읽기 -Y 메크 SASL 메커니즘 -Z TLS 요청 시작 (-ZZ로 응답 성공 요청) 명령어는 다음과 같습니다:
쿼리 결과는 다음과 같습니다:
모든 사용자 쿼리:
LDAP 명사 설명
객체클래스
LDAP 객체 클래스는 LDAP에 내장된 데이터 모델입니다. 각 objectClass는 고유한 데이터 구조를 가지고 있습니다. 예를 들어, "Phone Book"이라는 objectClass가 있는데, 이름(uid), ID 번호(uidNumber), 유닛명(gid), 홈 주소(homeDirectory) 등 많은 내장 속성을 가지고 있습니다. 동시에 "Classmate Record"라는 objectClass도 있는데, 여기에는 "전화번호부"가 있습니다 일부 속성(예: uid, homeDirectory)은 "전화번호부"에 없는 속성(예: 설명 등)을 가질 수도 있습니다.
입국
항목은 항목이라고 부를 수 있으며, 항목은 레코드, LDAP의 기본 저장 장치입니다; 또한 DN과 속성 집합의 집합으로 생각할 수도 있습니다. 한 항목이 여러 objectClasses를 포함할 수 있다는 점에 유의하세요. 예를 들어, zhang3는 "전화번호부"나 "Classmate Record"에 동시에 존재할 수 있습니다.
DN
명칭(Distinguished Name), LDAP에서 유일한 명칭, 완전한 DN 철자: uid=zhang3, ou=People, dc=163, dc=com. LDAP 서버에서는 오직 해당 항목만이 고유합니다.
LDAP 검색 필터
필터를 사용해 LDAP를 검색하세요. 필터는 일반적으로 (attribute=value)와 같은 단위로 구성됩니다. 예를 들어: (&(uid=ZHANGSAN)(objectclass=person))는 검색 사용자의 LDAP 항목이 ZHANGSAN임을 나타냅니다. 또 다른 예로는 (&(|( uid= ZHANGSAN(uid=LISI))(objectclass=person)), 이는 검색 ID를 가진 사용자를 검색하는 것이 ZHANGSAN, 또는 LISI임을 나타냅니다; *를 사용해 (uid=ZHANG*SAN)과 같은 값을 나타내고, ZHANG으로 시작해 SAN으로 끝나는 uid 값을 가진 항목을 검색할 수도 있습니다. 또한, 다양한 LDAP 속성 매칭 규칙에 따라, 다음과 같은 필터가 있을 수 있습니다: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)), 이는 검색 생성 시간이 20050301000000에서 20050302000000 사이임을 나타냅니다.
필터에서 "&"는 "그리고"를 의미하며; “!” "아니다"라는 뜻이다; “|” "또는 "또는 "라는 뜻입니다. 매칭 규칙에 따라 "=", "~=", ">=", "<="를 사용할 수 있습니다.
기본 DN
기본 DN은 "dc=163,dc=com" 또는 "dc=People,dc=163,dc=com"일 수 있습니다. LDAP는 트리 구조이기 때문에, 베이스드를 지정한 후 검색은 BaseDN에서 시작되며, 검색 범위를 다음과 같이 지정할 수 있습니다: 오직 검색 베이스드(베이스), 베이스드 직접 하위 레벨(1레벨), 그리고 모든 하위 트리 레벨을 베이스드합니다.
objectClass
LDAP에서는 항목이 objectClass 속성을 포함하고 최소 하나의 값을 할당해야 합니다. 각 값은 LDAP 항목에서 데이터 저장 템플릿으로 사용됩니다; 템플릿에는 항목에 할당해야 하는 속성과 선택적 속성이 포함되어 있습니다. objectClass는 엄격한 계층 구조를 가지며, 최상단과 별칭이 최상단에 위치합니다. 예를 들어, organizationalPerson의 objectClass는 person에 종속하며, person은 top에 종속합니다.
objectClass는 다음 3가지 범주로 나눌 수 있습니다: 구조적 요소: 예를 들어 인물 및 조직 단위; 보조 용어: 예를 들어 extensibeObject; 추상: 예를 들어, 추상 objectClass는 직접 사용할 수 없습니다. OpenLDAP 스키마에는 많은 objectClasses가 정의되어 있으며, 아래에 일반적으로 사용되는 objectClass의 이름이 나열되어 있습니다.
- 계정
- 별명
- DCOBJECT
- 도메인
- ipHost
- 조직
- 조직 역할
- 조직 단위
- 인물
- 조직인물
- inetOrgPerson
- 거주자인물
- posixAccount
- 포식스 그룹
ObjectClass는 속성들의 집합이며, LDAP는 인간 조직에서 흔히 볼 수 있는 많은 객체를 캡슐화하여 객체 클래스로 캡슐화합니다. 예를 들어, 인사는 성(sn), 이름(cn), 전화번호(phoneNumber), 비밀번호(userPassword) 및 기타 속성을 포함하며, organizationalPerson은 위의 속성 외에도 직함, 우편번호(postalCode), 우편 주소(postalAddress)를 포함합니다 그리고 기타 특성들.
아이템 유형은 객체 클래스를 통해 쉽게 정의할 수 있습니다. 각 항목은 여러 객체 클래스를 직접 상속할 수 있으며, 이들은 다양한 속성을 물려받습니다. 동일한 속성을 가진 객체 클래스가 2개라면, 항목이 상속된 후 단 하나의 속성만 유지됩니다. 객체 클래스는 또한 어떤 속성이 기본 정보이며 반드시 포함되어야 하는(필수 필수) 속성, 어떤 속성이 확장 정보이며 포함할 수 있는지(May, Optional)를 지정합니다.
객체 클래스에는 세 가지 유형이 있습니다: 구조적, 추상적, 보조적입니다. 구조 타입은 객체 본체의 기본 속성을 지정하는 가장 기본적인 타입이며, 각 항목은 오직 하나의 구조적 객체 클래스에만 속합니다. 추상 타입은 구조적 타입일 수도 있고, 객체 속성의 공통 부분을 함께 조직하는 추상 타입 부모일 수도 있으며, 이는 다른 클래스의 템플릿이라고 불리며, 항목은 추상 객체 클래스를 직접 통합할 수 없습니다. 보조 타입은 객체 엔티티의 확장 속성을 지정합니다. 각 막대는 하나의 구조적 객체 클래스에만 속하지만, 동시에 여러 보조 객체 클래스에 속할 수 있습니다.
객체 클래스 자체는 서로 상속할 수 있으므로, 객체 클래스의 루트 클래스는 최상위 추상 객체 클래스입니다. 일반적으로 사용되는 유형의 사람들을 예로 들면, 그들의 상속 관계는 그림과 같습니다:
accout의 내장 속성은 다음과 같습니다: userid, description, host, localityName, organizationName, organizationalUnitName, seeAlso;
inetOrgPerson의 내장 속성은 cn, sn, description, seeAlso, phoneNumber, userPassword, destinationIndicator, facsimileTelephoneNumber, internationaliSDNNumber, l, ou, physicalDelivery OfficeName, postOfficeBox, postalAddress, postalCode, preferredDeliveryMethod, registeredAddress, st, street, telephoneNumber, teletexTerminalIdentifier, telexNumber, title, x121Address, audio, useinessCategory, carLicense, departmentNumber, isplayName, employeeNumber, employeeType, givenName, homePhone, homePostalAddress, 이니셜, jpegPhoto, labeledURI, mail, manager, mobile, o, pager, photo, preferredLanguage, roomNumber, secretary, uid, userCertificate 등;
보시다시피, accout은 필수적이고 유용한 몇 가지 속성만 미리 설정해 두는데(로그인 인증을 완료하기에 충분합니다), inetOrgPerson은 전화번호, 휴대폰 번호, 거리 주소, 이메일 번호, 이메일 주소, 방 번호, 아바타, 매니저, 직원 번호 등 많은 내장 속성을 가지고 있습니다.
따라서 LDAP 설정 시 로그인 확인 목적이라면 objectClass 유형을 accout으로 설정하고, 방대한 직원 정보를 만들고 싶다면 objectClass를 inetOrgPerson로 설정하는 것이 권장됩니다
여기서는 보통 'inetOrgPerson', 'posixAccount', 'shadowAccount'를 사용합니다.
계정의 필수 속성은 userid이고, posixAccount의 필수 속성은 cn, gidNumber, homeDirectory, uid, uidNumber입니다; shadowAccount의 필수 속성은 uid이며, 선택 속성으로는 shadowExpire, shadowInactive, shadowMax, shadowMin, userPassword 등이 있습니다. 가장 중요한 속성은 objectClass입니다(top과 다른 objectClass들은 상속된 관계임을 알 수 있습니다).
속성
속성은 프로그래밍의 변수와 유사하며 할당할 수 있습니다. 많은 일반적으로 사용되는 속성들은 OpenLDAP에서 선언되며(사용자는 자신만의 속성을 정의할 수도 있습니다). 공통 속성의 의미는 다음과 같습니다:
- c: 컨트리.
- cn: common name은 객체의 이름을 가리킵니다. 사람을 가리킨다면 그 사람의 전체 이름을 사용해야 합니다.
- DC:도메인 컴포넌트는 도메인 이름의 일부를 가리키는 데 자주 사용됩니다.
- 기븐네임: 성씨가 아니라 사람의 이름을 가리킵니다.
- l: 도시나 다른 지리적 지역의 이름과 같은 지명을 가리킵니다.
- 우편: 이메일 주소.
- o:organizationName은 조직의 이름을 의미합니다.
- ou:organizationalUnitName은 조직 단위의 이름을 의미합니다.
- SN: 성씨는 사람의 성을 가리킵니다.
- 전화번호: 해당 국가의 코드를 포함해야 하는 전화번호입니다.
팁: objectClass는 자신뿐만 아니라 다른 사용된 속성들도 포함하는 특별한 속성입니다.
서로 다른 objectClasses에는 보통 필요한 속성 값과 선택적 속성 값이 있습니다. 예를 들어, objectClass를 사용하여 시스템 내 사용자 항목을 표현할 수 있으며, 시스템 내 사용자는 보통 이름, 전화번호, 비밀번호, 설명 등과 같은 정보를 가지고 있어야 합니다. 아래 이미지에서 볼 수 있듯이, person의 경우 필수인 cn과 sn으로 사용자의 이름과 성을 설정하세요. 다른 속성은 선택 사항입니다.
다음은 일반적으로 사용되는 objectClass 요구사항 목록입니다.
- account:userid.
- organization:o.
- 인물: CN과 SN.
- organizationalPerson: 사람과 동일합니다.
- organizationalRole:cn.
- organizationUnit:ou.
- posixGroup:cn、gidNumber.
- posixAccount:cn, gidNumber, homeDirectory, uid, uidNumber.
(끝)
|