sftpこれまでに唯一のアカウントを取得するにはどうすればよいですか?

sftpこれまでに唯一のアカウントを取得するにはどうすればよいですか?

次の2つのことができるSSHアカウントを作成したいと思います。

  • 以下を介してディレクトリをマウントする(1つの可能性があります)sshfs
  • 次のコマンドを使用して、目的のディレクトリのバックアップと復元を実行します。rsync

追加のサーバーを操作せずにssh意図的に活用したいと思います。 (主な問題は、1つのポートしか使用できないことです。これが不可能な場合、または作業を大幅に簡素化する場合は、トンネリングを検討できます。)rsyncrsyncsshsshfs

質問:これまではsftpアカウントのみ持っています。しかし、彼らは足りないrsyncssh付け加えたいです。

簡単に言うと:これまで、私はオプションが指すカスタムスクリプトを介して「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

次のように、ある種の「コマンドフィルタ」(つまり、コマンドのサブセットのみを許可)を削除して変更してみましたChrootDirectoryForceCommandhttps://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ます)。

1つの可能性は、を離れて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機能を使用したい他の人にもっと役立つことを願っています。

関連情報