$PATH
OpenLDAP 사용자(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
구조 필드.
그러나 "클라이언트에 아무것도 없음" 요구 사항을 충족할 수는 없지만 몇 가지 해결 방법이 있을 수 있습니다.
pam_exec
또는 를 사용pam_script
하면 로그인의 하위 프로세스로 실행되므로 환경 변경에 직접적인 영향을 미칠 수는 없지만 일부 스크립트를 작성하여PATH
항상 해당 항목이나 끝에.profile
(강건성 요구 사항에 따라) 올바른 내용이 표시되도록 할 수 있습니다./etc/profile
LDAP에서 사용자 속성을 가져온 다음 적절하게 설정하는 데 사용됩니다 ( 이를 덮어쓰는 것을 방지하는 것이 까다로울PATH
수도 있음 )..profile
변수가 앞에 붙은 속성의
pam_unix
남용을 허용하고 지원하도록 수정되었습니다 (예: PADL, AFAICT에는 적용되지 않음).loginShell
PATH=/opt/thing/bin /bin/bash
수정됨
pam_umask
, Linux PAMpam_umask
은추가 정보 처리"umask=nnnn,ulimit=nnnn"과 같은 gecos 필드에서 여기에는 몇 가지 선례가 있습니다.pam_ldap
LDAP 속성을 PAM "데이터"로 저장하도록 수정합니다 .pam_set_data()
, 그런 다음pam_get_data()
다른 PAM 모듈에서 이를 처리하는 데 사용됩니다(오래 전에 이 작업을 수행했습니다. 제 경우에는 LDAP 속성의 세부 정보를 사용하여 SQL 사용자 데이터베이스에서 요청 시 사용자를 생성하는 것이었습니다).pam_env
여기 좋은 후보가 있어요.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의 폭넓은 답변에 감사드립니다.