温馨提示×

sftp在centos上的配置教程

小樊
47
2025-10-19 18:46:21
栏目: 智能运维

SFTP在CentOS上的配置教程

一、前置准备

确保CentOS系统已安装OpenSSH服务器(默认已安装)。若未安装,可通过以下命令安装:

sudo yum install -y openssh-server

启动SSH服务并设置开机自启:

sudo systemctl start sshd
sudo systemctl enable sshd

二、创建SFTP专用用户组与用户

  1. 创建SFTP用户组
    新建一个专门用于管理SFTP用户的组(如sftpusers),用于集中控制SFTP访问权限:

    sudo groupadd sftpusers
    
  2. 创建SFTP用户并设置密码
    创建用户时,指定其主组为sftpusers,并设置登录Shell为/sbin/nologin(禁止SSH登录,仅允许SFTP):

    sudo useradd -m -G sftpusers -s /sbin/nologin sftpuser1
    sudo passwd sftpuser1  # 按提示设置密码
    

    注:-m参数会自动创建用户家目录(如/home/sftpuser1),-s /sbin/nologin禁止用户通过SSH登录系统。

三、配置SSH服务以启用SFTP

编辑SSH主配置文件/etc/ssh/sshd_config,修改以下内容:

sudo vi /etc/ssh/sshd_config
  1. 注释默认的SFTP子系统(避免与新配置冲突):
    找到#Subsystem sftp /usr/libexec/openssh/sftp-server,删除行首的#并注释掉:

    #Subsystem sftp /usr/libexec/openssh/sftp-server
    
  2. 添加自定义SFTP配置
    在文件末尾添加以下内容,限制sftpusers组的用户只能通过SFTP访问,且被“关”在自己的家目录(Chroot)中:

    Subsystem sftp internal-sftp  # 使用系统内置的SFTP服务(无需额外进程,性能更好)
    
    Match Group sftpusers  # 匹配sftpusers组的用户
        ChrootDirectory %h  # 将用户的根目录锁定为其家目录(如/home/sftpuser1)
        ForceCommand internal-sftp  # 强制使用SFTP命令,禁止SSH shell访问
        AllowTcpForwarding no  # 禁止TCP转发(增强安全性)
        X11Forwarding no  # 禁止X11转发
    
  3. 保存并退出
    Esc键,输入:wq保存文件。

四、设置Chroot目录权限

Chroot目录(用户的家目录)的权限必须正确,否则会导致SFTP连接失败:

  1. 设置家目录所有权
    将用户的家目录所有者设为root,所属组设为sftpusers(确保用户无法修改家目录结构):

    sudo chown root:root /home/sftpuser1
    sudo chmod 755 /home/sftpuser1  # 目录权限为755(root可读写执行,用户可读执行)
    
  2. 创建用户可写入的子目录
    用户需要在Chroot目录下有一个可写入的子目录(如upload)用于上传文件:

    sudo mkdir -p /home/sftpuser1/upload
    sudo chown sftpuser1:sftpusers /home/sftpuser1/upload  # 子目录所有者为用户,所属组为sftpusers
    sudo chmod 755 /home/sftpuser1/upload  # 子目录权限为755(用户可读写执行,组可读执行)
    

五、处理SELinux问题(可选但推荐)

若系统启用了SELinux(默认开启),需调整SELinux策略以允许SFTP访问:

  1. 查看SELinux状态

    sestatus
    

    若输出中SELinux statusenabled,则需调整策略。

  2. 修改SELinux布尔值
    允许SSH访问用户家目录:

    sudo setsebool -P ssh_chroot_rw_homedirs on
    
  3. 修改SELinux上下文
    将用户的upload目录设置为sftp_t类型(允许SFTP访问):

    sudo semanage fcontext -a -t sftp_t "/home/sftpuser1/upload(/.*)?"
    sudo restorecon -Rv /home/sftpuser1/upload
    

六、重启SSH服务并测试

  1. 重启SSH服务
    应用配置文件的修改:

    sudo systemctl restart sshd
    
  2. 测试SFTP连接
    在本地终端使用SFTP客户端连接服务器,验证配置是否成功:

    sftp sftpuser1@your_server_ip
    

    若连接成功,会显示sftp>提示符,表示配置生效。

常见问题解决

  1. 连接报错“Write failed: Broken pipe Couldn’t read packet: Connection reset by peer”
    原因:Chroot目录的权限不正确(非root所有或权限过宽)。
    解决:确保Chroot目录(如/home/sftpuser1)的所有者为root,权限为755

  2. 无法上传文件到upload目录
    原因:upload目录的所有者或权限不正确。
    解决:确保upload目录的所有者为SFTP用户(如sftpuser1),所属组为sftpusers,权限为755

通过以上步骤,即可在CentOS上完成SFTP服务器的配置,实现安全的文件传输功能。

0