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

  • 相关阅读:
    有人向我反馈了一个bug
    java.lang.ClassNotFoundException: org.springframework.core.SpringProperties
    Maven pom文件提示Missing artifact org.springframework:spring-context-support:jar:3.2.2.RELEASE:compile
    在业务逻辑中如何进行数据库的事务管理。
    about to fork child process, waiting until server is ready for connections. forked process: 2676 ERROR: child process failed, exited with error number 100
    tomcat底层原理实现
    springmvc 动态代理 JDK实现与模拟JDK纯手写实现。
    纯手写SpringMVC架构,用注解实现springmvc过程
    数据库连接池原理 与实现(动脑学院Jack老师课后自己的练习有感)
    定时器中实现数据库表数据移动的功能,Exception in thread "Timer-0" isExist java.lang.NullPointerException定时器中线程报错。
  • 原文地址:https://www.cnblogs.com/findumars/p/5509721.html
Copyright © 2011-2022 走看看