CentOS7.x上sftp的安装配置


sftp服务简介

sftp是Secure FileTransferProtocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的加密方法。
相比传统的FTP服务,SFTP 显得更加方便、安全,一般系统安装了ssh后,默认就安装了这个服务,我们只要简单的配置一下就可以了。

1)sftp 与 ftp 有着几乎一样的语法和功能
2)SFTP 为 SSH的一部分,是一种传输文件至服务器的安全方式
3)SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作
4)SFTP安全性非常高
5)SSH软件已经包含SFTP安全文件传输子系统

应用场景

1、sftp是基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,如直接修改代码、系统配置等,希望能限制开发人员ssh登录机器,但是可以通过ftp/sftp上传代码文件。
2、项目中一些模块会调用sftp客户端程序,上传文件到服务器,实现相关功能,需要搭建好sftp服务端。

sftp软件安装

yum -y install openssh-server  openssh-clients
ssh -V

配置sftp

创建用户和组

# 创建一个用户组,专门用于sftp用户
groupadd  sftp
# 创建一个用户test,附加到sftp组,不允许登录操作系统
useradd -G sftp -s /bin/false test
passwd --stdin test <<< "Test@123"

SFTP_ROOT=/opt/sftp/chroot
mkdir -p ${SFTP_ROOT}/upload
chown root:test ${SFTP_ROOT}
chown test:sftp ${SFTP_ROOT}/upload
chmod 750 ${SFTP_ROOT}
chmod 750 ${SFTP_ROOT}/upload

编辑配SSH置文件

vim /etc/ssh/sshd_config

# Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# 匹配用户组,如果要匹配多个组,多个组之间用逗号分割
Match Group sftp 
    # %h 指定登陆用户到自己的用户目录  %为相应的家目录 %u为相应的用户名
    chrootDirectory /opt/sftp/chroot
    # 指定 sftp 命令
    ForceCommand internal-sftp
    # 是否允许用户能使用端口转发
    X11Forwarding no
    AllowTcpForwarding no

chrootDirectory目录权限

  • chrootDirectory目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,否则你将在日志中看到错误报错”chroot目录的错误所有权或模式”,用户组可以不是root
  • chrootDirectory目录开始一直往上到系统根目录为止都不可以具有群组写入权限
  • sftp使用chroot指定根目录后,根应是无法写入的,所以要在chrootDirectory目录下新建一个目录如upload,供test用户上传文件,这个目录所有者为test,所有组为sftp,所有者有写入权限,而所有组无写入权限,权限为700、750或者755。
  • 如果 chrootDirectory/upload 权限为700、750或者755,那么只能是 test用户上传文件,如果其他用户属于sftp组,要使其也有上传权限,目录权限需设置为770。

重启sshd服务并测试

# 重启服务
systemctl restart sshd 
systemctl status sshd 
# 测试
sftp test@127.0.0.1

文章作者: darebeat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darebeat !
  目录