SAS Studio 의 파일 트리에서 특정 계정만 홈 디렉터리가 다르게 잡히거나, 서버 디렉터리가 보이지 않는다. 예를 들어 sas 계정은 /home/sas 로 나오는데 다른 계정은 / 로 나온다거나, LDAP 설정이 똑같은데 한 계정만 이상하게 동작한다.
문제 계정으로 Compute 세션을 띄운 뒤 파드 안에서 확인한다. 순서를 지키면 원인이 한 단계씩 좁혀진다.
whoami
id
echo $HOME
getent passwd $(whoami)
mount | grep /home
ls -ld /home /home/$(whoami)
| 결과 | 해석 |
|---|---|
getent passwd 가 비어 있다 |
파드 안에서 LDAP 계정이 리눅스 계정으로 해석되지 않는다. SSSD/NSS 가 파드에 적용되지 않은 상태 |
getent passwd 는 나오는데 홈이 / 다 |
LDAP 의 homeDirectory 값 또는 NSS override 문제 |
홈이 /home/<user> 인데 디렉터리가 없다 |
실제 디렉터리 미생성 또는 /home 미마운트 |
| 계정 하나만 이상하다 | UID 충돌 가능성이 가장 높다 |
Viya 이미지에는 sas 라는 로컬 계정이 처음부터 들어 있다.
sas:x:1001:1001::/home/sas:/bin/bash
이 계정은 컨테이너의 /etc/passwd 에 있고 /home/sas 디렉터리도 이미지 안에 존재한다. LDAP 사용자는 SSSD 를 통해 해석되고 홈 디렉터리는 자동으로 만들어지지 않으므로 동작이 다르게 보인다. 이것 자체는 오류가 아니다.
LDAP 엔트리를 복사해서 번호만 바꿔 만든 계정들 중 하나만 문제라면, 그 계정의 uidNumber 가 이미지 로컬 계정과 겹쳤을 가능성이 크다.
sas:x:1001:1001::/home/sas:/bin/bash
viyademo01:x:1001:3000::/home/viyademo01:/bin/bash
viyademo02:x:1002:3000::/home/viyademo02:/bin/bash
sas 와 viyademo01 이 둘 다 UID 1001 이다. 프로세스는 이름이 아니라 숫자 UID 로 실행되고, 시스템이 getpwuid(1001) 로 사용자 정보를 되찾을 때 어느 쪽이 먼저 매칭될지는 조회 순서와 SSSD 캐시에 좌우된다. 그래서 그 계정만 홈 디렉터리가 뒤섞인다.
getent passwd 1001
getent passwd | awk -F: '$3==1001 {print}'
같은 UID 로 두 항목이 나오면 확정이다.
LDAP 에서 충돌한 계정의 uidNumber 를 이미지 로컬 계정과 겹치지 않는 대역으로 바꾼다. 11000번대나 21000번대처럼 여유 있는 대역을 정책으로 잡아 두는 편이 낫다.
chown -R 11001:3000 /home/viyademo01
SSSD 캐시가 남아 있으면 계속 꼬이므로 세션 파드를 다시 띄운다.
kubectl delete pod -n <namespace> -l launcher.sas.com/job-type=compute-server
getent passwd <user>
id <user>
homeDirectory 값이 정상이어도 실제 디렉터리가 없으면 파일 트리가 이상하게 보인다. 컨테이너 환경에서는 로그인 시 자동 생성에 기대기보다 공유 스토리지에 미리 만들어 두는 편이 안정적이다.
mkdir -p /export/home/<user>
chown 11001:3000 /export/home/<user>
chmod 700 /export/home/<user>
그리고 그 공유 경로를 Compute 파드의 /home 으로 마운트한다. /home 이 마운트되지 않았다면 파드 안의 빈 디렉터리일 뿐이다.
mount | grep ' /home '
SAS Studio 가 보여 주는 파일은 물리 서버의 루트 파일시스템이 아니라 Compute 파드 안에서 접근 가능한 파일시스템이다. 노드 로컬 디렉터리는 기본적으로 보이지 않는다. 특정 경로를 보여 주려면 그 경로가 PV 또는 NFS 로 파드에 마운트돼 있어야 한다.