pam_group.so
pam_group은 사용자를 인증하는 게 아니라 (인증 모듈의 크리덴셜 설정 단계에서) 사용자에게 그룹 멤버십을 부여하는 PAM 모듈이다. 사용자가 이용하려는 서비스에 따라 소속을 정할 수 있다.
기본적으로 설정 파일 /etc/security/group.conf
에서
그룹 멤버십 규칙을 가져온다.
이 모듈이 유용한지 여부는 사용자가 접근 가능한 파일 시스템에
달려 있다. 일단 그룹 멤버십이 부여되고 나면 사용자는
제한된 그룹 소유로 setgid
바이너리를 만들려 할 수 있다. 그리고 이후 사용자가 이 그룹 멤버십을
부여받지 못할 때 미리 컴파일 해 둔 그 바이너리로 그룹 멤버십을
다시 얻을 수 있다. 사용자가 접근 가능한 파일 시스템이 여기서
중요한 이유는 파일 시스템이 nosuid으로
마운트돼 있으면 사용자가 그런 바이너리 파일을 만들거나 실행할
수 없기 때문이다. 이 모듈을 안전하게 이용하려면 사용자가
쓰기 접근을 할 수 있는 모든 파일 시스템이
nosuid로 마운트돼 있어야 한다.
pam_group 모듈은 /etc/group
파일과
병행해서 동작한다. 이 모듈 동작에 의해 사용자가 그룹을 부여받는 경우
그건 /etc/group
(또는 동등한 파일)의
내용에 더해서 부여받는 것이다.
pam_group은 사용자를 인증하는 게 아니라 (인증 모듈의 크리덴셜 설정 단계에서) 사용자에게 그룹 멤버십을 부여하는 PAM 모듈이다. 사용자가 이용하려는 서비스에 따라 소속을 정할 수 있다.
이 모듈이 제대로 동작하려면 올바른 형식의
/etc/security/group.conf
파일이
있어야 한다. 공백은 무시되고 '\'(개행 이스케이프)로 행을
연장할 수 있다. '#' 다음 내용은 행이 끝날 때까지 무시된다.
행 문법은 다음과 같다.
services
;ttys
;users
;times
;groups
첫 번째 필드인 services
필드는
규칙이 적용되는 PAM 서비스 이름의 논리식이다.
두 번째 필드인 tty
필드는
이 규칙이 적용되는 터미널 이름의 논리식이다.
세 번째 필드인 users
필드는
이 규칙이 적용되는 사용자의 논리식, 또는 유닉스 그룹, 또는
사용자 netgroup이다. 그룹 이름 앞에는 '%' 기호가 붙고
netgroup 이름 앞에는 '@' 기호가 붙는다.
논리식이란 개별 선택적으로 토큰 앞에 '!'(논리 not)를 붙이고 '&'(논리 and)나 '|'(논리 or)로 이어 붙인 것이다.
이 항목들에서 단순 와일드카드 '*'를 한 번만 쓸 수 있다. 유닉스 그룹이나 netgroup에는 와일드카드나 논리 연산자를 쓸 수 없다.
times
필드를 이용해
"언제" 사용자에게 그룹을 부여할지 지정한다. 날은 두 글자짜리
항목을 연달아 써서 지정한다. 예를 들어 MoTuSa는 월요일, 화요일,
토요일이다. 참고로 요일을 반복하면 해제되므로 MoMo는 아무 날도
지정하지 않은 것이고, MoWk는 월요일을 뺀 평일이다. 쓸 수 있는
두 글자 조합은 Mo Tu We Th Fr Sa Su Wk Wd Al이며, 끝의 둘은 각각
주말과 7일 전체다. 마지막으로 예를 들자면 AlFr는 금요일을 제외한
모든 요일을 뜻한다.
날/시간 범위 각각의 앞에 '!'를 붙여서 "~를 뺀 전체"를 나타낼 수 있다. 시간 범위 부분은 24시간제 HHMM 시간 둘을 하이픈으로 연결한 것이며 각각 시작 시간과 끝 시간을 나타낸다. (끝 시간이 시작 시간보다 작으면 다음 날에 적용되는 것으로 본다.)
groups
필드는 사용자가
멤버십을 물려받는 그룹들의 목록이며 쉼표나 공백으로 항목을 구분한다.
사용자의 요청이 앞의 필드들을 만족시키면 이 그룹들이 추가된다.
규칙이 적용되려면 요청 프로세스가 services+ttys+users 모두를 만족시켜야 한다.
그룹 멤버십이 부여됐다.
관련 데이터를 모두 얻지 못했다.
메모리 버퍼 오류.
그룹 멤버십이 부여되지 않았다.
아무 동작도 하지 않는 pam_sm_authenticate
가 호출됐다.
시스템에서 알지 못하는 사용자다.
다음은 /etc/security/group.conf
에
지정할 수 있는 예시 몇 가지다.
tty*(모든 ttyXXX 장치)에서 'xsh'을 돌리는 사용자 'us'가 (floppy 그룹 멤버십을 통해) 플로피 디스크 접근 권한을 얻는다.
xsh;tty*&!ttyp*;us;Al0000-2400;floppy
tty*(모든 ttyXXX 장치)에서 'xsh'을 돌리는 사용자 'sword', 'pike', 'shield'가 일과 시간 후에 (games 및 sound 그룹 멤버십을 통해) 게임 접근 권한을 얻는다.
xsh; tty* ;sword|pike|shield;!Wk0900-1800;games, sound xsh; tty* ;*;Al0900-1800;floppy
tty*에서 'xsh'을 돌리는 'admin' 그룹의 모든 사용자가 (항상) 'plugdev' 그룹에 대한 접근권을 부여받는다.
xsh; tty* ;%admin;Al0000-2400;plugdev