4.2. 서비스 이름 선정

Linux-PAM 설정 파일 각 열의 첫 항목에 해당하는 service-name을 고를 때 argv[0]와 연관되도록 선택하는 걸 피해야 한다. 사용자가 시스템 상의 응용을 다른 이름으로 호출하는 건 간단한 일이므로 보안 침해를 막으려면 그렇게 하지 말아야 한다.

일반적으로 프로그램이 setuid이거나 그 외 방식으로 호출 사용자보다 높은 권한을 가지고 있는 경우에 이는 항상 올바른 원칙이다. 일부 경우에는 이 원칙을 피하는 게 편하지만, 응용 작성자는 프로그램이 설치되고 사용될 방식들을 충분히 검토해 볼 필요가 있다. (setuid로 의도한 프로그램이 아닌데도 편의를 위해 그렇게 설치되는 경우가 종종 있다. 여기 해당하는 프로그램이라면 원칙을 피하는 게 중대한 실수가 된다.)

어떤 대상 응용을 다른 이름으로 호출하기 위해 사용자가 대상 응용에 원하는 다른 이름의 심볼릭 링크를 걸 수 있다. 사용자가 ln -s /target/application ./preferred_name 실행 후 ./preferred_name을 실행하기만 하면 된다.

공격자가 Linux-PAM 설정 파일을 조사해 본 후 보호 정도가 최소인 이름으로 preferred_name을 고를 수 있다. 예를 들어 Linux-PAM을 이용해 하루 중 특정 시간으로 접근을 제한하는 game을 선택할 수 있다. service-name이 서비스를 호출하는 파일명과 연계돼 있으면 사용자가 실질적으로 그 서비스에서 쓰는 인증 체계를 제어하는 위치에 있게 된다. 당연히 이는 안전한 상황이 아니다.

결론은 응용의 service-name을 조심스럽게 정해야 한다는 것이다. 가장 안전한 방법은 이름 하나를 선정해서 하드코딩하는 것이다.