pam_listfile.so
item=[tty|user|rhost|ruser|group|shell]
sense=[allow|deny]
file=/path/filename
onerr=[succeed|fail]
[
apply=[user
|@group
]
] [
quiet
]
pam_listfile은 임의 파일을 가지고 서비스를 거부하거나 허용할 수 있게 해 주는 PAM 모듈이다.
item
으로 타입을 받아서
file=
에
그 항목 인스턴스가 있는지 확인한다. 타입 user는
사용자 이름, 즉 PAM_USER를 나타내고,
tty는 요청이 이뤄진 터미널의 이름, 즉 PAM_TTY를
나타내고, rhost는 (해당되는 경우) 요청을 한 원격 호스트의 이름, 즉
PAM_RHOST를 나타내고, ruser는
(해당되는 경우) 요청을 한 원격 사용자의 이름, 즉
PAM_RUSER를 나타낸다.
filename
filename
에는 각 행에 한 개씩 항목이 나열돼 있다.
항목이 있는 경우, sense=allow
면
PAM_SUCCESS를 반환해서 인가 요청이
성공하게 하고, sense=
면
PAM_AUTH_ERR를 반환해서
인가 요청이 실패하게 한다.
deny
오류를 만난 경우에 (예를 들어 filename
이
존재하지 않거나 인자를 잘못 준 경우에), onerr=succeed이면
PAM_SUCCESS를 반환하고,
onerr=fail이면 (경우에 맞게)
PAM_AUTH_ERR나
PAM_SERVICE_ERR를 반환하게 된다.
추가로 apply=
인자를 사용해서 위 내용이
특정 사용자(apply=
)나
지정한 그룹(username
apply=
)에만
적용되도록 제한할 수 있다.
이 추가 제한은 tty,
rhost, shell
항목과 함께 쓸 때만 의미가 있다.
@groupname
이 인자는 제외하고 모든 인자를 지정해 주는 게 좋다. 기본 동작 방식에 의지해선 안 된다.
이 모듈에선 어떤 크리덴셜도 받지 않는다.
item=[tty|user|rhost|ruser|group|shell]
파일에 나열돼 있고 확인해야 하는 것이 무슨 항목인가.
sense=[allow|deny]
파일에서 발견 시 취할 동작. 그 항목이 파일에 없으면 반대 동작을 요청한다.
file=/path/filename
각 행에 한 항목씩 담은 파일. 단순 텍스트 파일이어야 하며 아무나 쓰기 가능한 파일이어선 안 된다.
onerr=[succeed|fail]
파일 열기 실패 같은 뭔가 이상한 일이 발생할 때의 동작.
apply=[user
|@group
]
조건을 적용할 사용자를 제한. 참고로
item=[user|ruser|group]
에서는
이 옵션이 무의미하고
item=[tty|rhost|shell]
에 대해
의미가 있다.
quiet
서비스 거절이나 목록 파일 부재를 로그로 기록해야 하는 오류로 처리하지 않기.
인증 실패.
메모리 버퍼 오류.
apply
옵션에 따라 규칙이 적용되지 않았다.
서비스 모듈 내 오류.
성공.
다음 내용을 /etc/pam.d/ftpd
에 넣어서
전통적인 'ftpusers' 인증을 구현할 수 있다.
# # /etc/ftpusers 파일에 나열된 사용자에게 ftp 접근 거부 # auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers
참고로 /etc/ftpusers
파일에 나열되는 건
(이름과 달리) ftp 서비스 접근이 허용되지
않는 사용자들이다.
특정 사용자들에게만 로그인 접근을 허용하려면 다음과 같은 내용을
/etc/pam.d/login
에 쓸 수 있다.
# # /etc/loginusers에 나열된 사용자에게만 로그인 허가 # auth required pam_listfile.so \ onerr=fail item=user sense=allow file=/etc/loginusers
이 예시를 이용하려면 login 서비스 이용이 허용된 모든 사용자가
/etc/loginusers
에 나열돼 있어야 한다.
의도적으로 root를 막으려는 게 아니라면 root를
/etc/loginusers
에 포함시키거나
root 계정으로 su 할 수 있는
사용자를 포함시켜서 root로 로그인할 방법을 남겨 두도록 하자.