2019独角兽企业重金招聘Python工程师标准>>>
前言1:应用场景:对于数据量很大的交互,对接方不愿意通过接口方式对接式可采用ftp的方式数据交互。
A——>上传数据文件到sftp服务器
*:需要给A开设一个只用于sftp上传的账号,并且只能在指定目录下活动。
B——>从sftp服务器上获取数据文件
*:也需要开设一个sftp账号,权限设置视情况而定。
前言2:服务器版本为Centos6.5, 采用系统自带的internal-sftp, 限制用户只能在自己的目录下活动,这里需要使用到chroot,openssh 4.8p1以后都支持chroot,我现在用的是CentOS 6.5,自带的openssh已经是5.3p1,足够了。
1、 查看 openssh的版本,如果低于4.8p1,需要自行升级安装
# ssh -V
2、 创建sftp组
# groupadd sftp
3、 创建一个sftp用户,名为guest
# useradd -g sftp -s /bin/false guest
*: /bin/false 表示不能通过ssh的方式登录
4、设置密码
# passwd guest
*:输入两次密码,回车即可。也可通过此命令修改已有的账号密码。
5、创建用户活动的根目录
# mkdir -p /5108/sftp
# usermod -d /5108/sftp guest
6、配置sshd_config
# vi /etc/ssh/sshd_config
找到如下这行,并注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下几行:
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp # 匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /5108/sftp/ # 用chroot将用户的根目录指定到 /5108/sftp/, 可设为"/",代表根目录。
ForceCommand internal-sftp # 指定sftp命令
AllowTcpForwarding no # 允许用户能使用端口转发
X11Forwarding no # 允许用户能使用端口转发
:wq保存并退出
7、 设定Chroot目录权限
# chown root:sftp /5108/sftp
# chmod 755 /5108/sftp
*:权限必须为755
8、 建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户 guest 已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供 guest 上传文件。这个目录所有者为 guest,所有组为sftp,所有者有写入权限,而所有组无写入权限
# mkdir /5108/sftp/ABH
# chown guest:sftp /5108/sftp/ABH
# chmod 755 /5108/sftp/ABH
*: 权限可设置为777,代表组的所有用户都拥有所有权限。
9、 修改/etc/selinux/config文件中的SELINUX="" 为 disabled或者
# setenforce 0
10、 重启sshd服务
# service sshd restart
测试ssh能否登录:
测试sftp能否登录:
sftp [email protected]
到此,我们已经把A的账号建立好了,并已经设置了相应的权限。下面再配置B,也就是我们系统下载文件的账号。
# useradd -g sftp -s /bin/false consftp
# passwd consftp
设置账号后,就能通过sftp的方式登录了,再配置下路径:
# usermod -d /5108/sftp/ABH consftp
参考资料:http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html
理解chroot:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
补充:
groupdel命令:删除组
groupdel 命令用于删除不再需要的组,如果指定的组中包含用户,则必须先删除组里面的用户>以后,才能删除组。
# sudo groupdel test
vipw :
-g, --group 编辑 group 数据库
-h, --help 显示此帮助信息并推出
-p, --passwd 编辑 passwd 数据库
-q, --quiet 安静模式
-R, --root CHROOT_DIR chroot 到的目录
-s, --shadow 编辑 shadow 或 gshadow 数据库
问题:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755
关键是ChrootDirectory /5108/sftp/%u 目录的配置,可更改目录为"/"试试
后续:
第一次在设置第二个账号的时候,重复创建了目录,设置了权限,所以导致第一个账号也连接不上。折腾了很久,在此记录下,引以为戒,以后配置方面的东西,一定要先看懂,了解流程。切记切记......