레이블이 ldap인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ldap인 게시물을 표시합니다. 모든 게시물 표시

ldap 조회

# LDAP(Lightweight Directory Access Protocol) 디렉토리 구조로 데이터를
# 관리하는 프로토콜로 회사와 같은 조직의 사용자 정보(이름, 메일, 주소등) 조회에 많이 사용된다.

# ldap 은 디렉토리(트리) 구조에 각 노드를 의미하는 아래와 같은 요소들 조합으로
# DN(distinguished name)을 구성해 사용자를 식별한다.

# 전통적인 조직 구조로 디렉토리를 구성한 경우
예) korea 나라에 aaa 회사에 programmer 부서에 다니는 ysoftman 사용자는
c(country, 보통 DN 구성에서 빠진다.) -> korea
o(ogranisation) -> aaa
ou(ogranisation unit) -> programmer
cn(common name, 사람과 같은 개인적인 요소를 나타낸다.) -> ysoftman
sn(surname 성을 사용할 수 있는 경우) -> yoon
"cn=ysoftman,ou=programmer,o=aaa"

# 인터넷 스타일로 디렉토리를 구성한 경우
예) aaa.com 도메인(회사)에 programmer 부서에 다니는 ysoftman 사용자는
dc(domain component) -> com
dc(domain component) -> aaa
ou(ogranisation unit) -> programmer
uid(user id) -> ysoftman
다음과 같이 DN 을 만들 수 있다.
"uid=ysoftman,ou=programmer,dc=aaa,dc=com"

# ldap 조회하기
# ldapsearch 설치 - centos
sudo yum install openldap-clients

# ldapsearch 설치 - mac
brew install openldap

# 이제 ldapsearch 툴로 조회할 수 있다.
# -x : simple authentication
# -h : ldaphost
# -p : ldapport
# -D : binddn (DN 명시)
# -w : Use passwd as the password for simple authentication.
# 최상단 기준으로 조회돼서 결과가 많이 나온다.
ldapsearch -x -h ldap.aaa.com -p 389 -D "cn=ysoftman,ou=programmer,o=aaa" -w passwd123

# 조회 시작 위치를 정하면 결과 범위를 줄일 수 있다.
# -b : searchbase
ldapsearch -x -h ldap.aaa.com -p 389 -D "cn=ysoftman,ou=programmer,o=aaa" -w passwd123 -b "cn=programmer"

# 이외에도 ldappasswd, ldapadd, ldapdelete 등의 명령이 있다.

# 참고

jenkins ldap 로그인 에러

# jenkins ldap 로그인이 안되거나 몇번씩 로그인을 시도해야 하는 경우가 발생한다.
# /var/log/jenkins/jenkins.log 또는
# http://ysoftman-jenkins/log/all 에서 로그인을 보면 ldap 인증에러가 발생했다.
org.acegisecurity.AuthenticationServiceException: LdapCallback;
ldap.ysoftman.com:389; socket closed; nested exception is javax.naming.ServiceUnavailableException: ldap.ysoftman.com:389; socket closed; remaining name '';

# 클라이언트(젠킨스)가 ldap 서버의 타임아웃에 비해 너무 길어서 생긴 이슈로 보이며,
# 젠킨스의 ldap 커넥션 풀 크기와 타임아웃을 작게 주도록 한다.
https://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html

# 위 설명을 자세히 보면 java system properties 로 설정해야 된다고 나온다.
# 젠킨스 설정 파일에 다음과 같이 설정한다.

# ubuntu
sudo vi /etc/default/jenkins
# 또는
# centos
sudo vi /etc/sysconfig/jenkins
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.prefsize=10 -Dcom.sun.jndi.ldap.connect.pool.timeout=5000"

# jenkins 관리 -> "끄기전 준비" 를 켜서 잡이 실행되는 것을 막는다.
# 이제 jenkins 서버에 접속해 jenkins 서비스를 재시작하면 옵션이 적용된다.
sudo systemctl restart jenkins

# 옵션이 적용 확인
ps -ef | grep jenkins