作为您的Linode的系统管理员,您可能希望让您的用户能够安全地将文件上传到您的服务器。最常见的方法是允许通过使用SSH提供加密的安全文件传输协议(SFTP)进行文件传输,这要求您为用户提供SSH登录。但是,默认情况下,SSH用户可以查看您的Linode的整个文件系统,这可能是不可取的。
本指南将帮助您配置OpenSSH以限制用户访问其主目录以及仅限SFTP访问。请注意,这些说明并非旨在支持shell登录; 根据本指南修改的任何用户帐户都可以传输文件,但无法登录远程shell会话。
这些说明适用于Ubuntu 9.04,Debian 5及更高版本。不幸的是,与Ubuntu 8.04一起打包的SSH版本太旧,无法支持此配置。
配置OpenSSH
- 使用您喜欢的文本编辑器编辑
/etc/ssh/sshd_config
文件:
vim /etc/ssh/sshd_config - 添加或修改
Subsystem sftp
行,如下所示:
的/ etc / SSH / sshd_config中1
Subsystem sftp internal-sftp - 将此设置块添加到文件末尾:
的/ etc / SSH / sshd_config中1 2 3 4 5
Match Group filetransfer ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp将更改保存到您的文件。
- 重启OpenSSH:
service ssh restart
OpenSSH已成功修改。
修改用户帐户
此部分将为您的用户帐户设置正确的组,所有权和权限。
- 为要限制为SFTP访问权限的用户创建系统组:
addgroup --system filetransfer
- 修改要限制为SFTP的用户帐户。为每个帐户发出以下命令,替换相应的用户名。请记住,这将阻止这些用户登录远程shell会话。
usermod -G filetransfer username chown root:root /home/username chmod 755 /home/username
这些用户现在无法在其主目录中创建文件,因为这些目录由root用户拥有。
- 接下来,您需要为每个用户创建新目录,他们将拥有完全访问权限。为每个用户发出以下命令,更改创建的目录以满足您的需求:
cd /home/username mkdir docs public_html chown username:filetransfer *
您的用户现在应该能够通过SFTP登录他们的帐户并将文件传输到他们指定的子目录或从他们指定的子目录传输文件,但是他们应该无法看到您的Linode文件系统的其余部分。
使用SFTP
sftp
从终端使用:
sftp username@<Your_Linodes_IP>
您可以使用该help
命令查看SFTP shell中您也可以访问的命令。你有能力pwd
,cd
并且ls
,例如。还有一些命令lpwd
会打印本地工作目录。在本地主目录中键入touch test.txt
- 将本地文件传输到远程系统:
cd docs put test.txt
- 从远程系统将文件传输到本地系统:
get test.txt
- 您可以通过导航到SFTP shell中的其他目录并尝试传输文件来测试文件权限。
sftp> put test.txt /tmp/ Uploading test.txt to /tmp/ remote open("/tmp/"): Failure
- 使用该
exit
命令退出会话。
更多信息
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。