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를 나타낸다.
      filenamefilename에는 각 행에 한 개씩 항목이 나열돼 있다.
      항목이 있는 경우, sense=allow면
      PAM_SUCCESS를 반환해서 인가 요청이
      성공하게 하고, sense=면
      PAM_AUTH_ERR를 반환해서
      인가 요청이 실패하게 한다.
    deny
      오류를 만난 경우에 (예를 들어 filename이
      존재하지 않거나 인자를 잘못 준 경우에), onerr=succeed이면
      PAM_SUCCESS를 반환하고,
      onerr=fail이면 (경우에 맞게)
      PAM_AUTH_ERR나
      PAM_SERVICE_ERR를 반환하게 된다.
    
      추가로 apply= 인자를 사용해서 위 내용이
      특정 사용자(apply=)나
      지정한 그룹(usernameapply=)에만
      적용되도록 제한할 수 있다.
      이 추가 제한은 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로 로그인할 방법을 남겨 두도록 하자.