CentOS配置SFTP

@创建用户组和用户,设置用户密码
#groupadd sftp
#useradd -g sftp -s /bin/false sftpuser1
#passwd sftpuser1

@创建用户home目录并指定给用户
#mkdir -p /data/sftp/sftpuser1
#usermod -d /data/sftp/sftpuser1 sftpuser1

@设置目录权限
#chown root:sftp /data/sftp/sftpuser1
#chmod 755 /data/sftp/sftpuser1
@创建可写目录(根目录不可写入)
#mkdir /data/sftp/sftpuser1/upload
#chown sftpuser1:sftp /data/sftp/sftpuser1/upload
#chmod 755 /data/sftp/sftpuser1/upload

@修改SSH服务配置文件
#vi /etc/ssh/sshd_config
找到如下这行,用#符号注释掉,大致在文件末尾处。
# Subsystem      sftp    /usr/libexec/openssh/sftp-server
在文件最后面添加如下几行内容,然后保存。
Subsystem      sftp    internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no

@重启SSH服务
#service sshd restart

@常见错误:
===========================
problem:
/var/log/messages
error: Could not get shadow information for root

solution:
/etc/ssh/sshd_config
UsePAM yes
==================================
problem:
/var/log/secure
Accepted password for test from 182.92.214.3 port 14153 ssh2
pam_unix(sshd:session): session opened for user test by (uid=0)
syslogin_perform_logout: logout() returned an error
[root@client ~]# ssh test@hostname
test@hostname’s password:
login: Permission denied
Connection to hostname closed.

solution:
UseLogin no
===================================
problem:
Write failed: Broken pipe
solution:
错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
===================================
只允许sftp用户用密码登录
Match Group sftp后面增加:
PasswordAuthentication yes