ssh
신뢰할 수 있는 바이너리를 실행하기 위해 빈 비밀번호로 적절하게 안전한 계정을 만들려면 어떻게 해야 합니까 ? SSH "가짜 사용자" 뒤에 있는 "데모 애플리케이션"을 제한하면서 임의의 사용자를 위한 일종의 "더미 SSH 키오스크"를 만들고 싶습니다.
"보안"이란 "임의의 방문자를 위해 데모 응용 프로그램을 실행하는 서버의 보안"을 의미합니다. 기본적으로 https 웹사이트를 제공하는 것과 유사하게 SSH 계정 뒤의 서비스로 애플리케이션을 제공합니다.
(이 질문의 목적에 따라 우리는 신뢰한다고 가정합니다. /bin/cat
또는 /usr/bin/cat
서버 시스템에 따라 귀하의 시스템을 확인하십시오 which echo
.)
일하는 동안https://goo.gl/TjhrWd, 비밀번호를 공백으로 설정하는 중에 문제가 발생했습니다. PAM은 이를 거부합니다.
어떻게 구성되어 있는지
이것은 내가 사용하는 구성이며 사용자의 비밀번호를 설정할 때 작동합니다 cat
.https://goo.gl/TjhrWd:
# below configured on Ubuntu Server 14.04 LTS
addgroup catonly
CHROOT=/var/chroot/cat
# now let's make pseudo-shell binary, executing your ForceCommand (check source)
# you can use bash as default shell instead, I prefer sth less bloated.
cd /tmp
wget 'https://gist.githubusercontent.com/gwpl/abcbc74c2bf377945a49097237edfb9b/raw/1993e8acc4bd66329959b1a658fcce4296d2a80c/only_exec_command.c'
gcc only_exec_command.c -static -o only_exec_command
mkdir -p "$CHROOT"/{bin,lib,lib64,dev/pts,home/cat}
chown root:root /var/chroot "$CHROOT"
# dependig on distro it might be /usr/bin/cat -> check with `which cat`
useradd -d /home/cat -s /bin/only_exec_command -M -N -g catonly cat
passwd -d cat
# Let's make chroot
cp /tmp/only_exec_command "$CHROOT"/bin/
cp /bin/cat "$CHROOT"/bin/
mknod -m 666 "$CHROOT"/dev/null c 1 3
ldd /bin/cat # tells us which libraries to copy
cp /lib/x86_64-linux-gnu/libc.so.6 "$CHROOT"/lib
cp /lib64/ld-linux-x86-64.so.2 "$CHROOT"/lib64
chown cat:catonly "$CHROOT"/home/cat
chown root:root /var/chroot/cat /var/chroot /var
$ $EDITOR /etc/ssh/sshd_config # add:
Match user cat
ChrootDirectory /var/chroot/cat
X11Forwarding no
AllowTcpForwarding no
# dependig on distro it might be /usr/bin/cat -> check with `which cat`
ForceCommand /bin/cat
PasswordAuthentication yes
PermitEmptyPasswords yes
증상은 PAM을 나타냅니다.
그러나 시도하면 ssh
비밀번호를 요청하고 거부되면 빈 결과가 제공됩니다.
ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
디버그 모드에서 실행되는 서버 측에서는 로그에 흥미로운 내용이 없습니다. 로그인하는 동안 빈 비밀번호를 입력한 후 서버 측 부분을 인용하겠습니다.
/usr/sbin/sshd -ddd -p 1234
(...)
debug1: userauth-request for user echo service ssh-connection method password [preauth]
debug1: attempt 2 failures 1 [preauth]
debug2: input_userauth_request: try method password [preauth]
debug3: mm_auth_password entering [preauth]
debug3: mm_request_send entering: type 12 [preauth]
debug3: mm_auth_password: waiting for MONITOR_ANS_AUTHPASSWORD [preauth]
debug3: mm_request_receive_expect entering: type 13 [preauth]
debug3: mm_request_receive entering [preauth]
debug3: mm_request_receive entering
debug3: monitor_read: checking request 12
debug3: PAM: sshpam_passwd_conv called with 1 messages
debug1: PAM: password authentication failed for echo: Authentication failure
debug3: mm_answer_authpassword: sending result 0
debug3: mm_request_send entering: type 13
Failed password for echo from 192.168.1.1 port 43816 ssh2
debug3: mm_auth_password: user not authenticated [preauth]
debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
답변1
PAM
또한 빈 비밀번호를 허용하겠다고 알려야 합니다 . 일부가 있습니다오래된 튜토리얼이것을 설명합니다. 그러나 간단히 말해서:
sudo sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
일을 해야 합니다.
답변2
정확하게안전한SSH 액세스를 위해서는 다음을 수행해야 합니다.아니요무료로 로그인하려면 인증을 허용하세요. 클라이언트가 비밀번호 없이 사용할 수 있는 인증용 RSA 키를 설정합니다.