Grz*_*cki 5 ssh rsync sshfs sshd
我想创建一个能够做两件事的 ssh 帐户:
sshfs
rsync
我很想有目的地利用ssh
,rsync
而不需要运行额外的rsync
服务器。(主要问题是一个端口仅用于 的可用性ssh
。如果不可能或大大简化了事情,我可能会考虑sshfs
隧道)。
问:到目前为止我sftp
只取得了帐户。然而他们缺少rsync
over ssh
,我想补充一下。
TL;DR:到目前为止,我已经尝试通过选项指向的自定义脚本将“仅 ftp”帐户方法与“允许的命令包装器”方法结合起来ForceCommand
- 这些详细信息如下所述。
sftp
到目前为止我如何获得唯一的帐户到目前为止,我成功地将ssh
帐户配置为仅限于sftp
以下教程:https ://solderintheveins.co.uk/2011/03/ubuntu-sftp-only-account-how-to/
在digest中,主要是通过以下sshd_config
改变实现的:
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
并使帐户只属于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
Run Code Online (Sandbox Code Playgroud)
添加/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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
但终究没有成功。(我执行ssh u@srv ps
并且它被卡住了,而不是像上面提到的例子那样返回 ps 的输出。这里似乎sshd -ddd
也ssh -v
没有帮助)。
因此:我想创建将用于sshfs
和 的帐户rsyncing
。如何使它们正常工作并受到限制以提高安全性?
ForceCommand
不是过滤器,而是强制命令,无论命令行如名称所示。rsync
需要运行不同的命令(据我所知......是的,sshd -ddd
并且ssh -vvv
提供会有所帮助)。
一种可能性是将ChrootDirectory
、删除ForceCommand
和复制rsync
(可能shell
还有一些)及其依赖项 ( ldd /usr/bin/rsync
) 保留给chroot
. 它并不理想,但它应该可以完成工作并隔离用户与文件系统。