전용 서버에서 펑키 한 일을하기 위해 sshd를 설정하려고합니다. (말하자면, 이상한 질문을하는 이유에 대해 걱정할 필요가 없습니다. OpenSSH를 어떻게 남용 할 수 있는지 실험하고 있습니다.)
사용자가 만든 이름을 사용하여 시스템에 로그인 할 수있게하고 싶습니다. 예를 들면 :
$ ssh joeschmoe@crazysshserver.com
시스템에 (UNIX) 사용자가 없습니다. joeschmoe
.
그들이 연결되면, 나는 그들이 존재하는 사용자로 로그인되도록하고 싶다. guest
, 그리고 환경에 무언가를 joeschmoe
그래서 나는 그들이 누구로 로그인했는지 안다.
유닉스 사용자와 ssh 사용자의 개념을 분리 할 수 있습니까?
답변
모든 사용자가 로그인 할 수있게하려면 비밀번호 확인을 건너 뛰고 처음 로그인 할 때 계정을 만드십시오.
-
설치
libpam-script
. 예 :sudo apt-get install libpam-script
-
의 인증 섹션
/etc/pam.d/sshd
, 바꾸다pam_unix.so
와pam_script.so
. 일부 Linux 배포판은 자동으로 변경됩니다. 예를 들어, Ubuntu 14.04에서,pam_script.so
에 추가됩니다./etc/pam.d/common-auth
포함 된/etc/pam.d/sshd
. -
몹시 떠들어 대다
/usr/share/libpam-script/pam_script_auth
다음 내용으로#!/bin/bash
adduser $PAM_USER --disabled-password --quiet --gecos ""
exit 0 -
다음을 통해 스크립트를 실행 가능하게 만드십시오.
chmod +x /usr/share/libpam-script/pam_script_auth
-
행복하게.
답변
나는 꽤 비슷한 경우에 대해 연구 해왔다. 필자의 경우 호스트 기반 인증으로 이것을 구현하기로 결정했습니다. 사용자를 생성해야하는 곳을 이해해야하고 getpwnam 호출이 이름 서비스 전환에 구현 된 것이 가장 좋습니다. 필자는 PAM에서 사용자 생성을 구현할 수 없다고 생각하지만 실제로 PAM 모듈을 호출하기 전에 SSH에서 사용자 세부 정보가 필요하다고 생각합니다. 그러나 인증 유형에 따라 다를 수 있습니다.
호스트 기반 인증을 사용하고 동일한 사용자 이름에 로그인하는 방법을 설명하는 내 블로그 게시물 : https://funinit.wordpress.com/2018/01/29/host-based-ssh-as-sso/
적절한 방식으로 getpwnam을 구현하는 NSS 서비스 라이브러리가있는 Github 프로젝트 : https://github.com/cinek810/libnss-pool
모든 사람을 손님으로 로그인하려면 다른 NSS 라이브러리 (ato는 모두를 의미합니다)를 확인할 수 있습니다. https://github.com/donapieppo/libnss-ato
답변
불행히도, OP가 원하는 것을 할 수는 없습니다. 나는 최근에 똑같은 것을 조사해 왔으며 OpenSSH는 사용자가 입력하는 사용자 이름을 항상 사용하고 PAM이 소개하려고 시도하는 사용자 이름의 변경 사항은 무시한다는 점을 발견했습니다. 해당 사용자가 / etc / passwd에 없으면 OpenSSH는 중요한 정보 (UID, GID 및 로그인 쉘 포함)를 조회 할 수 없으므로 로그인을 허용하지 않습니다.
참고: https://www.redhat.com/archives/pam-list/2009-January/msg00004.html
한가지 대안은 PAM 인증 단계에서 사용자를 직접 작성하는 것인데, 데이비드는 자신의 대답에서 설명했습니다. 필자는이 솔루션을 테스트 한 결과 실행 가능하다고 판단했습니다. UID는 일반적으로 32 비트이므로 UQL을 모두 사용하지 않아도됩니다.
그러나 / etc / passwd 및 / etc / shadow 파일이 길어지고 길어질수록 시스템 성능이 느려지고 느려질 수 있습니다.