centos

CentOS中SFTP如何设置

小樊
41
2025-10-17 14:37:33
栏目: 智能运维

一、安装OpenSSH服务器
CentOS系统通常默认安装OpenSSH服务器,若未安装,可通过以下命令安装:
sudo yum install openssh-server
安装完成后,启动SSH服务并设置为开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd

二、创建专用SFTP用户组与用户
为隔离SFTP用户权限,建议创建专门的用户组(如sftpusers)及用户,并限制其登录方式为SFTP(禁止shell登录):

# 创建用户组
sudo groupadd sftpusers  

# 创建用户(以"sftpuser"为例),指定所属组、禁止shell登录
sudo useradd -g sftpusers -s /sbin/nologin sftpuser  

# 设置用户密码
sudo passwd sftpuser  

输入密码并确认即可。

三、配置用户目录权限
SFTP用户的根目录(由ChrootDirectory指定)必须归属root,且权限为755(防止用户越权修改目录结构);用户需在根目录下创建可写入的子目录(如upload)用于文件上传:

# 创建用户根目录(以用户主目录为例)
sudo mkdir -p /home/sftpuser  

# 设置根目录归属与权限
sudo chown root:root /home/sftpuser  
sudo chmod 755 /home/sftpuser  

# 创建可写入的子目录
sudo mkdir /home/sftpuser/upload  

# 设置子目录归属与权限(用户需对该目录有读写权限)
sudo chown sftpuser:sftpusers /home/sftpuser/upload  
sudo chmod 755 /home/sftpuser/upload  

:若将用户限制在其他目录(如/data/sftp/sftpuser),需同步调整上述路径。

四、修改SSH配置文件(关键步骤)
编辑/etc/ssh/sshd_config文件,通过Match规则针对SFTP用户组进行配置,替换默认的SFTP子系统为更安全的internal-sftp(无需额外进程,性能更好):

sudo vi /etc/ssh/sshd_config

在文件末尾添加以下内容(以sftpusers组为例):

# 启用SFTP子系统(可选,推荐使用internal-sftp替代)
Subsystem sftp internal-sftp  

# 匹配sftpusers组,限制其访问
Match Group sftpusers  
    ChrootDirectory %h  # 将用户限制在其主目录(%h代表用户主目录)  
    ForceCommand internal-sftp  # 强制使用SFTP,禁用SSH shell  
    AllowTcpForwarding no  # 禁止TCP转发(防止端口转发攻击)  
    X11Forwarding no  # 禁止X11转发(避免不必要的图形界面转发)  

说明

五、重启SSH服务应用配置
修改配置文件后,需重启SSH服务使更改生效:
sudo systemctl restart sshd

六、测试SFTP连接
使用SFTP客户端(如命令行、FileZilla或WinSCP)连接服务器,验证配置是否成功:

# 命令行测试(替换为实际用户名和服务器IP)
sftp sftpuser@your_server_ip  

输入密码后,若能成功登录并执行lsputget等命令,则说明配置生效。

七、安全增强措施(可选但推荐)

  1. 使用密钥认证:替代密码登录,提升安全性。生成密钥对后,将公钥添加到用户~/.ssh/authorized_keys文件中,并在sshd_config中设置PasswordAuthentication no
  2. 禁用root登录:在sshd_config中设置PermitRootLogin no,防止root用户通过SFTP登录。
  3. 调整SELinux策略:若启用了SELinux,需允许SFTP访问用户目录。执行以下命令:
    sudo semanage fcontext -a -t sftp_chroot_t "/data/sftp(/.*)?"  # 替换为实际目录  
    sudo restorecon -Rv /data/sftp  
    
  4. 防火墙配置:确保防火墙允许SSH(默认端口22)流量:
    sudo firewall-cmd --permanent --add-service=ssh  
    sudo firewall-cmd --reload  
    ```。

0
看了该问题的人还看了