page counter next up previous contents
Next: 自訂策略模組 Up: CHROOT Previous: 建立 chroot 系統   Contents   DYWANG_HOME

產生 SELinux 策略規則

  1. 先安裝 php。
    [root@kvm5 ~]# yum install php
    
  2. php 程式要執行 chroot,所以 visudo 修改 apache 可以免密碼使用 /usr/sbin/chroot。
    [root@kvm5 html]# visudo 
    [root@kvm5 html]# grep apache /etc/sudoers
    apache ALL=(ALL) NOPASSWD:/usr/sbin/chroot
    
  3. apache 的 uid 及 gid 都是 48。
    [root@kvm5 script]# id apache 
    uid=48(apache) gid=48(apache) groups=48(apache)
    
  4. 在網頁根目錄 /var/www/html 建立 php 測試檔 exec.php,其中 48 是 apache 的 uid 及 gid。
    [root@kvm5 html]# vim exec.php
    [root@kvm5 html]# cat exec.php 
    <?php
    exec('sudo chroot --userspec=48:48 /var/www/script echo abc', $results);
    print_r($results);
    ?>
    
  5. 暫時關閉 SELinux。
    [root@kvm5 html]# setenforce 0
    [root@kvm5 html]# getenforce 
    Permissive
    
  6. 備份 audit.log,並產生一個空檔 audit.log。
    [root@kvm5 html]# mv /var/log/audit/audit.log /var/log/audit/audit.bak
    [root@kvm5 html]# touch /var/log/audit/audit.log
    
  7. 重新啟動 auditd 服務。
    [root@kvm5 html]# service auditd restart
    Stopping logging:                                          [  OK  ]
    Redirecting start to /bin/systemctl start auditd.service
    
  8. 目前 SELinux 在 Permissive 模式,php 網頁正常輸出 abc,警告資料存於 /var/log/audit/audit.log。
    [root@kvm5 html]# curl http://127.0.0.1/exec.php
    Array
    (
        [0] => abc
    )
    
  9. 將審查的安全風險記錄,轉成 SELinux 允許的策略模組。
    [root@kvm5 html]# cat /var/log/audit/audit.log | audit2allow -M httpsudo
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i httpsudo.pp
    
  10. 查看 httpsudo.te 檔,可看到必須允許的 SELinux 策略及布林值。
    [root@kvm5 html]# cat httpsudo.te 
    
    module httpsudo 1.0;
    
    require {
    	type httpd_t;
    	class capability { audit_write sys_resource };
    	class process setrlimit;
    	class netlink_audit_socket nlmsg_relay;
    }
    
    #============= httpd_t ==============
    
    #!!!! This avc can be allowed using one of the these booleans:
    #     httpd_run_stickshift, httpd_setrlimit
    allow httpd_t self:capability { audit_write sys_resource };
    
    #!!!! This avc can be allowed using the boolean 'httpd_mod_auth_pam'
    allow httpd_t self:netlink_audit_socket nlmsg_relay;
    
    #!!!! This avc can be allowed using the boolean 'httpd_setrlimit'
    allow httpd_t self:process setrlimit;
    
  11. 針對 te 檔的提示,開啟布林值 httpd_mod_auth_pam
    [root@kvm5 html]# setsebool httpd_mod_auth_pam 1
    
  12. 啟動 SELinux。
    [root@kvm5 html]# setenforce 1
    
  13. 目前 SELinux 在 Enforcing 模式,php 網頁正常輸出 abc,表示已解決問題。
    [root@kvm5 html]# curl http://127.0.0.1/exec.php
    Array
    (
        [0] => abc
    )
    



De-Yu Wang 2020-05-14