6.5. pam_env - 환경 변수 설정/해제

pam_env.so [ debug ] [ conffile=conf-file ] [ envfile=env-file ] [ readenv=0|1 ] [ user_envfile=env-file ] [ user_readenv=0|1 ]

6.5.1. 설명

PAM 모듈 pam_env를 이용해 환경 변수를 설정 및 해제할 수 있다. 앞서 설정된 환경 변수들뿐 아니라 PAM_RHOST 같은 PAM_ITEM 사용도 지원한다.

기본적으로 /etc/security/pam_env.conf 파일에서 변수 설정(해제) 규칙을 가져온다. conffile 옵션으로 다른 파일을 지정할 수 있다.

두 번째로 각 행에 단순 KEY=VAL 짝이 있는 파일(기본은 /etc/environment)을 읽어 들이게 된다. envfile 옵션으로 다른 파일을 지정할 수 있다. 그리고 readenv 옵션으로 이 동작을 아예 끌 수 있다.

세 번째로 사용자별 설정 파일(기본적으로 $HOME/.pam_environment)을 읽어 들이게 된다. user_envfile 옵션으로 기본 파일을 바꿀 수 있고 user_readenv 옵션으로 켜고 끌 수 있다.

PAM 환경 변수 설정이 다른 모듈에 부작용을 일으킬 수 있으므로 이 모듈을 스택에서 마지막 모듈로 하는 게 좋다.

6.5.2. 설명

pam_env(8)에서 설정, 해제, 변경할 환경 변수를 /etc/security/pam_env.conf 파일에서 지정한다. 누군가 로그인 할 때 이 파일을 읽어서 그 내용에 따라 환경 변수를 설정한다.

각 행은 변수 이름으로 시작하고, 그 다음으로 두 가지 옵션 DEFAULT와 OVERRIDE가 올 수 있다. DEFAULT를 이용해 관리자가 변수의 값을 어떤 기본값으로 설정할 수 있으며 값을 주지 않으면 빈 문자열로 상정한다. OVERRIDE 옵션은 그 변수가 있으면 (기본값을 오버라이드하고) 그 값을 집어넣게 한다. OVERRIDE를 쓰지 않으면 ""를 상정하며 아무것도 오버라이드하지 않는다.

VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]]

value에 ${string} 문법을 써서 (존재하지 않을 수도 있는) 환경 변수를 쓸 수 있으며 @{string} 문법을 써서 (존재하지 않을 수도 있는) PAM_ITEM 및 HOME과 SHELL을 쓸 수도 있다. $ 및 @ 문자를 리터럴 값으로 쓰려면 백슬래시로 이스케이프하면 된다. ""로 값의 범위를 정할 수 있으며 "를 이스케이프하는 건 지원하지 않는다. 참고로 이용하고 싶을 여러 환경 변수가 모듈 호출 시에는 설정돼 있지 않을 수 있다. 예를 들어 아래에서 ${HOME}을 여러 번 쓰고 있지만 많은 PAM 응용에선 적시에 그 값을 제공해 주지 않는다. 특수 변수 @{HOME}과 @{SHELL}은 passwd 항목에서 가져온 그 사용자의 값으로 확장된다.

행 시작에 (앞에 공백 없이) "#" 문자를 써서 주석 행이라고 표시할 수 있다.

/etc/environment 파일에는 설정할 환경 변수들을 지정한다. 파일의 각 행이 단순 NAME=VALUE 짝으로 돼 있어야 한다. pam_env(8) 모듈에서 pam_env.conf 다음에 그 파일을 읽는다.

6.5.3. 옵션

conffile=/path/to/pam_env.conf

기본 파일 대신 사용할 pam_env.conf 스타일 설정 파일을 나타낸다. 서비스별로 다른 환경이 필요할 때 유용할 수 있다.

debug

syslog(3)로 많은 디버그 정보를 찍는다.

envfile=/path/to/environment

기본 파일 대신 사용할 environment 파일을 나타낸다. 문법은 각 행에 단순 KEY=VAL 짝이 있는 것이다. bash 호환성을 위해 export 명령을 쓸 수 있으며 그냥 무시된다. 서비스별로 다른 환경이 필요할 때 유용할 수 있다.

readenv=0|1

envfile로 지정한 파일 읽기를 켜거나 끈다. 0은 끄고 1은 켠다. 기본적으로 이 옵션이 꺼져 있다. PAM 환경의 사용자 제공 환경 변수들이 시스템 관리자의 의도와 달리 스택에 있는 후속 모듈의 동작에 영향을 줄 수도 있기 때문이다.

보안상 문제 때문에 1.5.0부터 이 기능이 폐기 예정 상태이며 향후 어느 시점에 완전히 제거될 예정이다.

user_envfile=filename

기본 파일 대신 사용할 .pam_environment 파일을 나타낸다. 문법은 /etc/security/pam_env.conf와 같다. 사용자 홈 디렉터리를 기준으로 한 파일명이다. 서비스별로 다른 환경이 필요할 때 유용할 수 있다.

user_readenv=0|1

사용자별 environment 파일 읽기를 켜거나 끈다. 0은 끄고 1은 켠다. 기본적으로 이 옵션이 켜져 있다.

6.5.4. 제공하는 모듈 종류

authsession 모듈 타입을 제공한다.

6.5.5. 반환 값

PAM_ABORT

관련 데이터나 옵션을 모두 얻지 못했다.

PAM_BUF_ERR

메모리 버퍼 오류.

PAM_IGNORE

pam_env.conf 및 환경 파일을 찾을 수 없다.

PAM_SUCCESS

환경 변수를 설정했다.

6.5.6. 파일

/etc/security/pam_env.conf

기본 설정 파일

/etc/environment

기본 환경 파일

$HOME/.pam_environment

사용자별 환경 파일

6.5.7. 예시

/etc/security/pam_env.conf 파일에 지정할 수 있는 몇 가지 예시들이다.

REMOTEHOST 변수를 원격의 호스트로 설정. 없으면 설정하지 않는 게 아니라 "localhost"로 설정.

      REMOTEHOST     DEFAULT=localhost OVERRIDE=@{PAM_RHOST}
    

적당해 보이면 DISPLAY 변수 설정.

      DISPLAY        DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
    

몇 가지 간단한 변수들.

      PAGER          DEFAULT=less
      MANPAGER       DEFAULT=less
      LESS           DEFAULT="M q e h15 z23 b80"
      NNTPSERVER     DEFAULT=localhost
      PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
      :/usr/bin:/usr/local/bin/X11:/usr/bin/X11
      XDG_DATA_HOME  DEFAULT=@{HOME}/share/
    

실용성과는 거리가 있는 변수 문법 이스케이프 예시들.

      DOLLAR         DEFAULT=\$
      DOLLARDOLLAR   DEFAULT=        OVERRIDE=\$${DOLLAR}
      DOLLARPLUS     DEFAULT=\${REMOTEHOST}${REMOTEHOST}
      ATSIGN         DEFAULT=""      OVERRIDE=\@
    

6.5.8. 작성자

Dave Kinchlea <kinch@kinch.ark.com>가 pam_env를 작성했다.