Red Hat System Administration II
Learn how to troubleshoot SELinux security denials.
Outcomes
Gain experience with SELinux troubleshooting tools.
As the student user on the workstation machine, use the lab command to prepare your system for this exercise.
This command prepares your environment and ensures that all required resources are available.
[student@workstation ~]$ lab start selinux-issues
Instructions
From a web browser on the
workstationmachine, open thehttp://servera/index.htmlweb page. An error message states that you do not have permission to access the file.Use the
sshcommand to log in toserveraas thestudentuser. Use thesudo -icommand to switch to therootuser.[student@workstation ~]$
ssh student@servera...output omitted... [student@servera ~]$sudo -i[sudo] password for student:student[root@servera ~]#Use the
lesscommand to view the contents of the/var/log/messagesfile. You use the / character and search for thesealerttext. Press the n key until you reach the last occurrence, because previous exercises might also have generated SELinux messages. Copy the suggestedsealertcommand so that you can use it in the next step. Use the q key to quit thelesscommand.[root@servera ~]#
less /var/log/messages...output omitted... Apr 7 04:52:18 servera setroubleshoot[20715]:SELinux is preventing /usr/sbin/httpd from getattr access on the file /custom/index.html. For complete SELinux messages run:sealert -l...output omitted...9a96294a-239b-4568-8f1e-9f35b5fb472bRun the suggested
sealertcommand. Note the source context, the target objects, the policy, and the enforcing mode. Find the correct SELinux context label for the file that thehttpdservice tries to serve.Run the
sealertcommand.The output explains that the
/custom/index.htmlfile has an incorrect context label.[root@servera ~]#
sealert -l9a96294a-239b-4568-8f1e-9f35b5fb472bSELinux is preventing /usr/sbin/httpd from getattr access on the file /custom/index.html.***** Plugin catchall_labels (83.8 confidence) suggests *******************If you want to allow httpd to have getattr access on the index.html file Then you need to change the label on /custom/index.htmlDo #semanage fcontext -a -t FILE_TYPE '/custom/index.html'where FILE_TYPE is one of the following: NetworkManager_exec_t, NetworkManager_log_t, NetworkManager_tmp_t, abrt_dump_oops_exec_t, abrt_etc_t, abrt_exec_t, abrt_handle_event_exec_t, abrt_helper_exec_t, abrt_retrace_coredump_exec_t, abrt_retrace_spool_t, abrt_retrace_worker_exec_t, abrt_tmp_t, abrt_upload_watch_tmp_t, abrt_var_cache_t, abrt_var_log_t, abrt_var_run_t, accountsd_exec_t, acct_data_t, acct_exec_t, admin_crontab_tmp_t, admin_passwd_exec_t, afs_logfile_t, aide_exec_t, aide_log_t, alsa_exec_t, alsa_tmp_t, amanda_exec_t, amanda_log_t, amanda_recover_exec_t, amanda_tmp_t, amtu_exec_t, anacron_exec_t, anon_inodefs_t ...output omitted... Additional Information: Source Contextsystem_u:system_r:httpd_t:s0Target Context unconfined_u:object_r:default_t:s0 Target Objects/custom/index.html [ file ]Source httpd Source Path /usr/sbin/httpd Port <Unknown> Host servera.lab.example.com Source RPM Packages httpd-2.4.51-7.el9_0.x86_64 Target RPM Packages SELinux Policy RPMselinux-policy-targeted-34.1.27-1.el9.noarchLocal Policy RPM selinux-policy-targeted-34.1.27-1.el9.noarch Selinux Enabled True Policy Type targeted Enforcing ModeEnforcingHost Name servera.lab.example.com Platform Linux servera.lab.example.com 5.14.0-70.2.1.el9_0.x86_64 #1 SMP PREEMPT Wed Mar 16 18:15:38 EDT 2022 x86_64 x86_64 Alert Count 4 First Seen 2022-04-07 04:51:38 EDT Last Seen 2022-04-07 04:52:13 EDT Local ID9a96294a-239b-4568-8f1e-9f35b5fb472bRaw Audit Messagestype=AVCmsg=audit(1649321533.406:1024): avc: denied { getattr } for pid=20464 comm="httpd" path="/custom/index.html" dev="vda4" ino=25571802 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0 ...output omitted...Verify the SELinux context for the directory from where the
httpdservice serves the content by default,/var/www/html. Thehttpd_sys_content_tSELinux context is appropriate for the/custom/index.htmlfile.[root@servera ~]#
ls -ldZ /var/www/htmldrwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Mar 21 11:47 /var/www/html
The
Raw Audit Messagessection of thesealertcommand contains information from the/var/log/audit/audit.logfile. Use theausearchcommand to search the/var/log/audit/audit.logfile. The-moption searches on the message type. The-tsoption searches based on time. The following entry identifies the relevant process and file that cause the alert. The process is thehttpdApache web server, the file is/custom/index.html, and the context issystem_r:httpd_t.[root@servera ~]#
ausearch -m AVC -ts today...output omitted... ---- time->Thu Apr 7 04:52:13 2022 type=PROCTITLE msg=audit(1649321533.406:1024): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44 type=SYSCALL msg=audit(1649321533.406:1024): arch=c000003e syscall=262 success=no exit=-13 a0=ffffff9c a1=7fefc403d850 a2=7fefc89bc830 a3=100 items=0 ppid=20461 pid=20464 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)type=AVCmsg=audit(1649321533.406:1024): avc:denied{ getattr } for pid=20464comm="httpd" path="/custom/index.html"dev="vda4" ino=25571802scontext=system_u:system_r:httpd_t:s0tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0Resolve the issue by applying the
httpd_sys_content_tcontext.[root@servera ~]#
semanage fcontext -a \-t httpd_sys_content_t '/custom(/.*)?'[root@servera ~]#restorecon -Rv /customRelabeled /custom from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /custom/index.html from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0Again, try to view
http://servera/index.html. TheThis is SERVERA.message is displayed.Return to the
workstationmachine as thestudentuser.[root@servera ~]#
exitlogout [student@servera ~]$exitlogout Connection to servera closed. [student@workstation ~]$