$PATH를 OpenLDAP 속성으로 설정

$PATH를 OpenLDAP 속성으로 설정

$PATHOpenLDAP 사용자(CentOS6/7)를 위해 이것을 설정 해야 합니다 . LDAP .profile.bashrc클라이언트 시스템이 아니라 LDAP 서버의 LDAP 속성이므로 사용자가 호스트에 로그인할 때마다 설정됩니다 ssh. 클라이언트 측에는 아무것도 없고 단지 LDAP 서버만 있습니다. 가능합니까? 어떻게 하나요?

답변1

LDAP 디렉토리만가게LDAP 클라이언트 계층이 필요한 데이터(예 pam_ldap:)하다그것과 관련이 있습니다. NetWare/ActiveDirectory와 달리 로그인 스크립트를 디렉터리의 사용자 속성으로 갖는 것은 다른 환경에서는 표준이 아니며 그러한 스크립트에 대한 [경로]를 저장하는 표준 속성이 없습니다( labelledURI후보임에도 불구하고).

PAM+NSS를 사용하면 LDAP를 가리킬 수 있는 몇 가지 "데이터베이스"만 지원됩니다(비밀번호, 그룹 등은 참조).nsswitch.conf(5)) 그들 중 누구도 이것을 더 쉽게 만들지 않습니다.

어느 것도 아니다PADLpam_ldap...도 아니다nss-pam-ldap기본 속성 작성 외에도 유연한 유형의 LDAP 속성 처리가 제공됩니다.getpwent() password구조 필드.

그러나 "클라이언트에 아무것도 없음" 요구 사항을 충족할 수는 없지만 몇 가지 해결 방법이 있을 수 있습니다.

  1. pam_exec또는 를 사용 pam_script하면 로그인의 하위 프로세스로 실행되므로 환경 변경에 직접적인 영향을 미칠 수는 없지만 일부 스크립트를 작성하여 PATH항상 해당 항목이나 끝에 .profile(강건성 요구 사항에 따라) 올바른 내용이 표시되도록 할 수 있습니다.

  2. /etc/profileLDAP에서 사용자 속성을 가져온 다음 적절하게 설정하는 데 사용됩니다 ( 이를 덮어쓰는 것을 방지하는 것이 까다로울 PATH수도 있음 )..profile

  3. 변수가 앞에 붙은 속성의 pam_unix남용을 허용하고 지원하도록 수정되었습니다 (예: PADL, AFAICT에는 적용되지 않음).loginShellPATH=/opt/thing/bin /bin/bash

  4. 수정됨 pam_umask, Linux PAM pam_umask추가 정보 처리"umask=nnnn,ulimit=nnnn"과 같은 gecos 필드에서 여기에는 몇 가지 선례가 있습니다.

  5. pam_ldapLDAP 속성을 PAM "데이터"로 저장하도록 수정합니다 .pam_set_data(), 그런 다음 pam_get_data()다른 PAM 모듈에서 이를 처리하는 데 사용됩니다(오래 전에 이 작업을 수행했습니다. 제 경우에는 LDAP 속성의 세부 정보를 사용하여 SQL 사용자 데이터베이스에서 요청 시 사용자를 생성하는 것이었습니다). pam_env여기 좋은 후보가 있어요.

  6. PAM "프로젝트"는 비슷한 개념을 가지고 있습니다(pam_set_item()/ pam_get_item()) 작은 데이터 항목 집합의 경우(PAM 데이터의 이전 개념은 임의의 이름/값 데이터에 대한 것임)pam_env지원하다@{PAM_itemname}환경 값을 설정하려면 다음 구문을 사용하십시오.가능한와 같은 항목을 남용하는 능력 PAM_XDISPLAY. pam_ldap이미 설정된 프로젝트가 있으므로 이것이 아마도 가장 간단한 코드 변경일 것입니다.

(명확하게 말하면 "수정"은 "소스 변경"을 의미하므로 이러한 솔루션에는 클라이언트에서 구성 및 바이너리 배포가 필요합니다.)

다음은 처음 두 옵션과 함께 작동하는 (강력한) bash 예제입니다.

 while read line; do
     [[ "$line" =~ ^description:\ setenv\ ([a-zA-Z_][a-zA-Z0-9_]+)=(.*) ]] && {
         export "${BASH_REMATCH[1]}"="${BASH_REMATCH[2]}"
     }
 done < <(ldapsearch -LLL -o ldif-wrap=no -H ldap://ldap0/ -b ${LDAPBASE} \
    -s sub "(&(objectClass=posixAccount)(uid=${USER}))" description

다음 형식으로 각 사용자에 대해 하나 이상의 "설명" 속성이 제공됩니다.

setenv MYVAR=MYVALUE

여기서는 설명 속성을 설명이 아닌 데이터로 채우는 모호한 방법을 사용합니다. 이는 다중 값 속성에 최대 1024자를 저장하는 편리한 방법입니다. ldapsearch이는 값/유형이 Base64로 인코딩된 출력이 되는 경우 사용하는 데 문제가 있을 수 있는 간단한 접근 방식입니다 .

답변2

내가 원하는 방식은 아니었지만 문제가 해결되었습니다. puppet을 사용하여 내보내기 PATH=$PATH:/xxxxxxxx 지시어가 포함된 .profile 파일을 채웁니다. ldap 항목 "shell=\bin\bash"를 제거하면 PATH 변수가 올바르게 설정됩니다.

이 질문에 대해 더 깊이 탐구하게 되어 기쁩니다. Mr. Spartik의 폭넓은 답변에 감사드립니다.

관련 정보