Linux如何限制指定账户不能SSH只能SFTP在指定目录
原创Linux怎样约束指定账户不能SSH只能SFTP在指定目录
在Linux系统中,为了节约稳固性,我们常常需要对用户账户进行约束,比如只允许使用SFTP进行文件传输,而不允许使用SSH进行远程登录。下面将详细介绍怎样在Linux系统中实现这一需求。
### 1. 创建指定账户
首先,我们需要创建一个指定的用户账户,用于后续的配置。
bash
sudo useradd -m -d /home/sftpuser sftpuser
这条命令会创建一个名为`sftpuser`的用户,并为其设置家目录`/home/sftpuser`。
### 2. 设置密码
为该账户设置一个密码,确保账户的稳固性。
bash
sudo passwd sftpuser
按照提示输入两次密码,完成密码设置。
### 3. 配置SSH无密码登录
为了方便使用SFTP,我们需要配置SSH无密码登录。
1. 生成SSH密钥对:
bash
ssh-keygen -t rsa -b 2048
2. 将公钥复制到用户家目录的`authorized_keys`文件中:
bash
ssh-copy-id -i ~/.ssh/id_rsa.pub sftpuser@主机IP
3. 修改SSH配置文件,允许无密码登录:
bash
sudo nano /etc/ssh/sshd_config
找到以下配置行,并取消注释:
bash
PermitRootLogin no
PasswordAuthentication no
4. 重启SSH服务:
bash
sudo systemctl restart sshd
### 4. 配置SFTP权限
为了约束用户只能通过SFTP访问指定目录,我们需要修改SFTP配置文件。
1. 修改SFTP配置文件:
bash
sudo nano /etc/ssh/sftp_config
2. 添加以下配置:
bash
# 允许SFTP访问
Subsystem sftp internal-sftp
# 设置SFTP权限
Match User sftpuser
ChrootDirectory /home/sftpuser
X11Forwarding no
AllowTcpForwarding no
EmptyPassword no
ForceCommand internal-sftp
这条配置将用户`sftpuser`的SFTP访问权限约束在`/home/sftpuser`目录下,并禁用了X11和TCP转发。
### 5. 配置防火墙
为了确保稳固性,我们需要在防火墙中允许SFTP端口(默认为22)的访问。
1. 修改防火墙配置文件:
bash
sudo nano /etc/firewalld/zones/public.xml
2. 添加以下配置:
xml
3. 重启防火墙:
bash
sudo systemctl restart firewalld
### 6. 测试SFTP访问
在客户端,使用SFTP客户端工具(如FileZilla)连接到服务器,并使用`sftpuser`账户登录。如果配置正确,你应该只能访问到`/home/sftpuser`目录,无法访问其他目录。
### 总结
通过以上步骤,我们顺利约束了指定账户只能通过SFTP访问指定目录,节约了系统的稳固性。在实际应用中,可以结合具体需求调整配置,以约为最佳效果。