CentOS搭建SFTP
目标:实现不同用户只能操作自己目录
登录服务器执行命令
ssh -V
查看openssh版本,版本必须大于4.8p1.创建sftp组:
groupadd sftp
创建用户: 对于每个用户都有自己的上传和下载目录,用户之间目录完全隔离
useradd -g sftp -s /bin/false channel2
passwd channel2
- sftp组的用户的home目录统一指定到
/ecasdata/sftp/
下,按用户名区分,不同用户分配不同目录即可
mkdir -p /ecasdata/sftp/channel2/cf/
mkdir -p /ecasdata/sftp/channel2/batch/
- 配置sshd_config,文本编辑器打开 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
- 找到如下这行,用井号符号注释掉.
# Subsystem sftp /usr/libexec/openssh/sftp-server
- 在文件最后面添加如下几行内容,然后保存.
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /ecasdata/sftp/%u (此处配置sftp组用户的home目录)
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 设定Chroot目录权限
chown root:sftp /ecasdata/sftp/channel2/
chmod 755 /ecasdata/sftp/channel2/
- 给用户设置权限
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chown channel2:sftp /ecasdata/sftp/channel2/batch/
chmod 755 /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/batch/
- 修改/etc/selinux/config,文本编辑器打开/etc/selinux/config
vi /etc/selinux/config
- 将文件中的SELINUX=enforcing 修改为 SELINUX=disabled 然后保存
- 再执行命令:setenforce 0
- 重启sshd服务:
service sshd restart
- 验证sftp环境: sftp [email protected]
快速构建
以channel2为例,创建目录,分配目录权限:
useradd -g sftp -s /bin/false channel2
passwd channel2
输入密码: channel2
确认密码: channel2
mkdir -p /ecasdata/sftp/channel2/cf/
mkdir -p /ecasdata/sftp/channel2/batch/
usermod -d /ecasdata/sftp/channel2/ channel2 修改用户家目录
chown root:sftp /ecasdata/sftp/channel2/
chmod 755 /ecasdata/sftp/channel2/
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chown channel2:sftp /ecasdata/sftp/channel2/batch/
chmod 755 /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/batch/
验证sftp环境: sftp [email protected]
搭建过程中可能遇到的问题
防火墙未关闭,执行命令: service iptables stop
目录权限问题:
每个用户一个目录,注意目录的层次必须是用户名
用户目录(channel2)及其上级目录设置 root:sftp ,权限755
用户目录下子目录设置 channel2:sftp,权限755
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
注意:由于权限是755,导致非root用户都无法在目录中写入文件,所以需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。
例如:
这个目录所有者为channel2,所有组为sftp,所有者有写入权限,而所有组无写入权限
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/cf/
sftp相关命令:
- 上传和下载
sftp> get /var/www/fuyatao/index.php /home/fuyatao/
将从远程主机的 /var/www/fuyatao/目录下将 index.php 下载到本地 /home/fuyatao/目录下。
sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/
把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下
- 删除文件或文件夹
mkdir 创建文件夹
rm 删除文件
rmdir 删除文件夹,但是只能删除空文件夹,因此要使用命令rm folder/* 把文件夹里面的文件先清空, 再rmdir folder。而且还需要是folder里面没有子文件夹的情况。
- nginx配置转发时
sftp -oPort=port username@IP passward
- 参考博客
http://blog.csdn.net/qin_weilong/article/details/69486104
http://blog.csdn.net/xinxin19881112/article/details/46831311
https://www.cnblogs.com/luyucheng/p/6094729.html
http://blog.csdn.net/s277955712/article/details/70172376