zoukankan      html  css  js  c++  java
  • 重新设置属主和权限

    Sftp限制用户访问权限的方法介绍,有需要的朋友可以参考下。

    第一步:查看OpenSSH软件版
     

    代码如下: [root@Oracle-2 ~]# rpm -qa | grep ssh
    openssh-4.3p2-36.el5
    openssh-clients-4.3p2-36.el5
    openssh-server-4.3p2-36.el5
    openssh-askpass-4.3p2-36.el5 
    或者:
    [root@Oracle-2 ~]# ssh -V
    OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

    发现操作系统的OpenSSH软件是4.3p2,低于4.8p1版本,所以需要做升级。
     
    第二步:下载最新的OpenSSH软件
    OpenSSH是免费的,可以到官网上进行下载: www.openssh.com
    当前最高版本是OpenSSH6.0,我们就可以下载该版本:openssh-6.0p1.tar.gz

    下载的时候,我们需要看一看官方安装指导文档Installation instructions ,里面有安装该版本的注意事项和安装步骤说明,最好仔细阅读一下。

    第三步:确认OpenSSH软件安装条件
    在官方安装指导文档中提到,安装OpenSSH6.0需要具备两个条件:
    You will need working installations of Zlib and OpenSSL.
    Zlib 1.1.4 or 1.2.1.2 or greater (ealier 1.2.x versions have problems):
    http://www.gzip.org/zlib/

    OpenSSL 0.9.6 or greater:
    http://www.openssl.org/

    上面指出了,OpenSSH6.0安装所依赖的两款软件Zlib和OpenSSL的最低版本,如果服务器的软件版本不符合要求,就要先升级该两款软件。

    首先我们需要确认服务器上Zlib和OpenSSL软件的版本:
     

    代码如下:

    [root@Oracle-2 ~]# rpm -qa | grep -i zlib
    zlib-devel-1.2.3-3
    perl-Compress-Zlib-1.42-1.fc6
    zlib-1.2.3-3
    perl-IO-Zlib-1.04-4.2.1

    [root@Oracle-2 ~]# rpm -qa | grep -i openssl
    pyOpenSSL-0.6-1.p24.7.2.2
    openssl-devel-0.9.8e-12.el5
    openssl-0.9.8e-12.el5
     

    可以看到,Zlib 的版本是1.42 ,OpenSSL的版本是0.9.8,满足OpenSSH6.0安装的要求。

    第四步:卸载OpenSSH软件
    安装之前,有下面几个工作需要完成:

    (1)停sshd服务
    [root@Oracle-2 ~]# service sshd stop
    Stopping sshd: [  OK  ]

    (2)备份sshd文件
    说明:在卸载之前需要将 /etc/init.d/sshd 文件做个备份,安装完成后,需要再将备份的sshd文件拷贝到/etc/init.d/目录中,这样可以保证升级完成后可以继续使用service sshd start/stop/restart  的方式管理sshd服务,否则将不可使用。
    [root@Oracle-2 ~]# cp /etc/init.d/sshd /root/sshd

    (3)卸载服务器上已经存在的OpenSSH软件
    卸载OpenSSH,通过rpm -qa 命名查询出需要卸载的rpm软件包, 再用 rpm -e 命令卸载:

    查询:
    [root@Oracle-2 ~]# rpm -qa | grep -i openssh
    openssh-4.3p2-36.el5
    openssh-clients-4.3p2-36.el5
    openssh-server-4.3p2-36.el5
    openssh-askpass-4.3p2-36.el5
    卸载:
    [root@Oracle-2 ~]# rpm -e openssh-4.3p2-36.el5 -deps
    [root@Oracle-2 ~]# rpm -e openssh-clients-4.3p2-36.el5 -deps
    [root@Oracle-2 ~]# rpm -e openssh-server-4.3p2-36.el5 -deps
    [root@Oracle-2 ~]# rpm -e openssh-askpass-4.3p2-36.el5 -deps
     
    (4)删除 /etc/ssh/ 目录下的ssh文件
    rm -rf /etc/ssh/*

    第五步:安装OpenSSH软件
    解压下载的软件包 openssh-6.0p1.tar.gz
    [root@Oracle-2 ~]# tar -zxvf openssh-6.0p1.tar.gz

    安装OpenSSH软件:
    进入解压出的文件夹,按照顺序执行下面的编译和安装命令:
    [root@Oracle-2 ~]# ./configure –prefix=/usr –sysconfdir=/etc/ssh –with-pam –with-md5-passwords –mandir=/usr/share/man
    [root@Oracle-2 ~]# make
    [root@Oracle-2 ~]# make install

    执行完成后,就可以用 ssh -V 命名查看openssh的版本,验证安装结果:
    [root@Oracle-2 ~]# ssh -V
    OpenSSH_6.0p1, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
    可以看到版本已经变成6.0p1了,说明安装没有问题。

    接下来,恢复sshd文件,将备份的sshd文件复制到 /etc/init.d/ 目录下:
    [root@Oracle-2 ~]# cp /root/sshd /etc/init.d/sshd

    测试sshd服务的启动和停止:
    [root@Oracle-2 ~]# service sshd restart
    Stopping sshd: [  OK  ]
    Starting sshd: [  OK  ]
    OK,到这里,OpenSSH 的升级就做完了。

    注意:
    这样升级完成,在服务器关机启动后,sshd服务不会自动启动,为了使sshd服务在开机时自动启动,我们需要执行下面的命令:
    [root@Oracle-2 ~]# chkconfig --add sshd
    [root@Oracle-2 ~]# chkconfig --level 123456 sshd on
    这样开机后就可以自动启动sshd服务了。

    第六步:配置sftp服务用户的访问权限
    (1)创建sftp用户的主根目录
    [root@Oracle-2 ~]# mkdir -p /home/sftp
    [root@Oracle-2 ~]# chmod -R 755 /home/sftp

    (2)创建sftp用户组和一个sftp用户
    [root@Oracle-2 ~]# groupadd sftp
    [root@Oracle-2 ~]# useradd -g sftp -d /home/sftp/blog blog
    [root@Oracle-2 ~]# passwd blog

    (3)权限设置
    设置 /etc/ssh/sshd_config配置文件,通过Chroot限制用户的根目录。
    [root@Oracle-2 ~]# vi /etc/ssh/sshd_config
    # override default of no subsystems
    #注释掉原来的Subsystem设置
    #Subsystem      sftp    /usr/libexec/sftp-server
    #启用internal-sftp
    Subsystem sftp internal-sftp

    # Example of overriding settings on a per-user basis
    #Match User anoncvs
    # X11Forwarding no
    # AllowTcpForwarding no
    # ForceCommand cvs server
    #限制blog用户的根目录
    Match User pay
    ChrootDirectory /home/sftp/blog/
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    保存退出,重启sshd服务:
    [root@Oracle-2 ~]# service sshd restart

    (4)测试sftp权限控制
    使用blog用户尝试登录sftp ,发现无法登陆,给出的提示也很难看懂,什么原因呢?
    原来要使用Chroot功能实现用户根目录的控制,目录权限的设置非常重要,否则将会无法登陆。

    目录权限设置上要遵循2点:
    ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
    ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
    如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。

    设置目录的属主和权限:
    [root@Oracle-2 ~]# chown root:root /home/sftp  /home/sftp/blog
    [root@Oracle-2 ~]# chmod 755 /home/sftp /home/sftp/blog

    由于上面设置了目录的权限是755,因此所有非root用户都无法在目录中写入文件。我们需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。以blog目录为例:
    [root@Oracle-2 ~]#  mkdir /home/sftp/blog/web
    [root@Oracle-2 ~]# chown blog:sftp /home/sftp/blog/web
    [root@Oracle-2 ~]#  chown 775 /home/sftp/blog/web

    设置完成后,我们再用blog用户登录sftp,发现这次可以正常登录了,并且可以访问的根目录控制在了/home/sftp/blog/下,达到了我们的要求。

    补充:
    上面是设置某一个sftp用户的访问权限,我们可以通过下面的配置,来设置某一个sftp组的用户访问权限:
    Match group sftp
    ChrootDirectory /home/sftp/
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/findumars/p/5509721.html
Copyright © 2011-2022 走看看