如何使 ssh 帐户只能使用 sshfs 和 rsync?

Grz*_*cki 5 ssh rsync sshfs sshd

我想创建一个能够做两件事的 ssh 帐户:

  • 通过以下方式安装(可以是一个)目录sshfs
  • 使用以下命令执行他/她所需目录的备份和恢复rsync

我很想有目的地利用sshrsync而不需要运行额外的rsync服务器。(主要问题是一个端口仅用于 的可用性ssh。如果不可能或大大简化了事情,我可能会考虑sshfs隧道)。

问:到目前为止我sftp只取得了帐户。然而他们缺少rsyncover 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)

“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
Run Code Online (Sandbox Code Playgroud)

但终究没有成功。(我执行ssh u@srv ps并且它被卡住了,而不是像上面提到的例子那样返回 ps 的输出。这里似乎sshd -dddssh -v没有帮助)。

因此:我想创建将用于sshfs和 的帐户rsyncing。如何使它们正常工作并受到限制以提高安全性?

Jak*_*uje 1

ForceCommand不是过滤器,而是强制命令无论命令行如名称所示。rsync需要运行不同的命令(据我所知......是的,sshd -ddd并且ssh -vvv提供会有所帮助)。

一种可能性是将ChrootDirectory、删除ForceCommand和复制rsync(可能shell还有一些)及其依赖项 ( ldd /usr/bin/rsync) 保留给chroot. 它并不理想,但它应该可以完成工作并隔离用户与文件系统。