LFCS 사용자 환경·limits·ACL·LDAP 정리
사용자·그룹 도메인의 환경 프로필, 자원 제한, ACL과 LDAP 계정 연동 핵심
local account와 group 기초는 사용자·그룹 핵심 정리를 먼저 본다. 이 문서는 공식 범위의 profile·resource limit·ACL·LDAP client를 다룬다.
작성·검증 상태: AI가 구조화와 설명 초안을 보조했다. profile·limits·ACL은 local manual과 대조했으며, LDAP는 제공된 provider·schema·TLS 정책에 따라 값을 치환해야 하는 client 구성 예시다.
이 영역을 끝내는 순서
개념과 적용 범위 구분
→ 고급 안내형 lab
→ 새 session·실제 user 동작 검증
→ 영문 단계별 실전
LDAP provider 준비는 별도 server 작업이므로 2노드 실습 fixture의 입력 조건을 먼저 확인한다.
LFCS Users and Groups(10%)는 로컬 계정뿐 아니라 환경 프로필, resource limit, ACL, LDAP 계정 연동까지 포함한다. 로컬 계정과 SGID는 사용자·그룹·SGID 핵심 정리에서 먼저 확인한다.
전체 범위
| 공식 competency | 이 문서에서 볼 내용 |
|---|---|
| local user·group account | 기존 문서의 UID·GID·기본/보조 그룹·SGID |
| personal·system-wide environment profile | 로그인·비로그인·대화형 shell과 시작 파일 |
| user resource limit | soft·hard limit, PAM session, systemd 서비스와의 차이 |
| ACL | access ACL, default ACL, mask, mode bit·umask 관계 |
| LDAP user·group account | LDAP 연결, NSS 조회, PAM 인증, SSSD, 홈 생성 |
1. 개인·시스템 환경 프로필
환경 파일을 고르기 전에 어떤 shell이 누구에 의해 어떻게 시작되는지 확인한다.
Bash 시작 파일
| 실행 방식 | 주로 읽는 파일 |
|---|---|
| login shell | /etc/profile 뒤 ~/.bash_profile, ~/.bash_login, ~/.profile 중 첫 파일 |
| interactive non-login shell | ~/.bashrc |
| non-interactive shell | 보통 위 파일을 자동으로 읽지 않으며 BASH_ENV 등의 조건을 확인 |
| systemd service·cron | 로그인 shell 환경과 다를 수 있으므로 unit·예약 설정을 확인 |
배포판의 /etc/profile이 /etc/profile.d/*.sh를 읽는다면 시스템 공통 변수는 목적별 파일로 나누는 편이 관리하기 쉽다.
getent passwd lfcsuser
runuser -l lfcsuser -c 'printf "shell=%s\nPATH=%s\n" "$SHELL" "$PATH"'
bash -lic 'printf "login-interactive: %s\n" "$PATH"'
bash -ic 'printf "interactive: %s\n" "$PATH"'
PATH를 설정할 때 기존 값을 통째로 없애지 않는다.
export EDITOR=vim
export PATH="/opt/tools/bin:$PATH"
반복 적용으로 같은 경로가 계속 늘지 않는지, 빈 항목이나 현재 디렉터리(.)가 의도치 않게 들어가지 않는지도 본다. 수정한 현재 shell에서 source한 결과만 보지 말고 새 로그인 session에서 확인한다.
2. 사용자 resource limit
limit은 프로세스가 사용할 수 있는 파일 descriptor 수, 프로세스 수, core 크기 같은 자원의 범위를 정한다.
- soft limit: 현재 적용값. 프로세스가 hard limit 이하에서 낮추거나 올릴 수 있다.
- hard limit: 일반 사용자가 넘을 수 없는 상한이다.
현재 shell:
ulimit -Sn
ulimit -Hn
ulimit -a
실제 프로세스:
cat /proc/$$/limits
prlimit --pid $$
PAM login session에 영구 적용하는 예:
# /etc/security/limits.d/batch.conf
batch soft nofile 4096
batch hard nofile 8192
중요한 구분:
- 설정 파일을 바꿔도 이미 실행 중인 프로세스에는 소급 적용되지 않는다.
/etc/security/limits.conf와limits.d는 PAM session에서pam_limits가 사용될 때 적용된다.- systemd가 직접 시작한 daemon은 PAM login을 거치지 않을 수 있다. 이 경우 unit의
LimitNOFILE=과systemctl show를 확인한다.
systemctl show example.service -p LimitNOFILE
cat /proc/$(systemctl show -p MainPID --value example.service)/limits
오류 원인이 limit인지 확인하지 않고 값을 크게 올리면 자원 고갈 범위를 키울 수 있다.
3. ACL
ACL은 기존 소유자·그룹·other mode bit를 없애는 기능이 아니다. named user·group entry를 추가하고 mask를 통해 유효 권한을 계산한다.
getfacl /srv/reports
setfacl -m u:analyst:rx /srv/reports
setfacl -m g:auditors:r-x /srv/reports
getfacl /srv/reports
access ACL과 default ACL
- access ACL: 현재 파일·디렉터리에 대한 접근 권한이다.
- default ACL: 디렉터리 아래 새로 생성되는 항목의 초기 ACL에 영향을 준다.
- default ACL은 이미 존재하는 파일을 소급 변경하지 않는다.
setfacl -m d:u:analyst:rx /srv/reports
setfacl -m d:g:auditors:r-x /srv/reports
getfacl /srv/reports
ls -l 끝의 +는 추가 ACL이 있음을 알려줄 뿐 상세 entry와 effective 권한을 모두 보여 주지 않는다. getfacl에서 mask와 #effective: 표시를 확인하고 대상 사용자로 실제 접근을 시험한다.
runuser -u analyst -- test -r /srv/reports/sample && echo readable
백업·복사 도구가 ACL과 extended attribute를 보존하는지도 별도 확인해야 한다.
4. LDAP 사용자·그룹 계정
LDAP 연동은 한 단계가 아니다.
DNS·시간·TLS·포트
→ directory search
→ NSS 계정 조회
→ PAM 인증
→ session과 홈 디렉터리
각 층을 따로 확인한다.
| 층 | 질문 | 대표 확인 |
|---|---|---|
| 연결 | 서버 이름·주소·TLS·포트가 맞는가? | getent hosts, openssl s_client |
| directory | base DN과 filter로 entry를 찾을 수 있는가? | ldapsearch |
| NSS | 시스템 명령에서 사용자·그룹이 보이는가? | getent passwd alice, id alice |
| PAM | 실제 인증과 account policy가 통과하는가? | sssctl user-checks, 새 login |
| session | 홈·shell·환경이 준비되는가? | getent, login 후 pwd, id |
SSSD를 사용하는 일반적인 구성 요소:
/etc/sssd/sssd.conf
nsswitch.conf의 passwd·group 조회 경로
PAM의 인증·account·session 경로
TLS CA trust
/etc/sssd/sssd.conf에는 bind 정보가 포함될 수 있으므로 root 소유와 0600 권한을 유지한다. 설정 후 다음을 분리해 확인한다.
sssctl config-check
systemctl status sssd --no-pager
getent passwd alice
id alice
sssctl user-checks alice
journalctl -u sssd -b --no-pager
ldapsearch 성공은 LDAP 서버 조회가 된다는 뜻이고, getent 성공은 NSS 조회가 된다는 뜻이다. 둘 다 실제 PAM 인증 성공을 보장하지 않는다.
배포판에 따라 통합 도구가 다르다. Rocky/RHEL 계열은 authselect, Debian/Ubuntu 계열은 pam-auth-update와 NSS/PAM 설정을 사용할 수 있다. 정확한 provider, base DN, TLS, schema와 인증 방식은 실습 LDAP 서버의 정보에 맞춘다.
문제 해결 순서
계정이 안 보임
→ DNS·시간·TLS → ldapsearch → sssd.conf 권한·문법 → SSSD 로그 → NSS
계정은 보이지만 로그인 실패
→ PAM 경로 → account policy → 인증 방식 → SSSD/PAM 로그
로그인은 되지만 홈이 없음
→ session 모듈 → mkhomedir 설정 → 홈 상위 경로 권한·SELinux
로컬 관리자 접근 경로를 유지한 채 연동을 시험한다. LDAP 장애가 로컬 복구 계정까지 막지 않도록 한다.
압축 체크리스트
- shell 종류와 사용자 범위를 확인한 뒤 profile 파일을 고른다.
- profile 변경을 새 session에서 검증한다.
- soft·hard와 PAM·systemd 적용 경로를 구분한다.
- 실제 프로세스의 effective limit을 확인한다.
- access·default ACL과 mask를 구분한다.
- ACL은 대상 사용자 동작으로 검증한다.
- LDAP search, NSS 조회, PAM 인증, 홈 생성을 각각 검증한다.
- 원격 인증을 바꿀 때 로컬 복구 경로를 유지한다.