我是 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
避免setuid
和setgid
调用UsePam no
避免使用 PAMPort 2022
配置自定义端口HostKey
指向主机密钥PidFile
sshd
指向运行时创建的 pid 文件
用作/etc/ssh/sshd_config
模板,它还应包含帮助的评论。
然后你可以强制使用 SFTP(参见 的帮助ForceCommand internal-sftp
),或者,如果你真的需要 SCP,你可以使用rssh
shell(http://pizzashack.org/rssh/)强制仅 SCP 会话。
请注意,使用此配置,所有文件都可以远程访问(在运行进程的用户权限下sshd
)。如果您需要限制对某些文件的访问,则应创建/配置chrootChrootDirectory
在sshd_config
或配置chrootpath
中使用rssh
,并将CAP_SYS_CHROOT
功能添加到sshd
可执行文件(如果您不想以 身份执行,则需要CAP_SYS_CHROOT
以用户身份进行系统调用的功能)。chroot
sshd
root
一些参考:
答案2
在这里回答我自己的问题。我从 Enrico 的答案中的一个链接中获得了提示。具体来说,使用 dropbear:https://serverfault.com/a/911709
我所做的是下载 dropbear 源代码并自行构建。我没有看到指定我自己的凭据的选项。因此,我决定通过修改源函数进行概念验证更改,svr-authpasswd.c
并svr_auth_password()
添加了以下行:
unsigned int changepw;
+ send_msg_userauth_success();
/* check if client wants to change password */
这样我就可以用任何密码登录。我也可以 scp。它并不理想,因为我无法在受限环境中限制 sshd,而且我也不想让客户端拥有 shell 访问权限。但对于概念验证来说,它是可行的。