• Linux从入门到精通——selinux


    ##selinux##  安全增强型linux  

    selinux是最最全面的的安全系统,所以会对文件和服务有一定的限制。

    以ftp服务为例:
    1.环境的设定
       因为之前学的是ftp,所以环境会对后面的实验有所影响,要先还原一下
       删除 /etc/vsftpd/ 下的所有文件
       再reinstall一下vsftpd
       再重新启动一下systemctl restart vsftpd
       这样环境就和以前一样了

    2.selinux的开启及级别设定
       getenforce   ##查看selinux的状态
       setenforce   ##设定selinux的状态  selinux 0 (permissive) ; selinux 1 (enforcing)
            ##只能在这两种状态相互切换。当要从disabled切换到任意一个时,要编辑vim /etc/sysconfig/selinux这个文件。强制有警告且不能访问,警告有警告但是可以访问。对内核更改,修改后需要reboot

        (1)Disabled      

        cd /mnt     
        touch file             ##在mnt下建立的文件的标识是mnt_t,而在/var/ftp的文件的标识是public_content_t   在selinux关闭的状态下可以查看
        mv file /var/ftp
        
        lftp 172.25.254.110       ##匿名用户登陆
        lftp 172.25.254.110:~>ls
        drwxrwxrwx   2 0   0           6 Aug 03 07:00 pub
        -rw-r--r--   1 0   0           0 Aug 03 07:01 file
        lftp 172.25.254.110:~>quit

        ls -Z /var/ftp
        -rw-r--r-- root root ?                                file
        drwxr-xr-x root root ?                                pub

        lftp 172.25.254.110 -u student   ##指定用户登陆
            可删除可写可建立文件

        ps auxZ| grep vsftpd
        -                               root      3781  0.0  0.0 112644   956 pts/0    S+   15:36   0:00 grep --color=auto vsftpd

        注意:当这个enforce为disabled的时候,在mnt里面创建一个文件,移动到ftp下后,可以查看到移动的文件,但是文件的前面有 ? ,当显示/var/ftp的属性的时候,看到中间有一大段是空白的,缺失的
       
        (2)
        vim /etc/sysconfig/selinux
        改为enforcing
        重启系统reboot     ##这次开机就会别较慢

        touch file             ##在mnt下建立的文件的标识是mnt_t,而在/var/ftp的文件的标识是  public_content_t   在selinux开启的状态下不能查看
        mv file /var/ftp
        
        再重复上面操作的时候,?和缺失处就会出现东西
        现在touch新的文件mv以后,看不见了;然后现在用用户登录,发现上传下载不了文件。
        getenforce  -->   Enforing(强制的)
        
        ps auxZ| grep vsftpd
        system_u:unconfined_r:ftpd_t:s0:c0.c102     root      3781  0.0  0.0 112644   956 pts/0    S+   15:36   0:00 grep --color=auto vsftpd
        注意:现在上面多出来的那一行就称为selinux的安全上下文

        
        ls -Z /var/ftp
        -rw-r--r-- root root  system_u:object_r:public_content_t:s0   file
        注意:这个下面也加上了安全上下文

        注意:这个文件和程序的安全上下文要一致才能访问  ftpd_t程序这个只能访问public_content_t文件,而当selinux为enforcing后,touch的那个文件的安全上下文为mnt_t,不匹配所以lftp无法查看这个文件。使系统更加安全。开启enforcing这个以后,系统会把不安全的权限全部关掉。

        优点:程序访问文件的时候,必须安全上下文一致才能访问;把程序不安全的功能默认关闭
                              服务本身功能和服务访问文件的影响

    3.修改安全上下文


        (1)目录的安全上下文和文件的安全上下文不对应,不能访问文件
        ls -Z /var/ftp/
        -rw-r--r-- root root  system_u:object_r:public_content_t:s0   file
        -rw-r--r-- root root  unconfined_u:object_r:mnt_t:s0   student  ##更改之前
     
        修改方法:
        chcon -t public_content_t /var/ftp/student   ##这种更改是临时的,reboot之后文件安全上下文会恢复
        -rw-r--r-- root root  system_u:object_r:public_content_t:s0   file
        -rw-r--r-- root root  system_u:object_r:public_content_t:s0   student  ##更改之后

        (2)修改默认目录及其下的文件
        vim /var/sysconfig/selinux
        chcon -t public_content_t /westos/ -R  ##递归修改文件的安全上下文

        注意:为什么自己更改的目录的安全上下文会在reboot之后恢复,而/var/ftp/的却不会改变?
        是因为/var/ftp/的安全上下文在内核上面有标识,叫做安全上下文列表(永久改变)

        semanage fcontext -l | grep /var/ftp/    ##查看是否有安全上下文列表,列表中有/var/ftp
        /var/ftp/bin(/.*)?                                 all files                       system_u:object_r:bin_t:s0 
        /var/ftp/etc(/.*)?                                 all files          system_u:object_r:etc_t:s0 

            semanage fcontext -l | grep /student    ##我们自己的没有安全上下文列表,因此会恢复成默认,如果想让我们自己的文件或目录的安全上下文也不变的话,就也要加到这个安全上下文列表里。

        /var/ftp/bin(/.*)?   ##后面表示目录本身和里面所有的内容的安全上下文设定为设定的

        semanager fcontext -a -t public_content_t /student(先不写后面的内容)  
        restorecon  -F(刷新)vv(显示过程)R(递归)  ##只是改了内核的安全上下文列表里面的内容,要刷新,同步到目录上去。    但是这样做目录下的文件安全上下文没有被更改,因为安全上下文列表没有设定

        semanager fcontext -a -t public_content_t /student(/.*)?  
        restorecon  -F(刷新)vv(显示过程)R(递归)  ##只是改了内核的安全上下文列表里面的内容,要刷新,同步到目录上去。    这样做目录下的文件安全上下文也就被更改了,因为安全上下文列表有设定。
            注意:要把上面的删除  semanager fcontext -d /student  以后,再重新加安全上下文列表

    4.sebool
        getsebool -a | grep sebool    ##发现一些功能是关闭的
        setsebool -P(永久生效) ftp_home_dir on  ##开启某一个功能

    5.selinux的排错信息
      查看报错信息    cat /var/log/audit/audit.log

       /var/log/audit/audit.log和/var/log/messages的区别是:前者只会说明错误;后者不仅会说明错误,还会提供解决方案,会有解决方案的原因是有settrouble这个插件

  • 相关阅读:
    这几天的读书心得
    随机接入过程的步骤
    从tlb,ocx,dll类型库中提取com组件的CLSID
    unicode字符集下CStdioFile无法写入中文的解决方案
    多线程CString参数传递问题
    yii2.0 报错Cookievalidationkey Must Be Configured With A Secret Key
    windows下的phpunit安装
    xdebug 一直报错 upstream timed out (110: Connection timed out) while reading response header from upstream
    session与cookie
    【转】LVS负载均衡之session解决方案 持久连接
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9464662.html
Copyright © 2020-2023  润新知