pam을 사용하여 사용자가 SSH 액세스를 방지하는 방법은 무엇입니까?

pam을 사용하여 사용자가 SSH 액세스를 방지하는 방법은 무엇입니까?

/etc/ssh/sshd_config나는 나를 제외한 모든 사용자의 SSH 액세스를 차단하는 방법을 알아내려고 지난 주 동안 머리를 긁적였습니다.

내 목표는 나를 제외한 모든 사용자가 SSH를 통한 로그인을 불가능하게 만들고, 2fa+비밀번호 또는 키 기반 인증을 통해 내 계정에 액세스할 수 있도록 하는 것입니다. 현재 후반전까지 완료했는데 저를 제외한 모든 유저를 차단하는 방법을 모르겠습니다. 나는 내 직업에서 일하고 싶은 대사를 이미 가지고 있습니다 sshd_config.

AllowUsers me
DenyUsers *

그러나 다른 사용자 계정(예 fred: )으로 ssh를 시도하면 여전히 를 사용하라는 메시지가 표시됩니다 Password:. 또한 내 상단에 다음 줄을 추가하려고 했습니다 /etc/pam.d/sshd.

auth      required   pam_succeed_if.so user ingroup ssh

그리고 나는 그룹에서 유일한 사람입니다 ssh.

나를 제외한 모든 사용자의 SSH 액세스를 방지하려면 내가 무엇을 잘못하고 있습니까? 내 2FA가 작동하는 방식이기 때문에 PAM을 사용해야 합니다.

답변1

ssh를 차단하고 ssh만 사용하면 access.conf로그인이 작동하지 않습니다. 그러나 pam_access다른 구성 파일을 사용하여 수행할 수 있습니다.

먼저, pam_access를 사용하도록 PAM을 구성해야 합니다. 아마도 기본적으로는 아닐 것입니다. PAM 구성 에는 구성 파일을 통해 account required pam_access.so행이 있어야 하며 sshd 구성에 해당 행이 포함될 수 있습니다.sshdpassword-auth

Fedora에서는 authselectpam_access를 사용하도록 PAM 구성을 활성화하는 데 사용할 수 있습니다.

sudo authselect enable-feature with-pamaccess

access.conf이 시점에서 다음 줄을 사용하면 액세스가 차단될 수 있다고 생각할 수 있습니다 .

-:username:sshd

이것은 방지하지 않습니다사용자 이름서비스 이용 시 액세스가 면제됩니다 sshd. 그 이유는 pam_access 맨페이지의 다음 내용 때문입니다.

...또는 PAM 서비스 이름(예인 경우)오프라인로그인.

ssh는 네트워크 로그인이므로(PAM의 RHOST필드가 정의됨) 서비스 이름은 사용되지 않습니다. 원격 호스트 이름, IP 주소, 넷그룹 등만 사용하십시오.

PAM 서비스 이름은 인터넷에서 로그인할 때만 사용되므로 이 맨페이지는 완전히 정확하지 않습니다.그리고 tty가 아닌. 콘솔 로그인 프롬프트, 데스크탑 인사말 또는 sudo 실행 시와 같은 로컬 로그인에서는 서비스 이름 대신 연관된 tty 또는 X 디스플레이를 사용합니다.

실제로 서비스 이름은 atd 또는 crond와 같은 백그라운드 로그인에만 사용됩니다. 따라서 access.conf의 다른 항목으로 ssh를 필터링할 수 있는 방법이 없기 때문에 이 방법으로 ssh를 차단할 수는 없습니다.

긴 이야기 짧게

다음을 통해 SSH뿐만 아니라 다른 모든 서비스를 사용하여 모든 원격 로그인을 제한할 수 있습니다.

+:username:LOCAL
-:username:ALL

SSH에만 적용하려면 SSHD에 대해 다른 access.conf 파일을 사용하도록 PAM을 구성해야 합니다. /etc/pam.d/sshd다음을 포함하는 줄 바로 앞에 다음과 같은 줄을 추가합니다 account include password-auth.

account    required     pam_access.so accessfile=/etc/security/access-sshd.conf

이제 /etc/security/access-sshd.confSSH 로그인에만 적용되는 액세스 제어를 만듭니다. 예:

# Don't allow user 'username' access
-:username:ALL

# Only allow user 'trusted' access and no one else
-:ALL EXCEPT trusted:ALL

# Only allow user 'username' when they are coming from localhost
+:username:127.0.0.1 ::1
-:username:ALL

localhost숫자 대신 IPv4 및 IPv6 주소를 사용하면 작동하지만 나에게는 작동하지 않습니다.

관련 정보