linux配置sftp及权限设置

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

 

后续:

第一次在设置第二个帐号的时候,重复建立了目录,设置了权限,因此致使第一个帐号也链接不上。折腾了好久,在此记录下,引觉得戒,之后配置方面的东西,必定要先看懂,了解流程。切记切记......

相关文章
相关标签/搜索