前言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 guest@127.0.0.1

到此,我们已经把A的账号建立好了,并已经设置了相应的权限。下面再配置B,也就是我们系统下载文件的账号。

#     useradd -g sftp -s /bin/false  consftp

#     passwd  consftp

设置账号后,就能通过sftp的方式登录了,再配置下路径:

#    usermod -d /5108/sftp/ABH consftp

补充:

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 目录的配置,可更改目录为"/"试试

后续:

第一次在设置第二个账号的时候,重复创建了目录,设置了权限,所以导致第一个账号也连接不上。折腾了很久,在此记录下,引以为戒,以后配置方面的东西,一定要先看懂,了解流程。切记切记......

Logo

更多推荐