PAM을 사용하여 애플리케이션을 시작한 사용자가 아닌 사용자를 인증하는 방법

PAM을 사용하여 애플리케이션을 시작한 사용자가 아닌 사용자를 인증하는 방법

현재 애플리케이션에 대한 인증 모듈을 개발 중입니다. 우리는 이러한 목적으로 PAM을 사용하기로 결정했습니다. 이 작업을 수행했지만 애플리케이션을 시작한 사용자만 인증합니다.

즉, 사용자 "appname"으로 앱을 시작하면 사용자가 "some_user"가 아니고 "appname"인 경우에만 인증에 성공했다는 메시지만 표시됩니다.

"some_user"로 이동하여 해당 터미널에서 애플리케이션을 실행하면 "some_user"는 인증할 수 있지만 "appname"은 인증할 수 없습니다.

common-auth에서 pam_unix에 대한 디버그 플래그를 켰습니다. 거부되면 다음과 같은 출력이 생성됩니다.

unix_chkpwd[4107]: check pass; user unknown
unix_chkpwd[4107]: password check failed for user (pamtest)
[app]: pam_unix(other:auth): authentication failure; logname=[appname] uid=1000 euid=1000 tty= ruser=[appname] rhost=  user=pamtest

답변1

PAM은 데몬이 아니며 단지 라이브러리일 뿐입니다. 일반 사용자는 인증 데이터(예: )에 액세스할 수 없으므로 /etc/shadow일반 사용자로 실행되는 프로그램은 인증할 수 없습니다. 작은 예외가 있습니다. 이 경우 사용자는 자신의 신원을 확인할 수 있습니다.그룹 ID 설정 /sbin/unix_chkpwd인증 데이터에 액세스할 수 있는 도우미 프로그램을 자동으로 호출합니다(그러나 다른 사용자의 인증은 허용하지 않음).

따라서 SUID 플래그(백도어를 열지 않는 것이 어렵기 때문에 권장하지 않음)를 통해 프로그램 자체에 루트 권한을 부여하여 루트에서 실행되도록 하거나 네트워크 서비스를 통해 인증하거나 SUID를 실행해야 합니다. 프로그램 su.

존재하다이 문제가능한 해결책이 논의됩니다.

관련 정보