次の2つのことができるSSHアカウントを作成したいと思います。
- 以下を介してディレクトリをマウントする(1つの可能性があります)
sshfs
- 次のコマンドを使用して、目的のディレクトリのバックアップと復元を実行します。
rsync
追加のサーバーを操作せずにssh
意図的に活用したいと思います。 (主な問題は、1つのポートしか使用できないことです。これが不可能な場合、または作業を大幅に簡素化する場合は、トンネリングを検討できます。)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
ます)。
1つの可能性は、を離れて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機能を使用したい他の人にもっと役立つことを願っています。