[root@kvm5 ~]# yum install php
[root@kvm5 html]# visudo [root@kvm5 html]# grep apache /etc/sudoers apache ALL=(ALL) NOPASSWD:/usr/sbin/chroot
[root@kvm5 script]# id apache uid=48(apache) gid=48(apache) groups=48(apache)
[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);
?>
[root@kvm5 html]# setenforce 0 [root@kvm5 html]# getenforce Permissive
[root@kvm5 html]# mv /var/log/audit/audit.log /var/log/audit/audit.bak [root@kvm5 html]# touch /var/log/audit/audit.log
[root@kvm5 html]# service auditd restart Stopping logging: [ OK ] Redirecting start to /bin/systemctl start auditd.service
[root@kvm5 html]# curl http://127.0.0.1/exec.php
Array
(
[0] => abc
)
[root@kvm5 html]# cat /var/log/audit/audit.log | audit2allow -M httpsudo ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i httpsudo.pp
[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;
httpd_mod_auth_pam。
[root@kvm5 html]# setsebool httpd_mod_auth_pam 1
[root@kvm5 html]# setenforce 1
[root@kvm5 html]# curl http://127.0.0.1/exec.php
Array
(
[0] => abc
)