在Ubuntu上创建SFTP(SSH文件传输协议)账号,你可以按照以下步骤进行操作:
1. 确保你已经安装了OpenSSH服务器软件包。如果没有安装,可以使用以下命令安装:
```
sudo apt update
sudo apt install openssh-server
```
2. 创建一个新的系统用户。你可以使用以下命令创建用户,其中`username`是你要创建的用户名:
```
sudo adduser username
```
3. 配置SFTP访问权限。编辑SSH服务器的配置文件`/etc/ssh/sshd_config`,使用你喜欢的文本编辑器(如nano)进行编辑:
```
sudo nano /etc/ssh/sshd_config
```
4. 在配置文件的末尾添加以下行,用于限制SFTP用户的访问:
```
Match User sftp_test
ForceCommand internal-sftp
ChrootDirectory /home/sftp_test
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
```
注意将`username`替换为你创建的用户名,并将`/home/sftp_test`替换为用户将被限制在其中的目录路径。
5. 保存并关闭配置文件。
6. 重新加载SSH服务器配置,使更改生效:
```
sudo service ssh reload
```
现在,你已经成功创建了一个SFTP账号,并限制了用户的访问权限。用户只能通过SFTP协议访问指定的目录,而不能执行shell命令。
7. 遇到如下报错
[root@Ubuntu~]# sftp sftp-test@10.0.0.146
sftp-test@10.0.0.146's password:
packet_write_wait: Connection to 10.0.0.146 port 22: Broken pipe
Couldn't read packet: Connection reset by peer
ChrootDirectory 设定不当,会导致sftp链接时直接抛出 Connection reset 错误。
ChrootDirectory 指定的目录以及其所有父目录,拥有者都必须是root。其所有权限都要小于等于755。任意一个大于755都会导致Connection reset问题
下面修改/home/sftp_test权限,改成750
那给/home/sftp_test权限设置成770, /home/sftp_test root:sftp 770呢,这样设置又不能登录了,因为违法了ChrootDirectory所禁锢住的目录权限不能超过755。
可以让用户上传的方法是在/home/sftp_test目录下新建一个upload(随便什么名字都可以),属主是sftp_test,给rwx权限,这样用户在这个目录下可以进行所有操作。
root@dimeno-Ubuntu-01 14:44:45:/home$ls -al
drwxr-xr-x 6 root root 4096 6月 13 14:26 sftp_test
root@dimeno-Ubuntu-01 14:44:50:/home$ls -al sftp_test/
drwxr-xr-x 2 sftp_test sftp_test 4096 6月 13 14:27 sftp_test
root@dimeno-Ubuntu-01 14:44:53:/home$