如何在没有 root 权限的情况下在 Linux 上使用 SCP 托管文件

如何在没有 root 权限的情况下在 Linux 上使用 SCP 托管文件

我是 Linux 服务器上的用户。我想通过启动 SCP 服务器在服务器上托管文件,类似于通过自定义端口启动 HTTP 服务器。例如“python -m SimpleHTTPServer”。我想当场使用任意用户凭证。例如 user1/password123

我不想使用 root 权限。我该怎么做?

例如:

my-scp-server -p 2222 -U user1 -P password123 -d /tmp

答案1

虽然长期(稳定)解决方案是 Samba/FTP/NFS(但它们需要root访问权限),但如果您需要设置临时服务器,您可以sshd使用适当的选项和配置文件启动。特别是,您可以使用sshd -f ~/.ssh/sshd_config有效~/.ssh/sshd_config的 OpenSSHd 配置文件。

当您以用户身份开始时sshd,或者至少仅对于 SCP 开始时,您可能需要以下配置sshd_config

  • UsePrivilegeSeparation no避免setuidsetgid调用
  • UsePam no避免使用 PAM
  • Port 2022配置自定义端口
  • HostKey指向主机密钥
  • PidFilesshd指向运行时创建的 pid 文件

用作/etc/ssh/sshd_config模板,它还应包含帮助的评论。

然后你可以强制使用 SFTP(参见 的帮助ForceCommand internal-sftp),或者,如果你真的需要 SCP,你可以使用rsshshell(http://pizzashack.org/rssh/)强制仅 SCP 会话。

请注意,使用此配置,所有文件都可以远程访问(在运行进程的用户权限下sshd)。如果您需要限制对某些文件的访问,则应创建/配置chrootChrootDirectorysshd_config或配置chrootpath中使用rssh,并将CAP_SYS_CHROOT功能添加到sshd可执行文件(如果您不想以 身份执行,则需要CAP_SYS_CHROOT以用户身份进行系统调用的功能)。chrootsshdroot

一些参考:

答案2

在这里回答我自己的问题。我从 Enrico 的答案中的一个链接中获得了提示。具体来说,使用 dropbear:https://serverfault.com/a/911709

我所做的是下载 dropbear 源代码并自行构建。我没有看到指定我自己的凭据的选项。因此,我决定通过修改源函数进行概念验证更改,svr-authpasswd.csvr_auth_password()添加了以下行:

    unsigned int changepw;

  + send_msg_userauth_success();

    /* check if client wants to change password */

这样我就可以用任何密码登录。我也可以 scp。它并不理想,因为我无法在受限环境中限制 sshd,而且我也不想让客户端拥有 shell 访问权限。但对于概念验证来说,它是可行的。

相关内容