CentOS 6 下配置 SFTP 备忘

前言

SFTP 在 Linux 环境下搭建很简单,因为 Linux 一般默认支持 SSH(SSH-2.0)协议。

搭建 SFTP 服务,安全的进行文件的传输,Chroot 可以控制用户的访问目录。

参见 https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol

环境说明

CentOS 6.8

配置步骤

1.查看配置

# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

注意,OpenSSH 4.8p1 及以上版本才支持 Chroot。CentOS 6 默认安装 OpenSSH 5.3p1,不用重新编辑即可设置 Chroot

2.修改 sshd_config

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# vi /etc/ssh/sshd_config
//注释掉下面这行
# Subsystem	sftp	/usr/libexec/openssh/sftp-server
	
//添加如下
Subsystem	sftp	internal-sftp
Match Group sftp
    ChrootDirectory /data/sftp/%u
    AllowTcpForwarding no
    X11Forwarding no
	ForceCommand internal-sftp

含义如下

// 使用 sftp 服务使用系统自带的 internal-sftp
Subsystem	sftp	internal-sftp
// 匹配sftp组的用户, 如果有多个组用逗号分割
// 也可以使用 Match User username 匹配用户, 多个用户之间也是用逗号分割
Match Group sftp
	// 用 chroot 将用户的根目录指定到 /data/sftp/%u, %u 代表用户名, %h 表示用户根目录
    ChrootDirectory /data/sftp/%u
	// 禁止用户使用端口转发
    AllowTcpForwarding no
    X11Forwarding no
	ForceCommand internal-sftp

通过如上配置,即可将用户限定在 /data/sftp/%u 目录下。

3.创建用户和组

// 创建目录,与 sshd_config 中的配置一致
# mkdir -p /data/sftp
// 新建组 sftp
# groupadd sftp
// 新建用户,不需要 ssh 登录,不需要 home 目录
# useradd -M -g sftp -s /sbin/nologin sftp1

4.配置目录和权限

# mkdir -p /data/sftp/sftp1
# chmod -R 755 /data/sftp
# chown root:sftp /data/sftp

目录的权限设定有两个要点:

1.由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root
2.由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限755)

因为用了 Chroot,所以 /data/sftp/sftp1 属主一定要是 root,并且所属组不能有写入权限,如果上传需要写入在 /data/sftp/sftp1 下建立可写属主的文件夹供上传使用。

# mkdir -p /data/sftp/sftp1/upload
# chown sftp1:sftp /data/sftp/sftp1/upload

这样 sftp1 用户即可登录并上传文件到 upload 文件夹下。

5.SELinux

CentOS 默认开启 SELinux, 会导致 Chroot 不可用,需要进行如下设置。

# setsebool -P ssh_chroot_full_access on

因为本例没有使用 sshd_config 中没有使用 %h,即用户 home 目录,如果使用 %h,SELinux 进行如下设置

# setsebool -P ssh_chroot_rw_homedirs on

6.测试

# sftp sftp1@localhost
Connecting to localhost...
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
sftp1@localhost's password: 
sftp> ls
upload
sftp> quit

参考资料

CentOS 6 配置 SFTP
SFTP Chroot on CentOS
SFTP+OpenSSH+ChrootDirectory设置

分类: Linux | 评论

blog comments powered by Disqus