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 파일
  • 에서 사용자를 프로비저닝했습니다.
  • 서비스에서 TLS를 비활성화했습니다
  • .
  • 디버깅을 위해 로깅 세부 정보를 높였습니다
  • .

    이것들은 당신이 익숙하지 않다면 파헤쳐 볼 수 있는 유용한 정보입니다!

    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를 기억하십시오.

    좋은 웹페이지 즐겨찾기