<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Umask on K-Life Hack | Systems Architecture &amp; DevOps</title><link>https://klifehack.com/en/tags/umask/</link><description>Recent content in Umask on K-Life Hack | Systems Architecture &amp; DevOps</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 21 Sep 2026 10:10:15 +0900</lastBuildDate><atom:link href="https://klifehack.com/en/tags/umask/index.xml" rel="self" type="application/rss+xml"/><item><title>Technical Verification of Linux File Permission Structure and umask Calculation</title><link>https://klifehack.com/en/p/linux-posix-file-permissions-umask-analysis/</link><pubDate>Mon, 21 Sep 2026 10:10:15 +0900</pubDate><guid>https://klifehack.com/en/p/linux-posix-file-permissions-umask-analysis/</guid><description>&lt;p&gt;In multi-tenant infrastructure scaling and automated deployment pipeline operations, permission inconsistencies in the file system immediately trigger HTTP 403 Forbidden errors for static assets and risks of process privilege escalation. In particular, misunderstandings of &lt;code&gt;umask&lt;/code&gt; specifications—which dictate the permissions of intermediate files generated by automation scripts—and path hierarchy traversal failures caused by missing execution permissions (&lt;code&gt;x&lt;/code&gt; bit) on parent directories are frequent failure patterns in production environments.&lt;/p&gt;&#10;&lt;p&gt;This article provides a detailed analysis of the POSIX standard access control model, permission flags via Octal notation, the bitwise logical operation mechanism of &lt;code&gt;umask&lt;/code&gt;, and the internal behavior of special permissions (SUID/SGID/Sticky Bit).&lt;/p&gt;&#10;&lt;h2 id="posix-permission-model-and-notation-structure"&gt;POSIX Permission Model and Notation Structure&#10;&lt;/h2&gt;&lt;p&gt;The Linux file system categorizes access targets into three scopes (&lt;code&gt;u&lt;/code&gt;: User, &lt;code&gt;g&lt;/code&gt;: Group, &lt;code&gt;o&lt;/code&gt;: Others) and assigns three permission modes to each: &lt;code&gt;r&lt;/code&gt; (Read), &lt;code&gt;w&lt;/code&gt; (Write), and &lt;code&gt;x&lt;/code&gt; (Execute).&lt;/p&gt;&#10;&lt;p&gt;The structure of the permission string output by the &lt;code&gt;ls -l&lt;/code&gt; command is as follows:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- rwx r-x r--&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| | | |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| | | +--&amp;amp;gt; Others (o) : Read-only (r--)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| | +------&amp;amp;gt; Group (g) : Read and execute (r-x)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| +----------&amp;amp;gt; Owner (u) : Read, write, and execute (rwx)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;+-------------&amp;amp;gt; File type (- = regular file, d = directory)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The behavior of access permissions differs significantly depending on whether the target is a file or a directory.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Symbol&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Mode&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Behavior on File&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Behavior on Directory&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;&lt;b&gt;&lt;code&gt;r&lt;/code&gt;&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;b&gt;Read&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Viewing/reading file contents (&lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Listing file names within the directory (&lt;code&gt;ls&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;&lt;b&gt;&lt;code&gt;w&lt;/code&gt;&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;b&gt;Write&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Modifying, overwriting, appending to file contents&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Creating, deleting, renaming files within the directory&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;&lt;b&gt;&lt;code&gt;x&lt;/code&gt;&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;b&gt;Execute&lt;/b&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Executing the file as a program&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Navigating/traversing path into the directory (&lt;code&gt;cd&lt;/code&gt;, accessing internal files)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Having only &lt;code&gt;r&lt;/code&gt; permission on a directory is insufficient to access internal files. To traverse the path and reference objects inside, &lt;code&gt;x&lt;/code&gt; permission must be granted to all hierarchy levels up to the target directory.&lt;/p&gt;&#10;&lt;h2 id="octal-notation-and-calculation-model"&gt;Octal Notation and Calculation Model&#10;&lt;/h2&gt;&lt;p&gt;The Linux kernel internally maintains permissions for each scope as a 3-bit binary mask and represents this using octal numbers from 0 to 7.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;Read (&lt;code&gt;r&lt;/code&gt;)&lt;/b&gt; = $2^2 = 4$&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Write (&lt;code&gt;w&lt;/code&gt;)&lt;/b&gt; = $2^1 = 2$&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Execute (&lt;code&gt;x&lt;/code&gt;)&lt;/b&gt; = $2^0 = 1$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Any permission state is represented by adding these values together.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;rwx&lt;/code&gt; = $4 + 2 + 1 = 7$&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;rw-&lt;/code&gt; = $4 + 2 + 0 = 6$&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;r-x&lt;/code&gt; = $4 + 0 + 1 = 5$&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;r--&lt;/code&gt; = $4 + 0 + 0 = 4$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="typical-production-configuration-patterns"&gt;Typical Production Configuration Patterns&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;&lt;code&gt;755&lt;/code&gt; (&lt;code&gt;rwxr-xr-x&lt;/code&gt;)&lt;/b&gt;: Executable binaries, system scripts, standard public directories.&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;&lt;code&gt;644&lt;/code&gt; (&lt;code&gt;rw-r--r--&lt;/code&gt;)&lt;/b&gt;: Static configuration files, web server assets, documents requiring no execution privileges.&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;&lt;code&gt;600&lt;/code&gt; (&lt;code&gt;rw-------&lt;/code&gt;)&lt;/b&gt;: SSH private keys (&lt;code&gt;id_rsa&lt;/code&gt;), SSL/TLS private keys, database connection credentials.&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;&lt;code&gt;777&lt;/code&gt; (&lt;code&gt;rwxrwxrwx&lt;/code&gt;)&lt;/b&gt;: Unrestricted access across all scopes. A security configuration anti-pattern.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="internal-architecture-and-bitwise-operations-of-umask"&gt;Internal Architecture and Bitwise Operations of umask&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;umask&lt;/code&gt; (User Mask) is a logical mask that specifies permission bits to be excluded by default when creating new files and directories.&lt;/p&gt;&#10;&lt;p&gt;The initial base permissions assigned by the Linux kernel are configured as follows:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;File Base Permission&lt;/b&gt;: &lt;code&gt;666&lt;/code&gt; (&lt;code&gt;rw-rw-rw-&lt;/code&gt;) *For security reasons, execution permission &lt;code&gt;x&lt;/code&gt; is not granted by default.&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Directory Base Permission&lt;/b&gt;: &lt;code&gt;777&lt;/code&gt; (&lt;code&gt;rwxrwxrwx&lt;/code&gt;) *Includes &lt;code&gt;x&lt;/code&gt; to allow directory traversal.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The final effective permissions are calculated via an AND operation between the base permission and the bitwise NOT of the &lt;code&gt;umask&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;$$\text{Effective Permission} = \text{Base Permission} \land \neg(\text{umask})$$&lt;/p&gt;&#10;&lt;p&gt;The calculation results when applying a standard &lt;code&gt;umask 0022&lt;/code&gt; are as follows:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;b&gt;New File Calculation&lt;/b&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Base Permission: &lt;code&gt;666&lt;/code&gt; (&lt;code&gt;rw-rw-rw-&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;umask&lt;/code&gt;: &lt;code&gt;0022&lt;/code&gt; (&lt;code&gt;--- -w- -w-&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;Applied Result: $666 - 0022 = 644$ (&lt;code&gt;rw-r--r--&lt;/code&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;b&gt;New Directory Calculation&lt;/b&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Base Permission: &lt;code&gt;777&lt;/code&gt; (&lt;code&gt;rwxrwxrwx&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;umask&lt;/code&gt;: &lt;code&gt;0022&lt;/code&gt; (&lt;code&gt;--- -w- -w-&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;Applied Result: $777 - 0022 = 755$ (&lt;code&gt;rwxr-xr-x&lt;/code&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="special-permissions-suid-sgid-sticky-bit"&gt;Special Permissions (SUID, SGID, Sticky Bit)&#10;&lt;/h2&gt;&lt;p&gt;As an extension to standard access permissions, Linux provides special flags.&lt;/p&gt;&#10;&lt;h3 id="1-set-user-id-suid"&gt;1. Set User ID (SUID)&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Mechanism&lt;/b&gt;: When executing an executable file, the process is launched with the privileges of the file owner rather than the executor.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Configuration Command&lt;/b&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod u+s /usr/bin/custom-executable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Octal表記: chmod 4755 /usr/bin/custom-executable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-set-group-id-sgid"&gt;2. Set Group ID (SGID)&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Mechanism&lt;/b&gt;: When set on a directory, newly created files and directories within it automatically inherit the owner group of the parent directory instead of the primary group of the creator.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Configuration Command&lt;/b&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod g+s /var/shared/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Octal表記: chmod 2755 /var/shared/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-sticky-bit"&gt;3. Sticky Bit&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Mechanism&lt;/b&gt;: When set on a directory, it prevents other users from deleting or renaming files owned by someone else (deletion is restricted to the file owner, directory owner, or root).&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;b&gt;Configuration Command&lt;/b&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod +t /tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Octal表記: chmod 1777 /tmp&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="troubleshooting"&gt;Troubleshooting&#10;&lt;/h2&gt;&lt;h3 id="1-permission-denied-due-to-lack-of-directory-traversal"&gt;1. Permission Denied Due to Lack of Directory Traversal&#10;&lt;/h3&gt;&lt;p&gt;When a web server or application cannot access assets, there are cases where a parent directory in the path lacks &lt;code&gt;x&lt;/code&gt; permission, even if the permissions on the target file itself are &lt;code&gt;644&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;b&gt;Remediation Steps&lt;/b&gt;:&#10;Verify the permission state of all parent paths using the &lt;code&gt;namei&lt;/code&gt; command and grant &lt;code&gt;x&lt;/code&gt; permission to the directory hierarchy.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;namei -om /var/www/html/app/index.html&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;### 2. Failures Due to Misuse of chmod -R 777 and Remediation Steps&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Executing &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;chmod -R 777&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; to resolve access denial grants irreversible execution permissions to all configuration files, causing security checking tools or the SSH daemon to reject connections.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;b&amp;gt;Remediation Steps&amp;lt;/b&amp;gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Use the &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;find&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; command to separate files and directories and batch-apply appropriate permissions.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo chown -R nginx:nginx /var/www/html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; find /var/www/html -type d -exec chmod &lt;span style="color:#ae81ff"&gt;755&lt;/span&gt; &lt;span style="color:#f92672"&gt;{}&lt;/span&gt; +&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; find /var/www/html -type f -exec chmod &lt;span style="color:#ae81ff"&gt;644&lt;/span&gt; &lt;span style="color:#f92672"&gt;{}&lt;/span&gt; +&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Operational Verification Protocol&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Output results verifying the permission structure and traversal viability after applying settings in a system environment.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;text&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. Check permission structure and SELinux contexts&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $ ls -laZ /var/www/html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; drwxr-xr-x. &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; Sep &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; 10:00 .&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; drwxr-xr-x. &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; root root system_u:object_r:var_t:s0 &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; Sep &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; 09:50 ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -rw-r--r--. &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; nginx nginx unconfined_u:object_r:httpd_sys_content_t:s0 &lt;span style="color:#ae81ff"&gt;245&lt;/span&gt; Sep &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; 10:00 index.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 2. Verify the umask value in the current shell session&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $ umask&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0022&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 3. Determine HTTP response status&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $ curl -I http://localhost/index.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HTTP/1.1 &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt; OK&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Server: nginx/1.24.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Date: Sun, &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; Sep &lt;span style="color:#ae81ff"&gt;2026&lt;/span&gt; 10:05:00 GMT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Content-Type: text/html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Content-Length: &lt;span style="color:#ae81ff"&gt;245&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Connection: keep-alive&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Operational Notes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- When performing recursive permission changes, avoid executing a single &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;chmod -R&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; and ensure separate application using &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;find -type d&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; and &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;find -type f&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- As a rule, granting access to service accounts &lt;span style="color:#f92672"&gt;(&lt;/span&gt;such as web processes&lt;span style="color:#f92672"&gt;)&lt;/span&gt; should be resolved through correct ownership reassignment using &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;chown&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, rather than excessive granting of permission bits.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- When operating shared directories, appropriately combining SGID &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;2755&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; and the Sticky Bit &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;1777&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; prevents access permission conflicts in multi-user environments.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>