Run the sestatus
command to confirm that SELinux is enabled, is running in enforcing mode, and that targeted policy is being used:
$ /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 23
Policy from config file: targeted
SELinux status: enabled
is returned when SELinux is enabled. Current mode: enforcing
is returned when SELinux is running in enforcing mode. Policy from config file: targeted
is returned when the SELinux targeted policy is used.
As the Linux root user, run the touch /var/www/html/test2file
command to create a file.
Run the ls -Z /var/www/html/test2file
command to view the SELinux context:
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/test2file
By default, Linux users run unconfined in Fedora 10, which is why the
test2file
file is labeled with the SELinux
unconfined_u
user. RBAC is used for processes, not files. Roles do not have a meaning for files - the
object_r
role is a generic role used for files (on persistent storage and network file systems). Under the
/proc/
directory, files related to processes may use the
system_r
role.
[7] The
httpd_sys_content_t
type allows the
httpd
process to access this file.
The chcon
command relabels files; however, such label changes do not survive when the file system is relabeled. For permanent changes that survive a file system relabel, use the semanage
command, which is discussed later. As the Linux root user, run the following command to change the type to a type used by Samba:
chcon -t samba_share_t /var/www/html/test2file
Run the ls -Z /var/www/html/test2file
command to view the changes:
-rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/test2file
Run the service httpd status
command to confirm that the httpd
process is not running:
$ /sbin/service httpd status
httpd is stopped
If the output differs, run the service httpd stop
command as the Linux root user to stop the httpd
process:
# /sbin/service httpd stop
Stopping httpd: [ OK ]
To make the httpd
process run unconfined, run the following command as the Linux root user to change the type of /usr/sbin/httpd
, to a type that does not transition to a confined domain:
chcon -t unconfined_exec_t /usr/sbin/httpd
Run the ls -Z /usr/sbin/httpd
command to confirm that /usr/sbin/httpd
is labeled with the unconfined_exec_t
type:
-rwxr-xr-x root root system_u:object_r:unconfined_exec_t /usr/sbin/httpd
As the Linux root user, run the service httpd start
command to start the httpd
process. The output is as follows if httpd
starts successfully:
# /sbin/service httpd start
Starting httpd: [ OK ]
Run the ps -eZ | grep httpd
command to view the httpd
running in the unconfined_t
domain:
$ ps -eZ | grep httpd
unconfined_u:system_r:unconfined_t 7721
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7723
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7724
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7725
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7726
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7727
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7728
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7729
? 00:00:00 httpd
unconfined_u:system_r:unconfined_t 7730
? 00:00:00 httpd
Change into a directory where your Linux user has write access to, and run the wget http://localhost/test2file
command. Unless there are changes to the default configuration, this command succeeds:
--2008-09-07 01:41:10-- http://localhost/test2file
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/plain]
Saving to: `test2file.1'
[ <=> ]--.-K/s in 0s
2008-09-07 01:41:10 (0.00 B/s) - `test2file.1' saved [0/0]
Although the httpd
process does not have access to files labeled with the samba_share_t
type, httpd
is running in the unconfined unconfined_t
domain, and falls back to using DAC rules, and as such, the wget
command succeeds. Had httpd
been running in the confined httpd_t
domain, the wget
command would have failed.
The restorecon
command restores the default SELinux context for files. As the Linux root user, run the restorecon -v /usr/sbin/httpd
command to restore the default SELinux context for /usr/sbin/httpd
:
# /sbin/restorecon -v /usr/sbin/httpd
restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_notrans_exec_t:s0->system_u:object_r:httpd_exec_t:s0
Run the ls -Z /usr/sbin/httpd
command to confirm that /usr/sbin/httpd
is labeled with the httpd_exec_t
type:
$ ls -Z /usr/sbin/httpd
-rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd
As the Linux root user, run the /sbin/service httpd restart
command to restart httpd
. After restarting, run the ps -eZ | grep httpd
to confirm that httpd
is running in the confined httpd_t
domain:
# /sbin/service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
# ps -eZ | grep httpd
unconfined_u:system_r:httpd_t 8880 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8882 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8883 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8884 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8885 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8886 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8887 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8888 ? 00:00:00 httpd
unconfined_u:system_r:httpd_t 8889 ? 00:00:00 httpd
As the Linux root user, run the rm -i /var/www/html/test2file
command to remove test2file
.
If you do not require httpd
to be running, as the Linux root user, run the service httpd stop
command to stop httpd
:
# /sbin/service httpd stop
Stopping httpd: [ OK ]