다음 두 가지 작업을 수행할 수 있는 SSH 계정을 만들고 싶습니다.
- 다음을 통해 디렉토리 마운트(하나일 수 있음)
sshfs
- 다음 명령을 사용하여 원하는 디렉터리의 백업 및 복원을 수행합니다.
rsync
추가 서버를 운영하지 않고도 ssh
의도적 으로 활용하고 싶습니다 . (주된 문제는 하나의 포트만 사용할 수 있다는 것입니다 . 이것이 불가능하거나 작업을 크게 단순화하는 경우 터널링을 고려할 수 있습니다.)rsync
rsync
ssh
sshfs
질문:지금까지는 sftp
계정만 가지고 있습니다. 그러나 그들은 부족 rsync
하다고 ssh
덧붙이고 싶습니다.
간단히 말해서:지금까지 나는 옵션이 가리키는 사용자 정의 스크립트를 통해 "ftp 전용" 계정 접근 방식과 "허용된 명령 래퍼" 접근 방식을 결합해 보았습니다. ForceCommand
자세한 내용은 아래에 나와 있습니다.
sftp
지금까지 유일한 계정을 얻으려면 어떻게 해야 합니까?
지금까지 다음 튜토리얼 ssh
로 제한되도록 계정을 성공적으로 구성했습니다 .sftp
https://solderintheveins.co.uk/2011/03/ubuntu-sftp-only-account-how-to/
sshd_config
요약하면 이는 주로 다음과 같은 변경을 통해 달성됩니다.
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
그리고 계정을 그룹에만 속하게 만드세요 sftponly
.
username=LIMITED_USER
sudo useradd -d /home/${username} -s /usr/lib/sftp-server -M -N -g sftponly ${username}
sudo passwd ${username}
sudo mkdir -p /home/${username}/uploads /home/${username}/.ssh
sudo chown ${username}:sftponly /home/${username}/uploads /home/${username}/.ssh
sudo chmod 700 /home/${username}/.ssh
/usr/lib/sftp-server
에 추가하세요 /etc/shells
.
사용자의 홈 디렉터리가 Ubuntu Server 스타일로 암호화되어 있으므로 인증 키를 다른 위치에 두었습니다( /etc/ssh/sshd_config
, 를 통해 AuthorizedKeysFile /etc/ssh/users_configs/%u/authorized_keys
).
sudo mkdir /etc/ssh/users_configs/${username}
cd /etc/ssh/users_configs/${username}
sudo vim /etc/ssh/users_configs/${username}/authorized_keys
# Here copy desired signature for the purpose from the client
sudo chmod 700 /etc/ssh/users_configs/${username}/authorized_keys
sudo chown ${username}:sftponly /etc/ssh/users_configs/${username}/authorized_keys
"ForceCommand" 관련 문제 rsync
및 지금까지의 시도
설치 과정에서는 문제가 없지만 sshfs
다음과 같은 문제가 발생합니다. 사용자도 설치하도록 허용하려면 어떻게 해야 합니까 rsync
?
다음과 같이 일종의 "명령 필터"(즉, 명령의 하위 집합만 허용)를 제거 ChrootDirectory
하고 변경해 보았습니다 .ForceCommand
https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/:
$ grep -B 1 ForceCommand /etc/ssh/sshd_config
Match group sftponly
ForceCommand /etc/ssh/wrapper.sh
$ sudo cat /etc/ssh/wrapper.sh
#!/bin/sh
(
echo -n '# '
date
echo $SSH_ORIGINAL_COMMAND
) >> /home/"${USER}"/.ssh_commands_history
case "$SSH_ORIGINAL_COMMAND" in
"allowed_command")
eval $SSH_ORIGINAL_COMMAND
;;
*)
echo ERROR;
exit 1
;;
esac
$ sudo touch /home/LIMITED_USER/.ssh_commands_history
$ sudo chown LIMITED_USER:sftponly /home/LIMITED_USER/.ssh_commands_history
$ sudo chmod 0700 /home/LIMITED_USER/.ssh_commands_history
그러나 그것은 효과가 없었습니다. (실행했는데 ssh u@srv ps
위에서 언급한 예처럼 ps의 출력을 반환하는 대신 멈췄습니다. 여기서도 도움이 되지 sshd -ddd
않는 것 같습니다 ssh -v
.)
sshfs
그래서: 및 에 사용될 계정을 만들고 싶습니다 rsyncing
. 보안 강화를 위해 어떻게 제대로 작동하고 제한할 수 있나요?
답변1
ForceCommand
예아니요필터이지만 이름에서 알 수 있듯이 명령줄에 관계없이 필수 명령입니다. rsync
다른 명령을 실행해야 합니다(내가 아는 한... 예, 제공하는 sshd -ddd
것이 ssh -vvv
도움이 될 것입니다).
한 가지 가능성은 을 떠나 ChrootDirectory
삭제 하고 (아마도 일부 ) 및 해당 종속성( )을 에 ForceCommand
복사하는 것입니다 . 이상적이지는 않지만 작업을 완료하고 사용자를 파일 시스템에서 격리해야 합니다.rsync
shell
ldd /usr/bin/rsync
chroot
답변2
문제가 무엇인지 알아냈습니다!
래퍼 스크립트를 만들 때 bash에 있는 것을 놓쳤고 다른 튜토리얼에서는 기본 셸을 /usr/lib/sftp-server
.
그 후 래퍼 스크립트가 작동하기 시작했고 허용되어야 하는 명령을 기록했습니다.
해결책:
/usr/lib/sftp-server
1. 래퍼가 작동하도록 셸(에서)을 복원합니다 .usermod -s /bin/bash LIMITED_USER
2. 래퍼 스크립트에 적절한 허용 명령을 추가했습니다.
'internal-sftp')
/usr/lib/sftp-server
;;
'/bin/true' \
|'rsync --server --sender -logDtpre.iLsfxC . /home/LIMITED_USER' \
|'rsync --server --sender -vlogDtpre.iLsfxC . /home/LIMITED_USER')
eval $SSH_ORIGINAL_COMMAND 2>>${LOGFILE}
exit $?
;;
rsync 명령과 같이 허용하려는 정확한 명령의 경우 해당 명령을 실행하고 /user/LIMITED_USER/.ssh_commands_history
래퍼 스크립트가 기록하는 위치에서 복사해 보세요.
PS 저는 이것을 커뮤니티 위키로 만들었으므로 제한된 ssh 계정으로 sshfs+rsync 기능을 사용하려는 다른 사람들에게 더 유용하길 바랍니다.