为web项目搭建sftp服务器

来源:互联网 发布:淘宝有客服电话 编辑:程序博客网 时间:2024/06/07 09:23
一.目标:为基于nginx多web项目搭建sftp服务器,可以让公司内部员工自己部署项目到指定目录(其活动也基于此指定目录)

二.条件:
    1.系统:CentOS 7.x x86_64
    2.ssh 必须大于v4.8
    3.web目录结构
/data
├── lost+found
├── nginx//存放nginx相关配置文件
│   └── vhosts
│       └── default.conf
├── sftp //存放sftp相关配置文件
│   └── web_sftp.conf
└── web //存放web项目
   └── x1.ttp2016.com
       ├── Code
       │   └── index.php

       └── info


三.需求分析:
    1、线上服务器对安全要求高些,sftp比ftp更安全
    2、线上服务器需要对用户需要控制,只能让用户在自己的home目录下活动
    3、用户只能使用sftp,不能ssh到机器进行操作

过程:
1.查看ssh的版本,需大于4.8版本
<span style="white-space:pre"></span># ssh -V
 
2.创建sftp组,利于添加多用户
<span style="line-height: 22.4px;"><span style="white-space: pre;"></span># groupadd sftp</span>
 
3.创建第一个sftp用户ttp2016
<span style="white-space:pre"></span># useradd -g sftp -s /bin/false ttp2016<span style="white-space:pre"></span># passwd ttp2016<span style="white-space:pre"></span>//密码为ttp2010

4.sftp组的用户home目录指定到/data/web下(此目录为web服务器目录),先新建一个web目录x1.ttp2016.com,然后指定ttp2016的home为/data/web/x1.ttp2016.com
<span style="white-space:pre"></span># mkdir -p /data/web/x1.ttp2016.com<span style="white-space:pre"></span># usermod -d /data/web/x1.ttp2016.com ttp2016

5.配置sshd_config
<span style="white-space:pre"></span># vi /etc/ssh/sshd_config<span style="white-space:pre"></span>//找到这行并注释掉<span style="white-space:pre"></span>Subsystemsftpinternal-sftp

//添加如下一行    
<span style="white-space:pre"></span>include /data/sftp/web_sftp.conf

//编辑web_sftp.conf文件
<span style="white-space:pre"></span># vi /data/sftp/web_sftp.conf
//添加如下    
//基于用户组sftp的控制
<span style="white-space:pre"></span>Subsystem       sftp    internal-sftp      <span style="white-space:pre"></span>Match Group sftp    <span style="white-space:pre"></span>ChrootDirectory /data/web    <span style="white-space:pre"></span>ForceCommand    internal-sftp    <span style="white-space:pre"></span>AllowTcpForwarding no    <span style="white-space:pre"></span>X11Forwarding no

//基于用户ttp2016的控制
<span style="white-space:pre"></span>Subsystem       sftp    internal-sftp      <span style="white-space:pre"></span>Match User ttp2016    <span style="white-space:pre"></span>ChrootDirectory /data/web/x2.ttp2016.com或/data/web/%u    <span style="white-space:pre"></span>ForceCommand    internal-sftp    <span style="white-space:pre"></span>AllowTcpForwarding no    <span style="white-space:pre"></span>X11Forwarding no

具体意思

    Subsystem       sftp    internal-sftp  
    这行指定使用sftp服务使用系统自带的internal-sftp

   Match Group sftp  
    这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割

匹配用户
    Match User mysftp
   这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便

    ChrootDirectory /data/web/%u  
    用chroot将用户的根目录指定到/data/web/%u,%u代表用户名,这样用户就只能在/data/web/%u下活动

    ForceCommand    internal-sftp  
    指定sftp命令

    AllowTcpForwarding no  
    X11Forwarding no  
    这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

6.设定Chroot目录访问权限
<span style="white-space:pre"></span># chown root:sftp -R -v /data/web/x1.ttp2016.com    <span style="white-space:pre"></span># chmod 755 -R -v /data/web/x1.ttp2016.com

目录的权限设定有两个要点:
        1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
        2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限

 所以遵循以上两个原则
        1)我们将/data/web/x1.ttp2016.com的所有者设置为了root,所有组设置为sftp
        2)我们将/data/web/x1.ttp2016.com的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

7.建立sftp用户登录后可写入的目录照上面设置后,在重启sshd服务后,用户mysftp已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限
<span style="white-space:pre"></span># mkdir /data/web/x1.ttp2016.com/Code        # chown ttp2016:sftp -R -v /data/web/x1.ttp2016.com/Code        # chmod 755 -R -v /data/web/x1.ttp2016.com/Code

8.重启sshd服务
<span style="white-space:pre"></span># service sshd restart

9.关闭SELINUX
<span style="white-space:pre"></span># vi /etc/selinux/config        //修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。或者        # setenforce 0


至此,ttp2016用户将只能在x2.ttp2016.com里面活动,并且只能操作Code文件夹



1 0