TLS 없이 플레이그라운드에서 sssd 사용
sssd
은 모든 Linux 배포판의 Linux 서버에서 LDAP 또는 Active Directory를 통해 시스템 계정을 프로비저닝하는 가장 일반적인 방법으로 자리 잡았습니다. 그러나 작업이 까다로울 수 있습니다!TL;DR;
sssd
를 사용하여 포트 389(일반 텍스트/TLS 없음)에서 수신 대기 중인 LDAP 서버에 연결하는 예를 보여줍니다. 이것은 어떤 프로덕션 환경에서도 좋은 생각이 아닙니다. 그러나 놀이터, 학습 또는 기타 실험에서 중요하고 도움이 될 수 있습니다. 매직 구성은 ldap_auth_disable_tls_never_use_in_production = true
입니다.왜
일반 텍스트로 수신하는 LDAP 서버를 세우는 것은 매우 간단합니다. 내가 가장 좋아하는 메커니즘은
openldap
container , although there are other options 을 사용하는 것입니다.docker run -it --rm -p 389:389 osixia/openldap:latest
그러나 실행 중인 장난감 Linux 컨테이너가 있는 경우
sssd
불행히도 이것은 확실한 옵션이 아닙니다! 왜요? 이것은 모두 개발자 놀이터일 뿐입니다!? 오른쪽. sssd
유지 관리자는 보안 취약성을 생성하거나 사용자가 해킹당하지 않도록 매우 주의하기를 원합니다. 이것은 놀이터에서 이러한 유형의 취약성에 자신을 개방하기 위해 열심히 노력해야 함을 의미합니다.특히
ldap_auth_disable_tls_never_use_in_production
설정을 사용합니다.NOTE: Do not use this setting in any "real" environment with "real" users, passwords, sensitive data, etc.
한번 해보세요
사용자 만들기
먼저 LDAP 서버를 만들고 채워야 합니다. 계속해서 그렇게 합시다. 먼저 사용자로 파일을 만드는 것이 가장 쉽습니다. 고급 LDIF 파일은 다음을 확인하십시오the repository associated with this post.
사용자.ldif
version: 1
## Entry 1: dc=angl,dc=dev
#dn: dc=angl,dc=dev
#dc: angl
#o: Angl Dev
#objectclass: top
#objectclass: dcObject
#objectclass: organization
#
## Entry 2: cn=admin,dc=angl,dc=dev
#dn: cn=admin,dc=angl,dc=dev
#cn: admin
#description: LDAP administrator
#objectclass: simpleSecurityObject
#objectclass: organizationalRole
#userpassword: {SSHA}+FquX8RcwTtBPo7mu2pgSvjaQYX9HpCL
#
#
# Entry 3: cn=engineering_group,dc=angl,dc=dev
dn: cn=engineering_group,dc=angl,dc=dev
cn: engineering_group
gidnumber: 500
memberuid: joe
memberuid: julie
objectclass: posixGroup
objectclass: top
# Entry 4: dc=engineering,dc=angl,dc=dev
dn: dc=engineering,dc=angl,dc=dev
dc: engineering
description: The Engineering Department
o: Engineering
objectclass: dcObject
objectclass: organization
objectclass: top
# Entry 5: cn=joe,dc=engineering,dc=angl,dc=dev
dn: cn=joe,dc=engineering,dc=angl,dc=dev
cn: joe
gidnumber: 500
givenname: Joe
homedirectory: /home/joe
loginshell: /bin/sh
mail: [email protected]
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Golly
uid: joe
uidnumber: 1000
userpassword: {MD5}j/MkifkvM0FmlL6P3C1MIg==
# Entry 9: cn=julie,dc=engineering,dc=angl,dc=dev
dn: cn=julie,dc=engineering,dc=angl,dc=dev
cn: julie
gidnumber: 500
givenname: Julie
homedirectory: /home/julie
loginshell: /bin/sh
mail: [email protected]
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: Jolly
uid: julie
uidnumber: 1001
userpassword: {MD5}FvEvXoN54ivpleUF6/wbhA==
처음 두 항목이 주석 처리되어 있음을 알 수 있습니다. 완전한 LDIF 파일을 나타내기 위해 포함됩니다. 그러나
osixia/docker-openldap
컨테이너는 이를 자동으로 프로비저닝하여 도움을 줍니다.또한 비밀번호가 포함되어 있음을 알 수 있습니다. 이것은 우리의 플레이그라운드를 더 쉽게 만들어주지만, 실생활/프로덕션 애플리케이션에서는 확실히 나쁜 생각입니다.
LDAP 서버 만들기
이제 서버 자체를 만들어 봅시다!
docker network create playground-network
docker run \
-d --name openldap --rm \
-p 389:389 \
--network playground-network \
-v $(pwd)/users.ldif:/container/service/slapd/assets/config/bootstrap/ldif/50-bootstrap.ldif \
-e LDAP_TLS=false \
-e LDAP_DOMAIN="angl.dev" \
-e LDAP_ADMIN_PASSWORD="admin" \
osixia/openldap:1.5.0 \
--copy-service --loglevel debug
그리고 잘 작동하는지 확인
docker exec -it openldap ldapsearch -D cn=admin,dc=angl,dc=dev -b dc=angl,dc=dev -w admin cn
docker exec -it openldap ldapsearch -D cn=admin,dc=angl,dc=dev -b dc=angl,dc=dev -w admin cn=julie \*
주의 깊게 살펴보면 다음을 알 수 있습니다.
ldif
파일이것들은 당신이 익숙하지 않다면 파헤쳐 볼 수 있는 유용한 정보입니다!
SSD 서버 구성
상당히 바닐라
sssd
컨테이너에서 실행ubuntu:jammy
이 가능합니다.docker run -it --name sssd --rm --network playground-network ubuntu:jammy bash
apt update && apt install -y sssd ldap-utils vim
그런 다음
sssd.conf
파일을 만들어야 합니다. 매직 옵션ldap_auth_disable_tls_never_use_in_production=true
을 확인하십시오. 이것은 우리를 위해 일하게 만드는 마법이 될 것입니다!cat << EOF > /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam
domains = LDAP
[nss]
filter_users = root,named,avahi,haldaemon,dbus,radiusd,news,nscd
filter_groups =
[pam]
[domain/LDAP]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
sudo_provider = ldap
enumerate = true
# ignore_group_members = true
cache_credentials = false
ldap_schema = rfc2307
ldap_uri = ldap://openldap:389
ldap_search_base = dc=angl,dc=dev
ldap_user_search_base = dc=angl,dc=dev
ldap_user_object_class = posixAccount
ldap_user_name = uid
ldap_group_search_base = dc=angl,dc=dev
ldap_group_object_class = posixGroup
ldap_group_name = cn
ldap_id_use_start_tls = false
ldap_tls_reqcert = never
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
ldap_default_bind_dn = cn=admin,dc=angl,dc=dev
ldap_default_authtok = admin
access_provider = ldap
ldap_access_filter = (objectClass=posixAccount)
min_id = 1
max_id = 0
ldap_user_uuid = entryUUID
ldap_user_shell = loginShell
ldap_user_home_directory = homeDirectory
ldap_user_uid_number = uidNumber
ldap_user_gid_number = gidNumber
ldap_group_gid_number = gidNumber
ldap_group_uuid = entryUUID
ldap_group_member = memberUid
ldap_auth_disable_tls_never_use_in_production = true
use_fully_qualified_names = false
ldap_access_order = filter
debug_level=6
EOF
chmod 600 /etc/sssd/sssd.conf
이제
sssd
서비스를 시작하겠습니다.sssd -i
# should see some log messages that suggest things are happening!
작동하는지 확인하십시오!
이제
jammy
컨테이너에서 다른 셸을 시작하여 이것이 작동하는지 확인하겠습니다.docker exec -it sssd bash
id joe
# uid=1000(joe) gid=500(engineering_group) groups=500(engineering_group)
id julie
# uid=1001(julie) gid=500(engineering_group) groups=500(engineering_group)
docker-compose 사용
이와 같은 놀이터 환경의 경우
docker-compose
를 사용하면 이 설정을 훨씬 쉽게 설계하고 재사용할 수 있습니다. 원하는 경우 위 대신 my example compose setup을 사용할 수 있습니다.cd compose/
docker network create playground-network
NETWORK=playground-network docker-compose -f ldap.yml -f sssd.yml -f network.yml up -d
docker exec -it compose_sssd_1 bash
sssd -i >/tmp/sssd.log 2>&1 &
id joe
검토
잘했어요! 자체 컨테이너
sssd
를 성공적으로 시작했습니다. 이것은 매우 장난감에 불과하지만 sssd
가 어떻게 작동하는지 더 자세히 배우고 이해하는 훌륭한 "출발점"입니다!sssd
용 장난감 LDAP 서버가 필요할 때마다 ldap_auth_disable_tls_never_use_in_production = true
를 기억하십시오.
Reference
이 문제에 관하여(TLS 없이 플레이그라운드에서 sssd 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/colearendt/using-sssd-in-a-playground-without-tls-1590텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)