CentOS 配置 sftp 服务

简介: CentOS 配置 sftp 服务

检查 openssh 版本

如果需要使用 ChrootDirectory 参数配置用户访问的默认路径,openssh 的版本不能低于 4.8
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

创建 sftp 用户

Linux 系统内已存在的用户,都是可以直接使用 sftp 服务,创建用户是为了一些特殊的场景使用,做一些区分

for-sftp 用户的登录 shell 指定为 /sbin/nologin ,不让 for-sftp 用户可以通过 ssh 命令登录到服务器

useradd for-sftp -s /sbin/nologin
for-sftp 用户设置密码
echo for-sftp | passwd --stdin for-sftp

配置 sftp

多备份,少跑路
cp /etc/ssh/sshd_config{,.bak}
可以直接过滤 sftp 关键字
# 注释掉下面的这行内容,因为配置的 for-sftp 用户没有登录 shell 的权限
## 不注释的话,登录的时候会返回报错:Received message too long 1416128883
# Subsystem sftp /usr/libexec/openssh/sftp-server
# 修改成下面的方式来打开 sftp 服务
Subsystem sftp internal-sftp
# Match User 后面的配置内容,只对 Match User 指定的用户生效,多个用户以逗号分隔
## 也可以配置成 Match Group,对指定的组生效,同样,多个组以逗号分隔
Match User for-sftp
# 指定 sftp 登录的默认路径
## 目录必须存在,否则 sftp 连接会报错
ChrootDirectory /data/sftp
# 指定 sftp 命令
ForceCommand internal-sftp
  • 配置了 ChrootDirectory 时,sftp 对于 ChrootDirectory 目录的权限要求比较死

    • 不允许 ChrootDirectory属组有写入权限,也就是最高只支持 750755 两种权限
    • ChrootDirectory属主必须是 root 用户

      • 不满足以上两种条件时,用 for-sftp 用户登录 sftp 会报错:

        • packet_write_wait: Connection to <ip地址> port 22: Broken pipe
        • Couldn't read packet: Connection reset by peer

重启 sshd 服务

重启 sshd 服务才能使 sftp 配置生效
systemctl restart sshd

如果出现了以下报错

Directive 'Protocol' is not allowed within a Match block

那说明 /etc/ssh/sshd_config 配置文件内开了 Protocol 这个配置,需要把 sftp 相关的配置,移到 Protocol 后面几行就行,可以直接放到配置文件最后的地方,然后重启 sshd 服务就可以解决

创建 ChrootDirectory

  • -m 750 - 指定目录创建时的权限

    • -m 只会指定创建时的最后一级目录,不影响前面的父级目录
  • -p - 父级目录不存在时,创建父级目录
  • 要给 ChrootDirectory 配置一个 for-sftp 组的权限,否则 for-sftp 用户也没权限进入到自己有权限的路径下搞事情
mkdir /data/sftp -m 750 -p
chown root.for-sftp /data/sftp
sftp 配置了 ChrootDirectory 后,就只能查看文件,没办法上传文件,所以要在 ChrootDirectory 目录下在创建一个 for-sftp 用户有权限的路径,就可以上传文件了
mkdir /data/sftp/for-sftp
chown for-sftp.for-sftp /data/sftp/for-sftp

登录 sftp 搞事情

图省事,我就直接使用 localhost 了
sftp for-sftp@localhost
for-sftp@localhost's password:
Connected to localhost.
sftp> ls
for-sftp
sftp> cd for-sftp/
sftp> ls
sftp> put anaconda-ks.cfg
Uploading anaconda-ks.cfg to /for-sftp/anaconda-ks.cfg
anaconda-ks.cfg                                                      100% 1526     2.8MB/s   00:00
sftp> ls
anaconda-ks.cfg
然后我们就把本地的 anaconda-ks.cfg 文件上传到 sftp 服务器上了,当我们查看 ChrootDirectory 目录的 for-sftp 目录下就会有 anaconda-ks.cfg 这个文件了

sftp 常用命令

