{"id":145738,"date":"2023-10-17T22:39:54","date_gmt":"2023-10-17T19:39:54","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=145738"},"modified":"2024-04-25T16:53:29","modified_gmt":"2024-04-25T13:53:29","slug":"apparmor-cheat-sheet-for-linux-system-administrators","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/apparmor-cheat-sheet-for-linux-system-administrators\/","title":{"rendered":"AppArmor Cheat Sheet for Linux System Administrators"},"content":{"rendered":"\n<p>Many of you have probably heard of AppArmor when working with Debian-based systems more so Ubuntu. However, since it is not an app that shows in the GUI, some users might not be familiar with it.<\/p>\n\n\n\n<p><strong>Application Armor <\/strong>abbreviated as <em>AppArmor <\/em>is a security module on Linux systems. It is a Mandatory Access Control (MAC) system used by the Linux kernel to restrict the capabilities of a program as configured on program profiles. These profiles can allow or deny capabilities such as network access, raw socket access, read, write and execute permissions on files etc. These profiles are usually loaded to the Kernel on system boot. The AppArmor profiles exist in two modes, these are <em>enforcement<\/em> and <em>complain<\/em>. The <strong>enforcement mode<\/strong> enforces the policy defined in the profile and also reports any policy violation attempts either using syslog or audits. The <strong>complain mode <\/strong>on the other hand does not enforce the policy but only reports the policy violation attempts.<\/p>\n\n\n\n<p>The AppArmor technology has been around for some time. It was first seen in Immunix and later integrated into Novell\/SUSE, Mandriva and Ubuntu systems. AppArmor is considered to be a drop in replacement to SELinux, which is at times considered difficult for setup and maintain. In contrast to SELinux, which works by applying labels to files, AppArmor works with file paths. The exponents of AppArmor argue that it is less complex and easier to configure than SELinux.<\/p>\n\n\n\n<p>In today&#8217;s article, we will learn the AppArmor Cheat Sheet for Linux System Administrators.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Check AppArmor Status<\/h2>\n\n\n\n<p>AppArmor is installed by default on Ubuntu systems and loads automatically on system boot. To check the status, issue the below command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apparmor_status\n##OR\nsudo aa-status<\/code><\/pre>\n\n\n\n<p>Sample Output:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"965\" height=\"711\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators.png\" alt=\"\" class=\"wp-image-145741\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators.png 965w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-300x221.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-768x566.png 768w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-696x513.png 696w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-570x420.png 570w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-80x60.png 80w\" sizes=\"auto, (max-width: 965px) 100vw, 965px\" \/><\/figure>\n\n\n\n<p>The above output shows the loaded profiles and the AppArmor mode.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. View AppArmor Profiles<\/h2>\n\n\n\n<p>AppArmor has several preloaded profiles which are located in the &#8220;<em>\/etc\/apparmor.d\/<\/em>&#8221; directory. Some of the profiles are disabled and others are active.<\/p>\n\n\n\n<p>To check all the profiles, you can issue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> ls \/etc\/apparmor.d\/*<\/mark>\n\/etc\/apparmor.d\/lsb_release\n\/etc\/apparmor.d\/nvidia_modprobe\n\/etc\/apparmor.d\/sbin.dhclient\n\/etc\/apparmor.d\/usr.bin.evince\n\/etc\/apparmor.d\/usr.bin.man\n....\n\/etc\/apparmor.d\/disable:\nusr.sbin.rsyslogd\n\n\/etc\/apparmor.d\/force-complain:\n\n\/etc\/apparmor.d\/local:\nlsb_release      usr.bin.tcpdump                          usr.sbin.cups-browsed\nnvidia_modprobe  usr.lib.libreoffice.program.oosplash     usr.sbin.cupsd\nREADME           usr.lib.libreoffice.program.senddoc      usr.sbin.mysqld\nsbin.dhclient    usr.lib.libreoffice.program.soffice.bin  usr.sbin.rsyslogd\nusr.bin.evince   usr.lib.libreoffice.program.xpdfimport\nusr.bin.man      usr.lib.snapd.snap-confine.real\n\n\/etc\/apparmor.d\/tunables:\nalias       etc     home.d      multiarch.d  securityfs  xdg-user-dirs\napparmorfs  global  kernelvars  proc         share       xdg-user-dirs.d\ndovecot     home    multiarch   run          sys<\/code><\/pre>\n\n\n\n<p>The profiles here have a naming syntax. For example, a profile fo<em>r \/usr\/bin\/man<\/em> will be located in <em>\/etc\/apparmor.d\/usr.bin.man<\/em>.<\/p>\n\n\n\n<p>The disabled profiles are located under the &#8220;\/etc\/apparmor.d\/disable&#8221;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\"> ls \/etc\/apparmor.d\/disable\/*<\/mark>\n\/etc\/apparmor.d\/disable\/usr.sbin.rsyslogd<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3. Enable\/Disable AppArmor Profiles<\/h2>\n\n\n\n<p>While AppArmor allows you to have multiple profiles, they are individually enabled or disabled. To enable or disable a profile, you need to install <code>apparmor-utils<\/code><\/p>\n\n\n\n<p>First update and upgrade your system to avoid &#8220;Segmentation fault&#8221; errors.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y<\/code><\/pre>\n\n\n\n<p>Now install the required utility<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install apparmor-utils<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Enable AppArmor Profiles<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Now proceed and <strong>enable<\/strong> a disabled profile using the command with the below syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>##Enable a Profile\nsudo aa-enforce<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\"> \/path\/to\/profile<\/mark><\/code><\/pre>\n\n\n\n<p>For example, to enable the Rsyslogd profile, we can run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">sudo aa-enforce \/etc\/apparmor.d\/usr.sbin.rsyslogd<\/mark>\nSetting \/etc\/apparmor.d\/usr.sbin.rsyslogd to enforce mode.<\/code><\/pre>\n\n\n\n<p>Another example of enabling the HTTPD profile.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-enforce \/usr\/sbin\/httpd<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Disable AppArmor Profiles<\/strong><\/li>\n<\/ul>\n\n\n\n<p>To disable a profile, you just switch it to the complain mode using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-complain \/path\/to\/profile<\/code><\/pre>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-complain \/etc\/apparmor.d\/usr.sbin.rsyslogd\n##OR\nsudo aa-complain \/usr\/sbin\/httpd<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Creating AppArmor Profiles<\/h2>\n\n\n\n<p>AppArmor allows users to create their custom profiles to protect apps. The profile usually has several configurations and variables for your application. AppArmor eliminates the tussle by allowing you to start from a template or interactively. <\/p>\n\n\n\n<p>For the interactive method, it inspects the actions performed by the binary and lets you decide the actions you like, whether to deny or allow.<\/p>\n\n\n\n<p>To achieve that, you issue a command with the below syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-genprof <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/path\/to\/binary<\/mark><\/code><\/pre>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-genprof \/usr\/bin\/scp<\/code><\/pre>\n\n\n\n<p>Sample Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Updating AppArmor profiles in \/etc\/apparmor.d.\nWriting updated profile for \/usr\/bin\/scp.\nSetting \/usr\/bin\/scp to complain mode.\n\nBefore you begin, you may wish to check if a\nprofile already exists for the application you\nwish to confine. See the following wiki page for\nmore information:\nhttps:&#47;&#47;gitlab.com\/apparmor\/apparmor\/wikis\/Profiles\n\nProfiling: \/usr\/bin\/scp\n\nPlease start the application to be profiled in\nanother window and exercise its functionality now.\n\nOnce completed, select the \"Scan\" option below in \norder to scan the system logs for AppArmor events. \n\nFor each AppArmor event, you will be given the \nopportunity to choose whether the access should be \nallowed or denied.\n\n&#91;(S)can system log for AppArmor events] \/ (F)inish<\/code><\/pre>\n\n\n\n<p>Now open a separate terminal and perform all the actions the binary can perform. For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scp ~\/test remote_user@remote_IP:~\/<\/code><\/pre>\n\n\n\n<p>After performing the task, press <strong>S<\/strong> on the AppArmor profiling window. In the recorded actions, set whether to ignore, allow, etc. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;(S)can system log for AppArmor events] \/ (F)inish\nReading log entries from \/var\/log\/syslog.\n\nProfile:  \/usr\/bin\/scp\nExecute:  \/usr\/bin\/ssh\nSeverity: unknown\n\n(I)nherit \/ (C)hild \/ (P)rofile \/ (N)amed \/ (U)nconfined \/ (X) ix On \/ (D)eny \/ Abo(r)t \/ (F)inish<\/code><\/pre>\n\n\n\n<p>Once complete, press &#8220;S&#8221; to save the changes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>The following local profiles were changed. Would you like to save them?\n\n &#91;1 - \/usr\/bin\/scp]\n(S)ave Changes \/ Save Selec(t)ed Profile \/ &#91;(V)iew Changes] \/ View Changes b\/w (C)lean profiles \/ Abo(r)t<\/code><\/pre>\n\n\n\n<p>Now press &#8220;f&#8221; and you will have the profile saved as<em><strong> \/etc\/apparmor.d\/path.to.binary<\/strong><\/em>. (\/etc\/apparmor.d\/usr.bin.scp fo this case)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">cat \/etc\/apparmor.d\/usr.bin.scp<\/mark>\n# Last Modified: Fri Sep 29 14:14:11 2023\n#include &lt;tunables\/global&gt;\n\n\/usr\/bin\/scp flags=(complain) {\n  #include &lt;abstractions\/base&gt;\n\n  deny \/usr\/bin\/ssh x,\n  deny owner \/home\/*\/mysql-community-client_8.1.0-1ubuntu22.04_amd64.deb r,\n\n  \/usr\/bin\/scp mr,\n\n}<\/code><\/pre>\n\n\n\n<p>Above is the sample AppArmor profile I have created for SCP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create Profile From Template<\/h3>\n\n\n\n<p>Yoi can create a skeleton of the App profile. Begin by installing the required package:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install apparmor-easyprof<\/code><\/pre>\n\n\n\n<p>Now create the template with the command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-easyprof <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">\/path\/to\/binary<\/mark><\/code><\/pre>\n\n\n\n<p>Sample Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># vim:syntax=apparmor\n# AppArmor policy for binary\n# ###AUTHOR###\n# ###COPYRIGHT###\n# ###COMMENT###\n\n#include &lt;tunables\/global&gt;\n\n# No template variables specified\n\n\"\/path\/to\/binary\" {\n  #include &lt;abstractions\/base&gt;\n\n  # No abstractions specified\n\n  # No policy groups specified\n\n  # No read paths specified\n\n  # No write paths specified\n}<\/code><\/pre>\n\n\n\n<p>You can then proceed and edit the profile as desired. <\/p>\n\n\n\n<p>To enforce the profile, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apparmor_parser -a \/etc\/apparmor.d\/<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">profile.name<\/mark><\/code><\/pre>\n\n\n\n<p>There are many other command to manage AppArmor profiles:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Load a new profile in complain mode\nsudo apparmor_parser -C \/etc\/apparmor.d\/profile.name \n\n#Replace existing profile\nsudo apparmor_parser -r \/etc\/apparmor.d\/profile.name \n\n #Remove profile\nsudo apparmor_parser -R \/etc\/apparmor.d\/profile.name<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5. Modifying a Profile from Logs<\/h2>\n\n\n\n<p>It is also possible to modify a profile from logs. The tool reads the logs and ask if you want to permit some of the forbidden actions. To achieve that, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-logprof<\/code><\/pre>\n\n\n\n<p>You can then navigate using arrow keys and select the desired profile.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"299\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1-1024x299.png\" alt=\"\" class=\"wp-image-145742\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1-1024x299.png 1024w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1-300x88.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1-768x224.png 768w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1-696x203.png 696w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-1.png 1066w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">6. View Logs<\/h2>\n\n\n\n<p>You can view the AUDIT and DENIED logs from \/var\/log\/audit\/audit.log. Install the required package:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install apparmor-notify<\/code><\/pre>\n\n\n\n<p>Proceed and view the logs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo aa-notify -s 1 -v<\/code><\/pre>\n\n\n\n<p>Sample Output:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"855\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2.png\" alt=\"\" class=\"wp-image-145743\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2.png 795w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2-279x300.png 279w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2-768x826.png 768w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2-696x749.png 696w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2023\/09\/AppArmor-Cheat-Sheet-for-Linux-System-Administrators-2-391x420.png 391w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><\/figure>\n\n\n\n<p> There are other options you can use, check with the command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">aa-notify -h<\/mark>\nUSAGE: aa-notify &#91;OPTIONS]\n\nDisplay AppArmor notifications or messages for DENIED entries.\n\nOPTIONS:\n  -p, --poll\t\t\tpoll AppArmor logs and display notifications\n  --display $DISPLAY\t\tset the DISPLAY environment variable to $DISPLAY\n\t\t\t\t(might be needed if sudo resets $DISPLAY)\n  -f FILE, --file=FILE\t\tsearch FILE for AppArmor messages\n  -l, --since-last\t\tdisplay stats since last login\n  -s NUM, --since-days=NUM\tshow stats for last NUM days (can be used alone\n\t\t\t\tor with -p)\n  -v, --verbose\t\t\tshow messages with stats\n  -h, --help\t\t\tdisplay this help\n  -u USER, --user=USER\t\tuser to drop privileges to when not using sudo\n  -w NUM, --wait=NUM\t\twait NUM seconds before displaying\n\t\t\t\tnotifications (with -p)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">7. Manage AppArmor Service<\/h2>\n\n\n\n<p>Tha AppArmor service can be managed just like any other system service. To stop the service run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop apparmor<\/code><\/pre>\n\n\n\n<p>To restart the service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart apparmor<\/code><\/pre>\n\n\n\n<p>Check the status of the service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">systemctl status apparmor<\/mark>\n apparmor.service - Load AppArmor profiles\n     Loaded: loaded (\/lib\/systemd\/system\/apparmor.service; enabled; vendor preset: enabled)\n     Active: active (exited) since Fri 2023-09-29 15:44:32 EAT; 3s ago\n       Docs: man:apparmor(7)\n             https:&#47;&#47;gitlab.com\/apparmor\/apparmor\/wikis\/home\/\n    Process: 66332 ExecStart=\/lib\/apparmor\/apparmor.systemd reload (code=exited, status=0\/SUC&gt;\n   Main PID: 66332 (code=exited, status=0\/SUCCESS)\n\nFul 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 systemd&#91;1]: Starting Load AppArmor profiles&gt;\nFul 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 apparmor.systemd&#91;66332]: Restarting AppArmor\n.....<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p>That marks the end of this guide on the AppArmor Cheat Sheet for Linux System Administrators. There are several other commands and cheat sheets not covered here, please feel free to share them in the comments below.<\/p>\n\n\n\n<p>See more:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/computingforgeeks.com\/kubectl-cheat-sheet-for-kubernetes-cka-exam-prep\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kubectl Cheat Sheet for Kubernetes Admins &amp; CKA Exam Prep<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/stratis-storage-management-cheatsheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">Stratis Storage Cheat Sheet &#8211; reference guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/computingforgeeks.com\/ansible-vault-cheat-sheet-reference-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ansible Vault Cheat Sheet \/ Reference guide<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Many of you have probably heard of AppArmor when working with Debian-based systems more so Ubuntu. However, since it is not an app that shows in the GUI, some users might not be familiar with it. Application Armor abbreviated as AppArmor is a security module on Linux systems. It is a Mandatory Access Control (MAC) &#8230; <a title=\"AppArmor Cheat Sheet for Linux System Administrators\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/apparmor-cheat-sheet-for-linux-system-administrators\/\" aria-label=\"Read more about AppArmor Cheat Sheet for Linux System Administrators\">Read more<\/a><\/p>\n","protected":false},"author":21,"featured_media":145741,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[330,299,50,75,832],"tags":[38828],"cfg_series":[],"class_list":["post-145738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cheat-sheets","category-how-to","category-linux-tutorials","category-security","category-tech","tag-apparmor-cheat-sheet"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/145738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=145738"}],"version-history":[{"count":0,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/145738\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/145741"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=145738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=145738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=145738"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=145738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}