UNIX 사용자가 SSH를 통해 서버에 액세스하고 공개 키 로그인만 허용하려는 경우 이 목록에 추가할 때 고려해야 할 다른 항목이 있습니까?
- 서버에 파일을 허용합니다
pubkey login
.sshd_config
- 기본 비밀번호에 대한 참고 사항."!"또는"*"
답변1
어떤 SSH 서버와 어떤 Unix 시스템 세트가 필요한지 알려주시면 좋을 것 같습니다.
!
또는(이 항목을 읽는 데 사용됨)에서 해당 항목을 볼 때 및 *
는 비밀번호가 아닙니다./etc/passwd
/etc/shadow
getent
계정에 비밀번호가 있는지, 잠겨 있는지 여부를 나타내는 플래그입니다.
이는 PAM의 구성 및 버전과 배포판에 따라 달라지는 중요한 차이점입니다.리눅스를 사용하는 경우. 잠겨 있으면 로그인이 불가능할 것 같지만, 반면에 오래된 시스템에서는 즉시 작동할 수도 있습니다(적어도 제 경험상 그랬습니다).
(수퍼유저로서) passwd -l <name>
계정을 잠그거나( !
) passwd -d <name>
계정에서 비밀번호를 제거하거나( *
), 두 가지를 결합하여 기존 비밀번호가 제거되도록 할 수 있습니다 passwd -dl <name>
.
말하지 않았지만 /etc/ssh/sshd_config
OpenSSH(경로는 다를 수 있음)의 관련 지침이 다음과 같다고 가정합니다.
HostKey ...
서버에는 RSA2 또는 DSA의 호스트 키가 있어야 합니다(더 현대적인 구현에는 두 개의 타원 곡선 구현도 추가됨). RSA1은 모든 일반적인 SSH 서버 구현에서 오랫동안 더 이상 사용되지 않습니다.
그 다음에:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
또한 저는 항상 SSH( )를 통해 로그인을 설정 /etc/sudoers
하고 완전히 비활성화하는 것을 권장합니다 . 그러나 이 보다 안전한 설정은 디스크가 가득 차고 권한이 없는 구성원이 디스크에 쓸 수 없는 경우(예약된 공간으로 인해) 작은 단점이 있을 수 있습니다 . 그래서 YMMV.root
PermitRootLogin no
sudo
root
두 가지 추가 제안
SSH 액세스를 제한하도록 그룹 할당
그룹 ssh-users
(또는 원하는 이름)을 만들고 해당 지시어를 설정하세요 sshd_config
. root
위의 정보를 바탕으로 선택한 정책에 따라 그룹이 그룹의 구성원인지 확인하세요.
AllowGroups ssh-users
사용자를 제한하려면 그룹을 할당하세요.오직SFTP 액세스
다음 단계 sshd_config
는 사용자가 탈출할 수 없도록 /home
하고 특정 기능이 비활성화되도록 하는 것입니다.
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
결론적으로
그렇습니다. Linux에서는 PAM을 고려 사항으로 추가해야 합니다.
또한 프록시 전달을 허용할지 아니면 사용자에게 맡길지 여부도 포함됩니다.
마지막으로 중요한 것은 포트 또는 X11 연결 전달이 허용되는지 여부입니다. 특히 포트는 사용자가 서버를 프록시로 사용할 수 있기 때문에 바람직하지 않을 수 있습니다.
또한 이 Match
지시문을 사용하면 사용자가 연결할 수 있는 위치를 제한할 수 있습니다(방화벽이나 TCP 래퍼도 이 작업을 수행할 수 있음).
사용자가 키를 관리할 수 있도록 하시겠습니까, 아니면 추상화하여 authorized_keys
사용자가 직접 액세스할 수 없도록 하시겠습니까?
물론 더 많은 측면이 있지만 대부분은 더 세밀한 세부 수준에 있으므로 위 사항에 대한 변형입니다.
답변2
사용자가 원하는 것이 무엇이든 암호 복잡성에 관한 정책을 고려하십시오. SSH를 통한 유일한 액세스이고 PasswordAuthentication
위치는 다음과 같습니다.no
sshd_config
, 비밀번호가 무엇인지는 중요하지 않습니다. 또한shadow
!
은 암호화된 비밀번호이므로 및 값은 *
그렇지 않습니다.비밀번호- 그러나 문자열은 유효한 암호화 값이 아니므로 비밀번호 기반 로그인이 불가능합니다.
답변3
OpenSSH가 포함된 RHEL/CentOS와 같은 것을 실행한다고 가정하면, 비밀번호가 없을 때 일반적으로 수행하는 작업은 다음과 같습니다.
- 공개 키 인증만 허용하도록 sshd_config 구성(
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - 모든 기존 사용자를 잘못된 비밀번호로 설정(
chpasswd -e 'pubkey!!' <username>
) - 기존 사용자의 비밀번호 만료 기간을 모두 제거(
chage -M -1 <username>
) - sudo를 사용하는 경우 모든 사용자 사양이 NOPASSWD로 표시되어 있는지 확인하세요(예
%wheel ALL=(ALL) NOPASSWD: ALL
: ) - 사용자 생성 프로세스가 이러한 요구 사항을 충족하는지 확인하십시오(예
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
: ).
비밀번호 액세스를 잠그기 전에 공개키를 통해 성공적으로 인증할 수 있는지 다시 한 번 확인하세요. /home 파티션이 네트워크 마운트(또는 항상 사용 가능하지 않을 수 있는 다른 파티션)에 있지 않은지 확인하십시오. 공개 키에 접근할 수 없기 때문에 서버에 접근할 수 없는 것보다 더 나쁜 것은 없습니다. 시스템이 헤드리스인 경우 비상 시 콘솔에 빠르고 직접 액세스할 수 있는 방법(KVM, 가상 콘솔, 크래시 카트 등)이 있는지 확인하십시오.
그렇다면 전체 sudo 액세스 권한이 있는 모든 계정에 대해 비밀번호를 설정하고 sudo 사용자에게 비밀번호 제공을 요구하도록 구성하는 것을 고려해 보겠습니다. 다른 모든 것이 위와 같이 구성된 경우에도 이 비밀번호를 사용하여 서버에 로그인할 수는 없지만 명령 프롬프트에 앉아 "bad(tm)"을 수행하는 사람에 대해 약간의 추가 보호 기능을 제공합니다.
답변4
rcommand
Linux가 아닌 UNIX(HP UX) 시스템인 경우 sshd 계정 아래의 pam.conf에 추가 해야 합니다 .
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
그렇지 않으면 시스템에 SSH로 접속하려고 할 때 비밀번호 프롬프트가 표시되지만 이는 나타나지 않습니다.