登录到 sftp 服务器之后,输入 help 就可以查看所有的命令了
Available commands:
# 退出 sftp
bye                                Quit sftp
# 进入到 sftp 内指定的路径
cd path                            Change remote directory to 'path'
# 修改 sftp 内指定路径的属租
chgrp grp path                     Change group of file 'path' to 'grp'
# 修改 sftp 内指定路径的权限 [ ugo 权限]
chmod mode path                    Change permissions of file 'path' to 'mode'
# 修改 sftp 内指定路径的所有者
chown own path                     Change owner of file 'path' to 'own'
# 查看 sftp 内指定路径的统计信息
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
# 退出 sftp
exit                               Quit sftp
# 从 sftp 下载文件到本地
get [-afPpRr] remote [local]       Download file
# 恢复下载
reget [-fPpRr] remote [local]      Resume download file
# 恢复上传
reput [-fPpRr] [local] remote      Resume upload file
# 查看帮助
help                               Display this help text
# 修改本地所在路径
lcd path                           Change local directory to 'path'
# 查看本地路径下的文件详情
lls [ls-options [path]]            Display local directory listing
# 本地创建路径
lmkdir path                        Create local directory
# 生成连接文件
ln [-s] oldpath newpath            Link remote file (-s for symlink)
# 显示本地所在路径
lpwd                               Print local working directory
# 同 linux 查看指定路径下有哪些文件
ls [-1afhlnrSt] [path]             Display remote directory listing
# 设置本地 umask
lumask umask                       Set local umask to 'umask'
# sftp 内创建目录
mkdir path                         Create remote directory
# 切换进度表的显示
progress                           Toggle display of progress meter
# 本地文件上传到 sftp 内
put [-afPpRr] local [remote]       Upload file
# 显示 sftp 内当前所在路径
pwd                                Display remote working directory
# 退出 sftp
quit                               Quit sftp
# sftp 内文件重命名
rename oldpath newpath             Rename remote file
# sftp 内删除文件
rm path                            Delete remote file
# sftp 内删除目录
rmdir path                         Remove remote directory
# 生成连接文件
symlink oldpath newpath            Symlink remote file
# 查看 sftp 版本
version                            Show SFTP version
# 在本地执行命令
!command                           Execute 'command' in local shell
# 逃到本地 [ 其实就是退出 sftp ]
!                                  Escape to local shell
# 显示帮助
?                                  Synonym for help
目录
相关文章
|
3月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
326 1
|
2月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
190 2
|
3月前
|
监控 安全 Linux
CentOS7下安装配置ntp服务的方法教程
通过以上步骤,您不仅能在CentOS 7系统中成功部署NTP服务,还能确保其配置合理、运行稳定,为系统时间的精确性提供保障。欲了解更多高级配置或遇到特定问题,提供了丰富的服务器管理和优化资源,可作为进一步学习和求助的平台。
258 1
|
3月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
150 1
|
3月前
|
存储 监控 Linux
在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践
本文详细介绍了在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践,包括使用 `fdisk` 创建分区、`mkfs` 格式化分区、创建挂载点、编辑 `/etc/fstab` 实现永久挂载等步骤,旨在有效管理服务器磁盘空间,提高系统稳定性和可维护性。
449 1
|
3月前
|
安全 Linux 数据库连接
CentOS 7环境下DM8数据库的安装与配置
【10月更文挑战第16天】本文介绍了在 CentOS 7 环境下安装与配置达梦数据库(DM8)的详细步骤,包括安装前准备、创建安装用户、上传安装文件、解压并运行安装程序、初始化数据库实例、配置环境变量、启动数据库服务、配置数据库连接和参数、备份与恢复、以及安装后的安全设置、性能优化和定期维护等内容。通过这些步骤,可以顺利完成 DM8 的安装与配置。
429 0
|
3月前
|
Linux
CentOS-Stream-9配置chfs
通过上述步骤,您就可以在CentOS Stream 9上配置并运行CHFS,为用户提供基于HTTP的文件分享服务。请注意,实际操作时应根据CHFS的具体版本和文档进行适当调整。
76 0
|
Linux 网络安全 数据安全/隐私保护
|
Linux 网络安全 数据安全/隐私保护
CentOS 7.4 配置sftp服务
CentOS 7.4 配置sftp服务
503 0
|
2月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。