sftp지금까지 유일한 계정을 얻으려면 어떻게 해야 합니까?

sftp지금까지 유일한 계정을 얻으려면 어떻게 해야 합니까?

다음 두 가지 작업을 수행할 수 있는 SSH 계정을 만들고 싶습니다.

  • 다음을 통해 디렉토리 마운트(하나일 수 있음)sshfs
  • 다음 명령을 사용하여 원하는 디렉터리의 백업 및 복원을 수행합니다.rsync

추가 서버를 운영하지 않고도 ssh의도적 으로 활용하고 싶습니다 . (주된 문제는 하나의 포트만 사용할 수 있다는 것입니다 . 이것이 불가능하거나 작업을 크게 단순화하는 경우 터널링을 고려할 수 있습니다.)rsyncrsyncsshsshfs

질문:지금까지는 sftp계정만 가지고 있습니다. 그러나 그들은 부족 rsync하다고 ssh덧붙이고 싶습니다.

간단히 말해서:지금까지 나는 옵션이 가리키는 사용자 정의 스크립트를 통해 "ftp 전용" 계정 접근 방식과 "허용된 명령 래퍼" 접근 방식을 결합해 보았습니다. ForceCommand자세한 내용은 아래에 나와 있습니다.

sftp지금까지 유일한 계정을 얻으려면 어떻게 해야 합니까?

지금까지 다음 튜토리얼 ssh로 제한되도록 계정을 성공적으로 구성했습니다 .sftphttps://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하고 변경해 보았습니다 .ForceCommandhttps://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복사하는 것입니다 . 이상적이지는 않지만 작업을 완료하고 사용자를 파일 시스템에서 격리해야 합니다.rsyncshellldd /usr/bin/rsyncchroot

답변2

문제가 무엇인지 알아냈습니다!

래퍼 스크립트를 만들 때 bash에 있는 것을 놓쳤고 다른 튜토리얼에서는 기본 셸을 /usr/lib/sftp-server.

그 후 래퍼 스크립트가 작동하기 시작했고 허용되어야 하는 명령을 기록했습니다.

해결책:

/usr/lib/sftp-server1. 래퍼가 작동하도록 셸(에서)을 복원합니다 .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 기능을 사용하려는 다른 사람들에게 더 유용하길 바랍니다.

관련 정보