前言1:应用场景:对于数据量很大的交互,对接方不肯意经过接口方式对接式可采用ftp的方式数据交互。html
A——>上传数据文件到sftp服务器linux
*:须要给A开设一个只用于sftp上传的帐号,而且只能在指定目录下活动。数据库
B——>从sftp服务器上获取数据文件服务器
*:也须要开设一个sftp帐号,权限设置视状况而定。ssh
前言2:服务器版本为Centos6.5, 采用系统自带的internal-sftp, 限制用户只能在本身的目录下活动,这里须要使用到chroot,openssh 4.8p1之后都支持chroot,我如今用的是CentOS 6.5,自带的openssh已是5.3p1,足够了。测试
一、 查看 openssh的版本,若是低于4.8p1,须要自行升级安装ui
# ssh -Vspa
二、 建立sftp组.net
# groupadd sftprest
三、 建立一个sftp用户,名为guest
# useradd -g sftp -s /bin/false guest
*: /bin/false 表示不能经过ssh的方式登陆
四、设置密码
# passwd guest
*:输入两次密码,回车便可。也可经过此命令修改已有的帐号密码。
五、建立用户活动的根目录
# mkdir -p /5108/sftp
# usermod -d /5108/sftp guest
六、配置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保存并退出
七、 设定Chroot目录权限
# chown root:sftp /5108/sftp
# chmod 755 /5108/sftp
*:权限必须为755
八、 创建SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户 guest 已经能够登陆,但使用chroot指定根目录后,根应该是没法写入的,因此要新建一个目录供 guest 上传文件。这个目录全部者为 guest,全部组为sftp,全部者有写入权限,而全部组无写入权限
# mkdir /5108/sftp/ABH
# chown guest:sftp /5108/sftp/ABH
# chmod 755 /5108/sftp/ABH
*: 权限可设置为777,表明组的全部用户都拥有全部权限。
九、 修改/etc/selinux/config文件中的SELINUX="" 为 disabled或者
# setenforce 0
十、 重启sshd服务
# service sshd restart
测试ssh可否登陆:
ssh guest@127.0.0.1
测试sftp可否登陆:
sftp guest@127.0.0.1
到此,咱们已经把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 目录的配置,可更改目录为"/"试试
后续:
第一次在设置第二个帐号的时候,重复建立了目录,设置了权限,因此致使第一个帐号也链接不上。折腾了好久,在此记录下,引觉得戒,之后配置方面的东西,必定要先看懂,了解流程。切记切记......