자격 증명을 사용하여 LDAP에서 계정으로 실행되도록 서비스 설정

자격 증명을 사용하여 LDAP에서 계정으로 실행되도록 서비스 설정

나는 명백한 것을 간과하고 있는 것처럼 느낀다.

내 목표systemd 서비스는 시스템 시작 시 LDAP 서비스 계정을 사용하여 실행됩니다. 이렇게 하면 LDAP에서 계정을 비활성화하면 다음에 서비스를 시작하려고 할 때 사용자가 인증되지 않았기 때문에 실패하게 됩니다. (결국 이 서비스에서 티켓을 사용하려면 Kerberos를 설정해야 하는데 아직까지 설정하지 않았는데 그게 전체적인 문제일 수 있습니다.)

사용자 로그인을 제어하는 ​​데 사용하는 작동하는 LDAP가 있으므로 내 사용자가 내 사용자이고 cn=cbrand,ou=people,dc=jcolebrand,dc=info네트워크에 연결된 컴퓨터에서 해당 사용자로 로그인할 수 있습니다. LDAP를 통해 sudoer를 설정했기 때문에 나와 시스템의 다른 사용자가 로그인하여 sudo 명령을 실행할 수 있지만 로그인 권한이 있는 다른 사람은 sudo 명령을 실행할 수 없습니다. LDAP를 사용하여 내 서버의 다양한 응용 프로그램에 인증하는 다른 사용자가 있습니다(따라서 시스템 로그인 권한은 없지만 비밀번호가 있는 기본 계정은 있음).

시스템의 독자/작성자/수퍼유저를 처리하도록 ldap2pg를 설정했으며 이를 사용하여 LDAP 인스턴스에 연결된 네트워크에서 실행되는 서비스에 대한 액세스를 제한하고 싶습니다.

일부 서비스 서비스에 대해 LDAP에서 계정을 정의할 수 있기를 원합니다(그래서 cn=gogs,ou=services,dc=jcolebrand,dc=info또는 같은 것을 기대했습니다 cn=jellyfin,ou=services,dc=jcolebrand,dc=info). 내가 원하는 것피하다수행해야 할 작업은 서버별로 관리해야 하므로 실행할 로컬 사용자/그룹을 수동으로 생성해야 한다는 것입니다. 대신 ldap2pg를 사용하여 데이터베이스 액세스를 취소하거나 LDAP를 사용하여 디렉터리 수준에서 로그인/액세스를 거부할 수 있기를 원합니다.

로컬 계정을 생성하려면 해당 User=지시어를 사용하도록 서비스 대상을 수정하면 되지만 이는 LDAP에 연결하는 데 적합하지 않은 것 같습니다. 특히 암호를 강제로 적용하려는 경우(암호를 회전하려면 일부 자동화가 필요할 수 있음) 비밀번호 서비스 계정은 또 다른 이야기인 것 같지만 아닐 수도 있습니다. 제가 이것에 대해 충분히 알지 못하고 "명백한" 것을 간과하고 있는지 궁금합니다.

부분 구성 조각으로 도움이 된다면 다음을 수행하십시오.

cat /etc/openldap/ldap.conf
<snip>
BASE dc=jcolebrand,dc=info
<snip>

이것이 Windows Active Directory 도메인이라면 gMSA 계정을 사용하면 원활할 것입니다. 또는 디렉토리에 비밀번호를 사용하여 범용 서비스 계정을 생성할 수도 있지만 Fedora/Linux에서 이 작업을 수행하는 방법을 모르겠습니다. . 특히 Windows 세계에서 이 단계를 복제하는 방법을 모르겠습니다.

Windows -> services.msc 열기 -> 서비스 찾기 -> 속성으로 이동 -> 필요에 따라 보안 탭에서 사용자 자격 증명을 gMSA 또는 계정/비밀번호로 설정합니다.

systemd 문서를 보면 LoadCredential에 대한 문서가 있지만 LDAP 계정으로 실행하기 위한 암호를 제공하는 데는 적합하지 않은 것 같습니다(문서가 작성된 방식).

비밀번호 없는 LDAP 항목을 갖고 objectClass applicationProcess서비스 구성을 설정한 User="cn=gogs,ou=services,dc=jcolebrand,dc=info"다음 추가 생각을 중단해야 한다고 지나치게 생각하고 있습니까?

참고: 궁극적으로 동일한 서비스가 동일한 정보를 사용하여 postgres와 통신하기를 원하지만, 이를 위해서는 systemd 서비스를 사용하여 구성할 수 있는 적절한 연결 문자열과 환경 파일만 필요할 수 있습니다. 이에 대한 안내도 환영합니다.

답변1

Linux 시스템 사용자(LDAP에 하나)를 생성 objectClass: posixAccount하고 간단히 systemd 장치 파일을 다음과 같이 설정합니다.User=< uid value from the LDAP record

PAM이 올바르게 구성되면 systemd가 실행 가능한 프로세스를 생성할 수 있는 uid 및 linux 사용자 이름이 채워져야 합니다. 그럼에도 불구하고 커널이 프로세스를 추적하려면 메인 ch에 Linux UID가 있는 서비스 사용자가 필요하므로 사용을 피할 수 없을 것 같습니다.objectClass: posixAccount

LDAP 레코드는 다음과 같습니다.

dn: cn=gogs,ou=services,dc=jcolebrand,dc=info
objectClass: posixAccount
uid: gogs
cn: gogs
loginShell: /bin/nologin
uidNumber: 9999
gidNumber: 9999
homeDirectory: /path/to/gogs/install
description: gogs service user

믿다objectClass applicationProcess원하는 경우 이 항목에 추가할 수도 있습니다.

그런 다음 gogs systemd 장치를 직접 편집하거나 재정의(EG 포함 sudo systemctl edit gogs.service)를 만들고 다음을 추가할 수 있습니다.

[Service]
User=gogs

( systemd 장치에서 사용할 objectClass: posixGroup수 있는 gogs에 대한 항목이 필요할 수도 있습니다)Group=gogs

귀하의 질문 중 다음 부분이 혼란스럽습니다.

User= 지시어를 사용하도록 서비스 대상을 수정하세요. 하지만 이는 특히 비밀번호를 강제하려는 경우 LDAP에 연결하는 데 올바르지 않은 것 같습니다.

그리고

systemd 문서를 보면 LoadCredential 문서가 보이지만 LDAP 계정으로 실행할 비밀번호를 제공하는 데는 적합하지 않은 것 같습니다.

Linux에서 서비스 계정은 일반적으로가지다내 경험상 비밀번호. 그들은 단지 단일 사용자이며 서비스 프로세스는 해당 사용자로 실행됩니다. 데이터베이스 인증은 비밀번호 문자열(LDAP 배포를 사용할 수 있음) 또는 Kerberos를 통해(어쩌면? 서비스가 티켓을 어떻게 받는지 잘 모르겠습니다) 사용하여 수행할 수 있지만 서비스 POSIX 계정에는 비밀번호가 없습니다. 하나는 로그인되어 있습니다.

관련 정보