sftp到目前为止我如何获得唯一的帐户

sftp到目前为止我如何获得唯一的帐户

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

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

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

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

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

答案2

我找到问题出在哪里了!

当我创建包装器脚本时,我错过了它在 bash 中,并且通过其他教程,我将默认 shell 设置为/usr/lib/sftp-server.

之后,包装器脚本开始工作,我记录了需要允许的命令。

解决方案:

1.恢复外壳(来自/usr/lib/sftp-server),因此包装器可以工作: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 我已将其设为社区 wiki,因此我希望这对于其他可能希望使用 sshfs+rsync 功能且限制 ssh 帐户的人来说更加有用。

相关内容