Centos7.9配置SFTP教程

本文详细介绍如何在CentOS 7上配置和部署SFTP服务,包括安装、配置、分离SSH和SFTP端口以及一键安装脚本等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、SFTP描述

        SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一种数据流连接,提供文件访问、传输和管理功能的网络传输协议

        SFTP可以为传输文件提供一种安全的加密方法,SFTP为SSH的一部分,采用的是SSH加密隧道,由于这种传输方式使用了加密/解密技术,安装性方面比FTP要强一些,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP

        SFTP与FTP有着几乎一样的语法和功能,SFTP本身没有单独的守护进程,它必须使用sshd守护进程( 端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序

        SFTP依赖的是系统自带的SSH服务,不像FTP还需要额外的进行安装(vsftp服务), SFTP是只要确保你的Linux 账号能连接,SFTP默认连接账号就是Linux root账号和密码

2、配置讲解

        在CentOS7中,sftp只是ssh的一部分,一般最小化安装也会安装sshd相关的服务及配置。所以ssh相关安装在此不做描述,有意者可留言。

2.1 详细配置讲解

  1. 查看是否安装了ssh服务:
    ssh -V
  2. 新建用户和SFTP目录:

    # 创建文件目录
    mkdir -p /home/LdRun/data/sftp/sftpuser
    chown root:root /home/LdRun/data/sftp/sftpuser
    chmod 755 /home/LdRun/data/sftp/sftpuser
    
    # 新建用户组sftp
    groupadd sftp
    # 新建用户sftpuser,并且设置不支持ssh系统登录,只能登录sftp服务器
    # -g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录
    useradd -g sftp -d /home/LdRun/data/sftp/sftpuser -M -s /sbin/nologin sftpuser
    # 设置密码
    # echo "新密码" | passwd --stdin 用户名
    echo "LandPower" | passwd --stdin sftpuser
    
    # 由于/data/sftp/sftpuser的用户是root,其它用户都没有写的权限
    # 所以要在该目录下新建一个目录用于文件的上传下载
    mkdir -p /home/LdRun/data/sftp/sftpuser/upload
    chown sftpuser:sftp /home/LdRun/data/sftp/sftpuser/upload
    chmod 755 /home/LdRun/data/sftp/sftpuser/upload
    

     sftpuser是你为该sftp服务创建的用户名,/home/LdRun/data/sftp/sftpuser为sftp服务器访问路径。

  3. 配置SSH和SFTP服务器

    # 防止后期配置文件出错后无法还原
    [root@centos7 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
    
    [root@centos7 ~]# vi /etc/ssh/sshd_config
    # 修改下面的内容,没有的内容直接新增即可
    # 下面这几项的默认值也是它们,所以这一步可以跳过
    PermitRootLogin yes
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile	.ssh/authorized_keys
    
    # 注释掉这行
    # Subsystem      sftp    /usr/libexec/openssh/sftp-server
    # 文件末尾添加以下内容
    Subsystem sftp internal-sftp
    Match Group sftp
    ChrootDirectory /home/LdRun/data/sftp/%u
    ForceCommand internal-sftp
    # 下面两项是与安全有关
    AllowTcpForwarding no
    X11Forwarding no
  4. 防火墙相关配置:
    firewall-cmd --list-all       					     # 查看已开放的端口
    firewall-cmd --permanent --zone=public --add-port=22/tcp    # 开通sftp服务22默认端口
    firewall-cmd --reload                                       # 刷新防火墙,重新载入
    
  5. 重启sshd服务:
    systemctl restart sshd.service
  6. 测试:

    [root@centos7 upload]# sftp sftpuser:LandPower@192.168.8.203
    sftpuser:sftppassword@192.168.8.203's password:   # 密码输入不显示,正常输入后直接按回车就行
    sftpuser:LandPower@192.168.8.203's password:
    Connected to 192.168.8.203.
    sftp> pwd
    Remote working directory: /
    sftp> put /etc/ssh/sshd
    sshd_config         sshd_config.backup
    
    sftp> put /etc/ssh/sshd_config /upload
    Uploading /etc/ssh/sshd_config to /upload/sshd_config /etc/ssh/sshd_config                                                                                                                                                         100% 3906     9.9MB/s   00:00
    sftp> cd upload/
    sftp> ls
    sshd_config
    
    sftp> get sshd_config /home
    Fetching /upload/sshd_config to /home/sshd_config /upload/sshd_config                                                                                                                                                          100% 3906    10.1MB/s   00:00
    sftp>
    

2.2 SSH和SFTP服务监听端口分离

        sftp,是ssh的功能之一,也就是说是使用SSH协议来传输文件的。
        OS系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。

  1. 拷贝/usr/lib/systemd/system/目录下的sshd.service文件,放到/etc/systemd/system/目录下,命名为sftpd.service
    cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service
  2.  拷贝/etc/pam.d/目录下的sshd文件,放到同目录,命名为sftpd
    cp /etc/pam.d/sshd  /etc/pam.d/sftpd
  3. 拷贝/etc/ssh/目录下的sshd_config文件,放到同目录,命名为sftpd_config 
    cp /etc/ssh/sshd_config  /etc/ssh/sftpd_config
  4. 对service和rcsftpd进行软连接 
    ln -sf  /usr/sbin/service  /usr/sbin/rcsftpd
  5. 对sshd和sftpd进行软连接 
    ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd
  6. 拷贝/etc/sysconfig/目录下的sshd文件,放到同目录,命名为sftp 
    cp /etc/sysconfig/sshd  /etc/sysconfig/sftp
  7. 拷贝/var/run/目录下的sshd.pid文件,放到同目录,命名为sftpd.pid 
    cp /var/run/sshd.pid  /var/run/sftpd.pid
  8. 修改/etc/systemd/system/目录下sftpd.service文件 
    vi /etc/systemd/system/sftpd.service
    
    
    # 作者:wan.tao
    # 时间:2022/09/26
    
    [Unit]
    Description=sftpd server daemon
    Documentation=man:sshd(8) man:sshd_config(5)
    After=network.target sshd-keygen.service
    Wants=sshd-keygen.service
    
    [Service]
    Type=notify
    EnvironmentFile=/etc/sysconfig/sftp
    ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    RestartSec=42s
    
    [Install]
    WantedBy=multi-user.target
    
  9. 修改/etc/ssh/目录下的sftpd_config文件 
    #Port 22
    改成
    Port 2233
    
    #PermitRootLogin yes
    改成
    PermitRootLogin no
    也就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录
    
    #PidFile /var/run/sshd.pid
    改成
    PidFile /var/run/sftpd.pid
    也就是取消该行的注释,并将sshd.pid改成sftpd.pid
    
    Subsystem sftp /usr/libexec/openssh/sftp-server
    注释
    #Subsystem sftp /usr/libexec/openssh/sftp-server,并添以下5行:
    Subsystem sftp internal-sftp      # 指定使用sftp服务使用系统自带的internal-sftp
    Match User sftpuser               # 匹配sftp组的用户,若要匹配多个组,可用逗号分开
    X11Forwarding no                  # 禁止用户使用端口转发
    AllowTcpForwarding no             # 禁止用户使用端口转发
    ForceCommand internal-sftp        # 只能用于sftp登录
    
  10. 清空/var/run/目录下的sftpd.pid文件内容
    > /var/run/sftpd.pid
  11.  禁用selinux
    setenforce 0
    sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config
    
  12. 重启sftpd服务并添加自启动
    systemctl daemon-reload
    
    systemctl restart sftpd
    
    systemctl enable sftpd
    
    sftp -P 2233 sftpuser:LandPower@192.168.8.203
    

3 一键安装脚本

        只包含SFTP安装相关的,其他相关脚本自行添加。

#!/bin/sh
#sftp 根文件地址
RPM_PATH=/home/LdRun/data/sftp

# 创建sftp文件目录
if [ -d $RPM_PATH ];then
  echo "sftp 文件夹存在"
else
  mkdir -p $RPM_PATH/sftpuser
  echo "sftp文件夹不存在,已新创建"
fi
chown root:root $RPM_PATH/sftpuser
chmod 755 $RPM_PATH/sftpuser

# 新建用户组sftp
groupadd sftp
# 新建用户sftpuser,并且设置不支持ssh系统登录,只能登录sftp服务器
# -g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录
useradd -g sftp -d $RPM_PATH/sftpuser -M -s /sbin/nologin sftpuser
# 设置密码
# echo "新密码" | passwd --stdin 用户名
echo "LandPower" | passwd --stdin sftpuser

# 由于/data/sftp/sftpuser的用户是root,其它用户都没有写的权限
# 所以要在该目录下新建一个目录用于文件的上传下载
# 创建sftp文件目录
if [ -d $RPM_PATH/sftpuser/upload ];then
  echo "sftp/upload 文件夹存在"
else
  mkdir -p $RPM_PATH/sftpuser/upload
  echo "sftp/upload 文件夹不存在,已新创建"
fi
chown sftpuser:sftp $RPM_PATH/sftpuser/upload
chmod 755 $RPM_PATH/sftpuser/upload

# 配置sftp
# 防止后期配置文件出错后无法还原
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sed -i "s/Subsystem*/#Subsystem/g" /etc/ssh/sshd_config
sed -i '$a\ Subsystem sftp internal-sftp\n Match Group sftp\n ChrootDirectory /home/LdRun/data/sftp/%u\n ForceCommand internal-sftp\n AllowTcpForwarding no\n X11Forwarding no' /etc/ssh/sshd_config
systemctl restart sshd.service

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值