pam_access.so
[
debug
] [
nodefgroup
] [
noaudit
] [
accessfile=file
] [
fieldsep=sep
] [
listsep=sep
]
pam_access는 기본적으로 접근 관리를 위한 PAM 모듈이다.
로그인 이름, 호스트나 도메인 이름, 인터넷 주소나 네트워크 번호에
따라서, 또는 네트워크에서 온 로그인이 아닌 경우 터미널 행
이름, X $DISPLAY
값, PAM 서비스
이름에 따라서 logdaemon 방식의 로그인 접근 제어를 할 수 있다.
다른 파일을 지정하지 않으면 설정 파일
/etc/security/access.conf
에서
기본 접근 관리 규칙들을 가져온다.
그 다음으로 /etc/security/access.d/
디렉터리에서 개별 *.conf
파일들을
읽는다. 시스템 로캘에 따른 순서로 하나씩 차례로 파일을 파싱한다.
그 개별 파일들의 효력은 모든 파일들을 파싱 순서대로 이어 붙인
것과 동일하다. 따라서 어느 파일에서 패턴이 걸리고 나면 더는
파일을 파싱하지 않는다. accessfile
옵션으로 따로 설정 파일을 지정한 경우에는 위 디렉터리의 파일을
파싱하지 않는다.
감사 지원을 포함해서 Linux-PAM이 컴파일돼 있으면 출처(호스트, tty 등)에 따라서 모듈에서 접근을 거부하는 경우 보고를 하게 된다.
/etc/security/access.conf
파일에서
(user/group
, host
),
(user/group
, network/netmask
),
(user/group
, tty
),
(user/group
,
X-$DISPLAY-value
),
(user/group
,
pam-service-name
)
조합에 대해 로그인을 수용할지 거절할지를 지정한다.
누군가 로그인할 때 access.conf
파일을 검색해서
(user/group
, host
) 또는
(user/group
, network/netmask
)
조합에 걸리는 첫 번째 항목을, 또는 네트워크 로그인이 아닌 경우엔
(user/group
,
X-$DISPLAY-value
) 또는
(user/group
,
pam-service-name/
)
조합에 걸리는 첫 번째 항목을 찾는다. 그 테이블 항목의
permissions 필드에 따라 로그인을 수용할지 거절할지가 정해진다.
로그인 접근 제어 테이블의 각 행은 ":"(콜론) 문자로 구분된 세 개 필드로 돼 있다.
permission
:users/groups
:origins
첫 번째 필드인 permission
필드는
접근 허가를 나타내는 "+"(더하기) 문자 또는
접근 거부를 나타내는 "-"(빼기) 문자일 수 있다.
두 번째 필드인
users
/group
필드는 하나 이상의 로그인 이름이나 그룹 이름, 또는 (항상 걸리는)
ALL의 목록이어야 한다.
사용자 항목과 그룹 항목을 구별하기 위해 그룹 항목은 괄호로 감싸서,
가령 (group)으로 적어야 한다.
세 번째 필드인 origins
필드는 tty 이름 (네트워크 로그인이 아닌 경우), 또는
X $DISPLAY
값이나 PAM 서비스 이름
(네트워크 로그인이 아니면서 tty 없는 경우), 또는 호스트 이름이나
도메인 이름 ("."로 시작), 호스트 주소, 인터넷 네트워크 번호
("."로 끝남), 인터넷 네트워크 주소 및 네트워크 마스크 (네트워크
마스크는 십진수거나 마찬가지로 인터넷 주소일 수 있음),
ALL (항상 일치),
LOCAL이 하나 이상 있는
목록이어야 한다. LOCAL
키워드가 걸리는 경우는 item_type
을
PAM_RHOST로 해서
pam_get_item(3)을
호출한 게 NULL
이나 빈 문자열을 반환하는
(그래서 item_type
을
PAM_TTY로, 그리고 다음은
PAM_SERVICE로 해서
pam_get_item(3)을
호출한 반환 값을 origins
필드와 비교하는) 바로 그 경우다.
시스템에서 지원하는 경우 호스트 내지 사용자 패턴에 @netgroupname을 쓸 수 있다. @@netgroupname 문법은 사용자 패턴에서만 지원하며 netgroup 일치 검사 호출에 사용자 이름에 더해서 로컬 시스템 호스트 이름이 전달되게 한다. 일부 libc 구현에서 올바로 동작하지 않아서 검사가 항상 실패하게 될 수도 있다.
EXCEPT
연산자는 아주 간결한
규칙을 작성할 수 있게 해 준다.
nodefgroup
가 설정돼 있지 않으면 이름이
로그인한 사용자 이름과 일치하지 않을 때 그룹 파일을 검색해 본다.
사용자가 명시적으로 나열돼 있는 그룹만 걸린다. PAM 모듈에서
사용자의 주 그룹 ID를 확인하진 않는다.
행 처음에 (앞에 공백 없이) 있는 "#" 문자를 이용해 그 행이 주석 행이라고 표시할 수 있다.
accessfile=/path/to/access.conf
기본 파일 대신 사용할 access.conf
방식 설정 파일을 나타낸다. 서비스마다 다른 접근 목록이 필요할 때
유용할 수 있다.
debug
syslog(3)으로 많은 디버그 정보를 찍는다.
noaudit
불허된 호스트 및 tty에서의 로그인을 감사 서브시스템으로 보고하지 않는다.
fieldsep=separators
이 옵션은 pam_access에서 접근 설정 파일을 파싱할 때 인식하는 필드 구분 문자를 바꾼다. 예를 들어 fieldsep=|라고 하면 기본인 `:' 문자는 필드 값의 일부인 것으로 처리되고 `|'가 필드 구분자가 된다. pam_access와 X 기반 응용을 함께 쓰려는 시스템에서 유용할 수 있는데, 그 경우 PAM_TTY 항목이 값 안에 `:' 문자를 포함한 "hostname:0" 형태가 될 것이기 때문이다. 하지만 꼭 필요한 건 아니다.
listsep=separators
이 옵션은 pam_access에서 접근 설정 파일을 파싱할 때 인식하는 목록 구분 문자를 바꾼다. 예를 들어 listsep=,라고 하면 기본인 ` '(공백) 및 `\t'(탭) 문자는 목록 항목 값의 일부인 것으로 처리되고 `,'가 유일한 목록 항목 구분자가 된다. 윈도우 도메인에서 그룹 정보를 얻는 시스템에서 유용할 수 있는데, 그 경우 기본 내장 그룹인 "Domain Users"와 "Domain Admins"에 공백이 들어 있기 때문이다.
nodefgroup
괄호로 감싸지 않은 사용자 토큰을 그룹 데이터베이스와 맞춰 보지 않는다. 하위 호환을 위한 기본 동작은 토큰을 괄호로 감싸지 않았더라도 그룹 데이터베이스에 맞춰 보는 것이다.
접근이 승인됐다.
접근이 승인되지 않았다.
아무 동작도 하지 않는 pam_setcred
가 호출됐다.
관련 데이터 내지 옵션을 모두 얻지 못했다.
시스템에서 알지 못하는 사용자다.
다음은 /etc/security/access.conf
에
지정할 수 있는 몇 가지 예시다.
사용자 root가 cron, X11 터미널 :0, tty1, ..., tty5, tty6을 통해 접근하는 게 허용돼야 한다.
+:root:crond :0 tty1 tty2 tty3 tty4 tty5 tty6
사용자 root가 어떤 IPv4 주소를 가진 호스트로부터 접근하는 게 허용돼야 한다. 꼭 IPv4 연결이어야 한다는 의미는 아니고, 그 IPv4 주소 중 하나를 가진 호스트에서 오는 IPv6 연결도 잘 된다.
+:root:192.168.200.1 192.168.200.4 192.168.200.9
+:root:127.0.0.1
사용자 root가 네트워크
192.168.201.
에서 접근할 수 있어야 하며,
문자열 맞춰 보기 방식으로 항목을 평가하게 된다. 하지만 네트워크/넷마스크를
쓰는 게 더 나을 수 있다. 192.168.201.
는
192.168.201.0/24 및
192.168.201.0/255.255.255.0과
의미가 같다.
+:root:192.168.201.
사용자 root가 호스트 foo1.bar.org 및 foo2.bar.org에서 접근할 수 있어야 한다. (문자열 맞춰 보기 방식 사용.)
+:root:foo1.bar.org foo2.bar.org
사용자 root가 도메인 foo.bar.org에서 접근할 수 있어야 한다. (문자열 맞춰 보기 방식 사용.)
+:root:.foo.bar.org
사용자 root가 다른 모든 출처에서 접근이 거부돼야 한다.
-:root:ALL
사용자 foo와 netgroup admins의 멤버들이 모든 출처에서 접근이 허용돼야 한다. netgroup 서비스를 이용 가능한 경우에만 동작하게 된다.
+:@admins foo:ALL
사용자 john과 foo가 IPv6 호스트 주소에서 접근할 수 있어야 한다.
+:john foo:2001:db8:0:101::1
사용자 john이 IPv6 네트워크/넷마스크에서 접근할 수 있어야 한다.
+:john:2001:db8:0:101::/64
wheel 그룹 멤버들이 모든 출처에서 접근할 수 있어야 한다.
+:(wheel):ALL
shutdown과 sync, 그리고 wheel 그룹 멤버인 여타 계정들을 제외한 모두에게 콘솔 로그인을 불허한다.
-:ALL EXCEPT (wheel) shutdown sync:LOCAL
다른 모든 사용자가 모든 출처에서 접근이 거부돼야 한다.
-:ALL:ALL