![用户只能使用 scp 访问一个目录](https://linux22.com/image/703794/%E7%94%A8%E6%88%B7%E5%8F%AA%E8%83%BD%E4%BD%BF%E7%94%A8%20scp%20%E8%AE%BF%E9%97%AE%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95.png)
我想为我的 Ubuntu 服务器创建一个用户。我将使用此用户将一些文件从服务器复制到我的本地计算机。因此权限应该非常有限。此用户只能访问/一些/路径目录并读取文件。仅此而已。
为了实现这一点,我创建了一个用户:
sudo useradd scp_user -M -d /some/path
sudo groupadd scp_group
sudo usermod scp_user -g scp_group
sudo usermod scp_user -s /bin/false # disable ssh login
sudo chown -R scp_user:scp_group /some/path
在我的 ssh 配置文件中:
Match Group scp_group
ChrootDirectory %h
#ForceCommand scp
AllowTcpForwarding no
但出现错误:
scp scp_user@IP:/some/path/test.zip test.zip
scp_user@IP's password:
Could not chdir to home directory /some/path: No such file or directory
/bin/false: No such file or directory
你能告诉我我遗漏了哪一步吗?
答案1
您的问题存在各种缺陷,正如其他人指出的那样:
- 将
ChrootDirectory
您的用户监禁在他的主目录中 - 在该目录中,没有
/bin/false
可执行文件(也没有/bin/scp
其本身所需的文件scp
)。
您可以:
- 将
scp
二进制文件及其所需的动态加载库复制到 chroot (用户主目录) - 将用户 shell 改回
/bin/bash
或/bin/sh
- 将二进制
bash
文件sh
及其所需的动态加载库复制至 chroot(用户主目录) - (这太糟糕了……)
或者直接使用sftp
:
- 指定
Subsystem sftp internal-sftp
(并可能ForceCommand internal-sftp
)在sshd_config
- 重启
sshd
服务器
您可能还会遇到一些权限问题(请阅读服务器日志中的错误!)。