دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
دانشنامه مارال هاست دانشنامه مارال هاست
دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
لینوکس
  • Folder icon closed Folder open iconآشنایی با لینوکس (Linux Fundamentals)
  • Folder icon closed Folder open iconتوزیع‌های مختلف لینوکس (Linux Distributions)
  • Folder icon closed Folder open iconFHS؛ آشنایی با ساختار فایل‌ و پوشه‌های لینوکسی
  • Folder icon closed Folder open iconمهم‌ترین دستورات پایه‌ای برای هر sysadmin
  • Folder icon closed Folder open iconمدیریت فایل و پوشه (file & directory management) در لینوکس
  • Folder icon closed Folder open iconآموزش ویرایش فایل‌های متنی در لینوکس با Nano و Vim
  • Folder icon closed Folder open iconآشنایی با users، groups و ساختار مدیریت کاربران در لینوکس
  • Folder icon closed Folder open iconآموزش Permission و Ownership در لینوکس
  • Folder icon closed Folder open iconآشنایی با Root و sudo
  • Folder icon closed Folder open iconآشنایی با Processها در لینوکس
  • Folder icon closed Folder open iconتغییر Hostname در لینوکس
  • Folder icon closed Folder open iconتنظیم Timezone در لینوکس
  • Folder icon closed Folder open iconتنظیم NTP در لینوکس
  • Folder icon closed Folder open iconبروزرسانی سیستم در لینوکس
  • Folder icon closed Folder open iconساخت کاربر جدید در لینوکس
  • Folder icon closed Folder open iconایجاد کاربران و گروه ها در لینوکس
  • Folder icon closed Folder open iconآموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها
  • Folder icon closed Folder open iconآموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید
  • Folder icon closed Folder open iconآموزش فایل sudoers؛ مدیریت دسترسی کاربران به دستورات مدیریتی در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chown در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chmod در لینوکس
  • Folder icon closed Folder open iconSticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی
  • Folder icon closed Folder open iconآموزش SUID در لینوکس؛ اجرای برنامه‌ها با دسترسی مالک فایل
  • Folder icon closed Folder open iconآموزش SGID در لینوکس؛ مدیریت دسترسی گروه‌ها و اجرای برنامه‌ها
لینوکس

آموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید

آموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید

مقدمه

در لینوکس، هر فایل یا پوشه‌ای که ایجاد می‌شود، مجوزهای اولیه‌ای برای مالک، گروه و سایر کاربران دریافت می‌کند. این مجوزها مشخص می‌کنند چه افرادی بتوانند فایل را بخوانند، تغییر دهند یا اجرا کنند.

مقدار umask تعیین می‌کند هنگام ایجاد فایل یا پوشه جدید، کدام مجوزها از مجوز اولیه حذف شوند.

برای مثال، اگر umask کاربر برابر 022 باشد، فایل‌های جدید معمولاً با مجوز 644 و پوشه‌های جدید با مجوز 755 ایجاد می‌شوند.

در این مقاله با ساختار umask، روش محاسبه مجوز نهایی، تنظیم موقت و دائمی آن، تنظیم umask برای کاربران، سرویس‌های systemd و پوشه‌های اشتراکی آشنا می‌شویم.


umask چیست؟

عبارت umask مخفف User File Creation Mode Mask است.

umask یک Mask یا فیلتر مجوز است که هنگام ایجاد فایل‌ها و پوشه‌های جدید، برخی Permission Bitها را حذف می‌کند.

برای مشاهده مقدار فعلی umask دستور زیر را اجرا کنید:

umask

نمونه خروجی:

0022

در بسیاری از سیستم‌های لینوکسی مقدار پیش‌فرض کاربران معمولی و کاربر root برابر 022 است؛ اما این مقدار می‌تواند براساس توزیع، تنظیمات PAM، Shell یا سیاست امنیتی سیستم متفاوت باشد.


umask چگونه کار می‌کند؟

برنامه‌ها هنگام ایجاد فایل یا پوشه، یک مجوز اولیه درخواست می‌کنند.

مجوز اولیه رایج برای فایل‌ها:

666

مجوز اولیه رایج برای پوشه‌ها:

777

سپس umask مجوزهای مشخص‌شده را از این مجوز اولیه حذف می‌کند.

برای مثال، با umask برابر 022 نتیجه معمولاً به‌شکل زیر است:

File base permissions:      666
Directory base permissions: 777
umask:                      022

New file permissions:      644
New directory permissions: 755

فایل‌های معمولی به‌صورت پیش‌فرض مجوز Execute دریافت نمی‌کنند؛ زیرا اجرای خودکار هر فایل جدید می‌تواند یک خطر امنیتی باشد.

umask فقط می‌تواند مجوزها را محدود کند و نمی‌تواند مجوزی را که برنامه درخواست نکرده است به فایل اضافه کند.


ساختار عددی umask

umask معمولاً به‌صورت سه یا چهار رقم Octal نمایش داده می‌شود:

0022

سه رقم سمت راست به‌ترتیب مربوط به بخش‌های زیر هستند:

Owner
Group
Other

در مقدار 022:

Owner mask: 0
Group mask: 2
Other mask: 2

مقادیر عددی Permissionها عبارت‌اند از:

مجوزمقدار
Read4
Write2
Execute1
بدون محدودیت0

ترکیب این مقادیر، Permission Mask نهایی را ایجاد می‌کند.

مقدار umaskمجوزهای حذف‌شده
0هیچ مجوزی حذف نمی‌شود
1Execute حذف می‌شود
2Write حذف می‌شود
3Write و Execute حذف می‌شوند
4Read حذف می‌شود
5Read و Execute حذف می‌شوند
6Read و Write حذف می‌شوند
7تمام مجوزها حذف می‌شوند

تفاوت umask با chmod

دستور chmod مجوز فایل یا پوشه‌ای را که از قبل وجود دارد تغییر می‌دهد.

برای مثال:

chmod 640 report.txt

اما umask مجوز پیش‌فرض فایل‌ها و پوشه‌هایی را کنترل می‌کند که در آینده ایجاد می‌شوند.

برای مثال:

umask 027

این دستور Permission فایل‌های قبلی را تغییر نمی‌دهد.

تفاوت کلی:

ابزارکاربرد
umaskتعیین محدودیت مجوز هنگام ایجاد فایل یا پوشه جدید
chmodتغییر مجوز فایل یا پوشه موجود
chownتغییر مالک
chgrpتغییر گروه مالک
setfaclتعریف دسترسی پیشرفته برای کاربران و گروه‌ها

مشاهده مقدار فعلی umask

برای مشاهده مقدار Octal فعلی:

umask

نمونه خروجی:

0022

برای نمایش umask به‌شکل Symbolic:

umask -S

نمونه خروجی:

u=rwx,g=rx,o=rx

این خروجی Permissionهایی را نشان می‌دهد که پس از اعمال umask برای پوشه‌ها قابل استفاده هستند.

در این مثال:

Owner: Read, Write, and Execute
Group: Read and Execute
Other: Read and Execute

این مقدار معادل umask زیر است:

0022

مشاهده umask پردازش جاری

در سیستم‌های لینوکسی جدید می‌توان Mask پردازش را از مسیر /proc مشاهده کرد:

grep '^Umask:' /proc/$$/status

نمونه خروجی:

Umask:	0022

متغیر $$ شناسه Process مربوط به Shell جاری را نمایش می‌دهد.


آزمایش عملی umask

ابتدا مقدار فعلی را مشاهده کنید:

umask

سپس یک فایل و یک پوشه ایجاد کنید:

touch test-file
mkdir test-directory

مجوزهای آن‌ها را بررسی کنید:

stat -c '%a %n' test-file test-directory

اگر umask برابر 022 باشد، خروجی معمولاً به‌شکل زیر است:

644 test-file
755 test-directory

در پایان فایل‌ها را حذف کنید:

rm -f test-file
rmdir test-directory

محاسبه مجوز نهایی

umask از نظر فنی با حذف Permission Bitها عمل می‌کند و نباید همیشه آن را یک تفریق ریاضی ساده در نظر گرفت.

برای مقادیر رایج می‌توان از جدول زیر استفاده کرد:

umaskفایل جدیدپوشه جدیدکاربرد رایج
000666777دسترسی بسیار باز
002664775محیط گروهی
007660770دسترسی مالک و گروه
022644755مقدار عمومی رایج
027640750سرورهای محدودتر
077600700اطلاعات خصوصی
277400500بسیار محدود و غیرمعمول

مثال umask برابر 022

umask: 022

New files:       644
New directories: 755

مجوز فایل:

Owner: Read and Write
Group: Read Only
Other: Read Only

مجوز پوشه:

Owner: Read, Write, and Execute
Group: Read and Execute
Other: Read and Execute

مثال umask برابر 027

umask: 027

New files:       640
New directories: 750

مجوز فایل:

Owner: Read and Write
Group: Read Only
Other: No Access

مجوز پوشه:

Owner: Read, Write, and Execute
Group: Read and Execute
Other: No Access

این مقدار برای بسیاری از سرورهای سازمانی انتخاب مناسبی است.


مثال umask برابر 077

umask: 077

New files:       600
New directories: 700

مجوز فایل:

Owner: Read and Write
Group: No Access
Other: No Access

مجوز پوشه:

Owner: Read, Write, and Execute
Group: No Access
Other: No Access

این مقدار برای فایل‌های خصوصی، کلیدها، Backupها و اطلاعات حساس مناسب است.


مثال umask برابر 002

umask: 002

New files:       664
New directories: 775

مجوز فایل:

Owner: Read and Write
Group: Read and Write
Other: Read Only

مجوز پوشه:

Owner: Read, Write, and Execute
Group: Read, Write, and Execute
Other: Read and Execute

این مقدار در محیط‌هایی کاربرد دارد که اعضای یک گروه باید بتوانند فایل‌های یکدیگر را ویرایش کنند.


تغییر موقت umask

برای تغییر umask در Shell جاری:

umask 027

بررسی:

umask

خروجی:

0027

اکنون یک فایل و پوشه ایجاد کنید:

touch secure-file
mkdir secure-directory

مجوزها را بررسی کنید:

stat -c '%a %n' secure-file secure-directory

خروجی موردانتظار:

640 secure-file
750 secure-directory

این تغییر فقط روی Shell جاری و Processهایی که از آن اجرا می‌شوند اثر دارد.

پس از خروج از Session یا بازکردن Terminal جدید، ممکن است مقدار قبلی دوباره اعمال شود.


آزمایش umask بدون تغییر Shell اصلی

برای آزمایش umask داخل یک Subshell:

(
    umask 077
    touch /tmp/private-file
    mkdir /tmp/private-directory
    stat -c '%a %n' /tmp/private-file /tmp/private-directory
)

خروجی موردانتظار:

600 /tmp/private-file
700 /tmp/private-directory

در پایان:

rm -f /tmp/private-file
rmdir /tmp/private-directory

پس از خروج از Subshell، umask اصلی Shell تغییر نمی‌کند.


تنظیم umask به‌شکل Symbolic

علاوه بر حالت عددی، می‌توان umask را به‌شکل Symbolic تنظیم کرد.

معادل 022:

umask u=rwx,g=rx,o=rx

معادل 027:

umask u=rwx,g=rx,o=

معادل 077:

umask u=rwx,g=,o=

برای بررسی مقدار:

umask
umask -S

حالت عددی برای مستندسازی و مدیریت سرورها رایج‌تر و خواناتر است.


تنظیم دائمی umask برای یک کاربر

فایل مناسب تنظیم umask به نوع Shell و شیوه ورود کاربر بستگی دارد.

برای Bash معمولاً می‌توان مقدار را در یکی از فایل‌های زیر قرار داد:

~/.profile
~/.bash_profile
~/.bashrc

در بسیاری از توزیع‌ها، فایل ~/.profile برای Login Sessionها مناسب است.

فایل را باز کنید:

nano ~/.profile

خط زیر را در انتهای فایل اضافه کنید:

umask 027

فایل را ذخیره کرده و از Session خارج شوید:

exit

پس از ورود مجدد:

umask

خروجی:

0027

از تعریف چند مقدار متفاوت در .profile، .bash_profile و .bashrc خودداری کنید؛ زیرا آخرین مقداری که اجرا می‌شود، مقدارهای قبلی را جایگزین خواهد کرد.


اعمال تنظیم بدون خروج از Session

برای بارگذاری دوباره فایل:

source ~/.profile

سپس:

umask

این روش فقط در صورتی مؤثر است که مقدار umask در همان فایل تعریف شده باشد.


تنظیم umask برای تمام کاربران

برای تنظیم System-wide می‌توان یک Script در مسیر /etc/profile.d ایجاد کرد:

sudo nano /etc/profile.d/umask.sh

محتوای فایل:

umask 027

مجوز فایل را تنظیم کنید:

sudo chmod 644 /etc/profile.d/umask.sh

پس از ورود مجدد کاربران، مقدار جدید اعمال می‌شود.

بررسی:

umask

فایل‌های /etc/profile و /etc/profile.d معمولاً برای Login Shellها بارگذاری می‌شوند. سرویس‌های systemd، Cron Jobها و برنامه‌هایی که بدون Login Shell اجرا می‌شوند الزاماً از این تنظیم استفاده نمی‌کنند.


تنظیم umask در Ubuntu و Debian

در Ubuntu و Debian ممکن است تنظیم umask از چند محل تأثیر بپذیرد:

/etc/profile
/etc/bash.bashrc
/etc/profile.d/
/etc/login.defs
PAM configuration
User shell configuration

برای جست‌وجوی تنظیم‌های موجود:

grep -RniE '^[[:space:]]*umask[[:space:]]+' \
/etc/profile \
/etc/bash.bashrc \
/etc/profile.d \
2>/dev/null

فایل‌های کاربر را نیز بررسی کنید:

grep -nE '^[[:space:]]*umask[[:space:]]+' \
~/.profile \
~/.bash_profile \
~/.bashrc \
2>/dev/null

آخرین مقدار اجراشده، umask نهایی Session را مشخص می‌کند.


تنظیم umask در AlmaLinux، Rocky Linux و RHEL

در سیستم‌های مبتنی بر RHEL معمولاً فایل‌های زیر باید بررسی شوند:

/etc/profile
/etc/bashrc
/etc/profile.d/
/etc/login.defs
User shell configuration
PAM configuration

برای جست‌وجوی تنظیم‌های موجود:

grep -RniE '^[[:space:]]*umask[[:space:]]+' \
/etc/profile \
/etc/bashrc \
/etc/profile.d \
2>/dev/null

برای تعریف یک مقدار عمومی:

sudo nano /etc/profile.d/umask.sh

محتوا:

umask 027

سپس:

sudo chmod 644 /etc/profile.d/umask.sh

کاربران باید Logout و دوباره Login کنند.


نقش فایل /etc/login.defs

فایل /etc/login.defs شامل تنظیمات پیش‌فرض ابزارهای مدیریت حساب و برخی Login Processها است.

برای مشاهده مقدار UMASK:

grep -E '^[[:space:]]*UMASK' /etc/login.defs

نمونه خروجی:

UMASK		022

برای ویرایش:

sudo nano /etc/login.defs

نمونه تنظیم:

UMASK		027

بااین‌حال، باید به نکات زیر توجه کرد:

  • این فایل یک تنظیم عمومی و تضمین‌شده برای تمام Processها نیست.
  • رفتار آن به ابزار Login و PAM بستگی دارد.
  • ممکن است تنظیم Shell مقدار آن را جایگزین کند.
  • سرویس‌های systemd از Shell Login استفاده نمی‌کنند.
  • تغییر آن معمولاً روی Sessionهای موجود اثر ندارد.

بنابراین بعد از تغییر، حتماً با یک Login جدید مقدار واقعی را بررسی کنید:

umask

تنظیم umask با PAM

در برخی سیستم‌ها ماژول pam_umask مقدار umask را هنگام ورود کاربر اعمال می‌کند.

برای جست‌وجوی این ماژول:

grep -Rni 'pam_umask' /etc/pam.d/

نمونه خروجی:

/etc/pam.d/common-session:session optional pam_umask.so

یا ممکن است در فایل‌های مربوط به SSH، Login یا System Authentication تعریف شده باشد.

ماژول PAM می‌تواند مقدار را از منابع زیر دریافت کند:

GECOS user field
umask argument in PAM configuration
UMASK in /etc/login.defs

قبل از تغییر فایل‌های PAM از آن‌ها Backup تهیه کنید؛ زیرا اشتباه در PAM می‌تواند مانع ورود کاربران به سیستم شود.


تنظیم umask برای سرویس‌های systemd

سرویس‌های systemd معمولاً umask فایل‌های Shell کاربران را دریافت نمی‌کنند.

برای یک سرویس systemd باید از گزینه UMask استفاده شود.

ابتدا Override ایجاد کنید:

sudo systemctl edit myservice

محتوای زیر را وارد کنید:

[Service]
UMask=0027

سپس تنظیمات را بارگذاری کنید:

sudo systemctl daemon-reload

سرویس را Restart کنید:

sudo systemctl restart myservice

برای مشاهده تنظیم:

systemctl show myservice -p UMask

نمونه خروجی:

UMask=0027

بررسی umask واقعی Process سرویس

شناسه Process اصلی سرویس را دریافت کنید:

systemctl show myservice -p MainPID --value

سپس:

PID=$(systemctl show myservice -p MainPID --value)
grep '^Umask:' /proc/"$PID"/status

نمونه خروجی:

Umask:	0027

اگر مقدار MainPID برابر 0 باشد، سرویس در حال اجرا نیست یا Process اصلی مشخصی ندارد.


تنظیم umask برای Cron Job

Cron Job ممکن است umask موردنظر کاربر را از فایل‌های Shell دریافت نکند.

بهتر است مقدار umask را صریحاً در ابتدای Script مشخص کنید:

#!/bin/bash

umask 077

backup_dir="/var/backups/private"
mkdir -p "$backup_dir"
touch "$backup_dir/backup.log"

همچنین می‌توان آن را مستقیماً در Crontab تعریف کرد:

UMASK=077

بااین‌حال، پشتیبانی و رفتار این متغیر ممکن است میان Cron Implementationها متفاوت باشد. روش مطمئن‌تر، اجرای دستور umask داخل Script است.

نمونه Cron Job:

0 2 * * * umask 077 && /usr/local/bin/backup.sh

تنظیم umask داخل Script

برای جلوگیری از وابستگی Script به محیط کاربر، بهتر است مقدار umask در ابتدای Script مشخص شود.

نمونه Script امن:

#!/bin/bash

set -euo pipefail
umask 077

output_dir="/var/lib/myapp/private"
mkdir -p "$output_dir"

date > "$output_dir/run.log"

فایل ایجادشده معمولاً مجوز زیر را خواهد داشت:

600

پوشه جدید معمولاً با مجوز زیر ایجاد می‌شود:

700

استفاده از umask در پوشه‌های اشتراکی

فرض کنید چند کاربر عضو گروه developers هستند و باید بتوانند فایل‌های یکدیگر را ویرایش کنند.

در این شرایط umask برابر 002 می‌تواند مناسب باشد.

ابتدا گروه را ایجاد کنید:

sudo groupadd developers

کاربران را اضافه کنید:

sudo usermod -aG developers ali
sudo usermod -aG developers reza

پوشه مشترک را ایجاد کنید:

sudo mkdir -p /srv/developers

مالکیت را تنظیم کنید:

sudo chown root:developers /srv/developers

SetGID را روی پوشه فعال کنید:

sudo chmod 2775 /srv/developers

کاربران باید در Session کاری خود مقدار زیر را داشته باشند:

umask 002

نتیجه معمول:

New files:       664
New directories: 775

در این حالت اعضای گروه می‌توانند فایل‌های یکدیگر را ویرایش کنند.

برای پوشه‌های اشتراکی پیچیده‌تر، استفاده از SetGID همراه با Default ACL معمولاً کنترل دقیق‌تری فراهم می‌کند.


ارتباط umask با ACL

اگر پوشه والد دارای Default ACL باشد، محاسبه ساده 666 یا 777 همراه با umask ممکن است نتیجه دقیق نهایی را نشان ندهد.

برای بررسی Default ACL:

getfacl -d /srv/project

نمونه خروجی:

user::rwx
user:ali:rwx
group::r-x
mask::rwx
other::---

در این شرایط فایل‌ها و پوشه‌های جدید ACL را از پوشه والد دریافت می‌کنند و Permission نهایی براساس موارد زیر تعیین می‌شود:

  • Mode درخواست‌شده توسط برنامه
  • Default ACL پوشه والد
  • ACL Mask
  • Permissionهای مالک، گروه و سایر کاربران

بنابراین اگر مجوز نهایی با مقدار موردانتظار umask مطابقت نداشت، ACL پوشه والد را بررسی کنید:

getfacl /srv/project

umask نمی‌تواند Permission اضافه کند

فرض کنید برنامه فایلی را با Mode برابر 0600 ایجاد کند.

حتی اگر umask برابر 000 باشد، مجوز نهایی فایل همچنان 600 باقی می‌ماند.

Application requested mode: 600
umask:                     000
Final permissions:         600

umask فقط Permissionهای موجود را حذف می‌کند و نمی‌تواند Permission جدیدی اضافه کند.

برخی برنامه‌ها، به‌خصوص نرم‌افزارهای امنیتی و ابزارهای تولید کلید، فایل‌ها را عمداً با Permission محدود ایجاد می‌کنند.


چرا فایل‌ها با umask برابر 000 مجوز 777 نمی‌گیرند؟

فایل‌های معمولی معمولاً با Base Mode برابر 666 ایجاد می‌شوند:

File base permissions: 666

بنابراین با umask برابر 000 نتیجه فایل:

666

خواهد بود، نه 777.

پوشه‌ها با Base Mode برابر 777 ایجاد می‌شوند:

Directory base permissions: 777

بنابراین با umask برابر 000 پوشه‌ها می‌توانند مجوز 777 دریافت کنند.

برای Executable کردن فایل باید بعداً از chmod استفاده شود:

chmod +x script.sh

تعیین umask مناسب

مقدار مناسب به نوع سرور و کاربرد فایل‌ها بستگی دارد.

سرور عمومی

Recommended umask: 022
New files:        644
New directories:  755

در این حالت سایر کاربران می‌توانند فایل‌ها را بخوانند، اما نمی‌توانند آن‌ها را تغییر دهند.


سرور سازمانی محدود

Recommended umask: 027
New files:        640
New directories:  750

در این حالت سایر کاربران هیچ دسترسی ندارند و گروه فقط دسترسی محدود دریافت می‌کند.


فایل‌های کاملاً خصوصی

Recommended umask: 077
New files:        600
New directories:  700

این مقدار برای موارد زیر مناسب است:

  • Private keys
  • Backup files
  • Password exports
  • API credentials
  • Security reports
  • User-private application data

محیط اشتراکی گروهی

Recommended umask: 002
New files:        664
New directories:  775

این مقدار برای تیم‌هایی مناسب است که اعضای یک گروه باید بتوانند فایل‌های یکدیگر را ویرایش کنند.


بررسی umask کاربران فعال

برای بررسی کاربر فعلی:

umask

برای بررسی یک کاربر دیگر می‌توان یک Login Shell اجرا کرد:

sudo -iu ali umask

نمونه خروجی:

0027

برای مشاهده حالت Symbolic:

sudo -iu ali umask -S

نمونه خروجی:

u=rwx,g=rx,o=

بررسی Permission واقعی فایل‌های ایجادشده توسط یک کاربر

یک فایل آزمایشی با هویت کاربر ایجاد کنید:

sudo -u ali touch /tmp/ali-test-file

مجوز را بررسی کنید:

stat -c '%a %U %G %n' /tmp/ali-test-file

نمونه خروجی:

644 ali ali /tmp/ali-test-file

توجه کنید sudo -u ali الزاماً Login Environment کامل کاربر را بارگذاری نمی‌کند.

برای آزمایش تنظیم Login کاربر:

sudo -iu ali bash -c '
    umask
    touch /tmp/ali-login-test
    stat -c "%a %U %G %n" /tmp/ali-login-test
'

در پایان:

sudo rm -f /tmp/ali-test-file /tmp/ali-login-test

پیدا کردن تنظیم‌های متداخل umask

اگر مقدار umask برخلاف انتظار تغییر می‌کند، تمام فایل‌های تنظیمات را جست‌وجو کنید.

برای کاربر جاری:

grep -nE '^[[:space:]]*umask[[:space:]]+' \
~/.profile \
~/.bash_profile \
~/.bash_login \
~/.bashrc \
2>/dev/null

برای تنظیمات System-wide:

sudo grep -RniE '^[[:space:]]*umask[[:space:]]+' \
/etc/profile \
/etc/bash.bashrc \
/etc/bashrc \
/etc/profile.d \
2>/dev/null

همچنین:

grep -E '^[[:space:]]*UMASK' /etc/login.defs

و تنظیمات PAM:

grep -Rni 'pam_umask' /etc/pam.d/

آخرین مقدار اعمال‌شده در فرآیند راه‌اندازی Session، مقدار نهایی را تعیین می‌کند.


رفع مشکلات رایج umask

تغییر umask روی فایل‌های قدیمی اثر ندارد

umask فقط هنگام ایجاد فایل یا پوشه اعمال می‌شود.

برای تغییر فایل‌های موجود از chmod استفاده کنید:

find /srv/project -type f -exec chmod 640 {} +
find /srv/project -type d -exec chmod 750 {} +

قبل از اجرای بازگشتی، مسیر و Permission موردنظر را با دقت بررسی کنید.


مقدار در .bashrc تنظیم شده اما هنگام SSH اعمال نمی‌شود

ممکن است SSH Session فایل .bashrc را به‌شکل موردانتظار بارگذاری نکند یا فایل دیگری مقدار را جایگزین کند.

فایل‌های Login را بررسی کنید:

grep -nE '^[[:space:]]*umask[[:space:]]+' \
~/.bash_profile \
~/.profile \
~/.bashrc \
2>/dev/null

برای Login Session معمولاً .profile یا .bash_profile محل مناسب‌تری است.

پس از تغییر، از سیستم خارج و دوباره وارد شوید.


مقدار در /etc/login.defs تغییر کرده اما اعمال نمی‌شود

فایل /etc/login.defs تنها یکی از منابع احتمالی تنظیم است.

موارد زیر را بررسی کنید:

Shell startup files
PAM configuration
System-wide profile scripts
Service manager configuration
Application-specific settings

مقدار واقعی را بعد از Login جدید بررسی کنید:

umask

سرویس umask کاربر را رعایت نمی‌کند

سرویس systemd از Shell کاربر استفاده نمی‌کند.

برای آن Override تعریف کنید:

sudo systemctl edit myservice
[Service]
UMask=0027

سپس:

sudo systemctl daemon-reload
sudo systemctl restart myservice

Permission نهایی با محاسبه umask مطابقت ندارد

موارد زیر را بررسی کنید:

  1. برنامه فایل را با Mode محدودتری ایجاد کرده است.
  2. پوشه والد Default ACL دارد.
  3. برنامه پس از ایجاد فایل، chmod اجرا می‌کند.
  4. فایل روی NFS یا CIFS قرار دارد.
  5. سرویس umask مستقلی دارد.
  6. Script مقدار umask را تغییر داده است.
  7. ACL Mask دسترسی را محدود کرده است.

بررسی ACL:

getfacl /path/to/file
getfacl -d /path/to/directory

بررسی Mount:

findmnt -T /path/to/file -o TARGET,FSTYPE,OPTIONS

مقدار umask پس از خروج از Terminal بازمی‌گردد

تغییر زیر موقت است:

umask 027

برای دائمی‌شدن باید آن را در فایل مناسب Shell یا تنظیمات System-wide قرار دهید.

برای کاربر:

~/.profile

برای تمام کاربران:

/etc/profile.d/umask.sh

برای سرویس systemd:

UMask=0027

umask بسیار محدود باعث اختلال برنامه شده است

مقادیر محدود مانند 077 ممکن است مانع دسترسی گروه یا سرویس دیگری به فایل‌ها شوند.

ابتدا نیاز واقعی برنامه را مشخص کنید.

برای مثال، اگر وب‌سرور باید فایل ساخته‌شده را بخواند، مقدار 077 ممکن است مناسب نباشد.

ممکن است مقدار زیر مناسب‌تر باشد:

027

یا لازم باشد از Group Ownership، SetGID یا ACL استفاده شود.


نکات امنیتی و بهترین روش‌ها

  • مقدار umask را متناسب با کاربرد سیستم انتخاب کنید.
  • روی سرورهای حساس از 027 یا 077 استفاده کنید.
  • از 000 در محیط Production خودداری کنید.
  • برای فایل‌های محرمانه از 077 استفاده کنید.
  • برای پوشه‌های تیمی، Group Ownership و SetGID را همراه umask بررسی کنید.
  • سرویس‌های systemd را با گزینه UMask تنظیم کنید.
  • داخل Scriptهای حساس مقدار umask را صریحاً مشخص کنید.
  • بعد از تغییر، یک فایل و پوشه آزمایشی ایجاد کنید.
  • تنظیمات کاربر، PAM و Shell را از نظر تداخل بررسی کنید.
  • umask را جایگزین ACL یا مالکیت صحیح نکنید.
  • قبل از تغییر System-wide اثر آن را روی سرویس‌ها آزمایش کنید.
  • مجوز فایل‌های موجود را جداگانه بررسی کنید.
  • برای Backupها، کلیدها و Tokenها مجوزهای محدود در نظر بگیرید.
  • در محیط‌های اشتراکی از 002 فقط همراه با گروه‌بندی صحیح استفاده کنید.
  • برای برنامه‌های خاص، مستندات Permission همان برنامه را بررسی کنید.

اشتباهات رایج

موارد زیر از اشتباهات رایج در تنظیم umask هستند:

  • تصور اینکه umask فایل‌های قبلی را تغییر می‌دهد
  • محاسبه umask فقط با تفریق ساده
  • انتظار مجوز 777 برای فایل معمولی
  • تنظیم 000 روی سرور Production
  • تنظیم 077 بدون بررسی نیاز سرویس‌ها
  • تعریف umask فقط در .bashrc
  • نادیده‌گرفتن PAM و /etc/login.defs
  • انتظار اعمال تنظیم Shell روی systemd
  • نادیده‌گرفتن Default ACL
  • تعریف چند مقدار متفاوت در فایل‌های Shell
  • بررسی‌نکردن Permission واقعی پس از تغییر
  • استفاده از chmod -R 777 برای رفع مشکلات
  • تنظیم umask مشترک بدون بررسی گروه مالک
  • فراموش‌کردن SetGID در پوشه‌های تیمی
  • وابسته‌کردن Script امنیتی به umask محیط کاربر

چک‌لیست نهایی

پس از تنظیم umask موارد زیر را بررسی کنید:

  • مقدار فعلی با دستور umask بررسی شده است.
  • حالت Symbolic با umask -S بررسی شده است.
  • مقدار مناسب براساس کاربرد سیستم انتخاب شده است.
  • یک فایل آزمایشی ایجاد شده است.
  • یک پوشه آزمایشی ایجاد شده است.
  • Permission واقعی با stat بررسی شده است.
  • تنظیم دائمی در فایل صحیح قرار گرفته است.
  • کاربر Logout و دوباره Login کرده است.
  • تنظیم‌های متداخل Shell بررسی شده‌اند.
  • /etc/login.defs بررسی شده است.
  • تنظیم PAM در صورت نیاز بررسی شده است.
  • سرویس‌های systemd دارای UMask مناسب هستند.
  • Scriptهای حساس umask صریح دارند.
  • Default ACL پوشه والد بررسی شده است.
  • Permission فایل‌های قدیمی جداگانه اصلاح شده است.
  • سرویس‌ها پس از تغییر آزمایش شده‌اند.
  • مقدار بسیار باز مانند 000 استفاده نشده است.

دستورات پرکاربرد umask

مشاهده مقدار فعلی:

umask

نمایش Symbolic:

umask -S

تنظیم عمومی:

umask 022

تنظیم محدودتر:

umask 027

تنظیم خصوصی:

umask 077

تنظیم گروهی:

umask 002

بررسی umask Process جاری:

grep '^Umask:' /proc/$$/status

آزمایش Permission:

touch test-file
mkdir test-directory
stat -c '%a %n' test-file test-directory

تنظیم برای systemd:

[Service]
UMask=0027

جمع‌بندی

umask یکی از تنظیمات پایه و مهم مدیریت Permission در لینوکس است. این مقدار مشخص می‌کند هنگام ایجاد فایل یا پوشه جدید، کدام Permissionها از مجوز اولیه حذف شوند.

فایل‌های معمولی غالباً با Base Permission برابر 666 و پوشه‌ها با Base Permission برابر 777 ایجاد می‌شوند. برای مثال، umask برابر 022 معمولاً فایل‌هایی با مجوز 644 و پوشه‌هایی با مجوز 755 ایجاد می‌کند.

مقادیر رایج umask عبارت‌اند از:

022 = Standard general-purpose permissions
027 = Restricted server permissions
077 = Private user-only permissions
002 = Collaborative group permissions

تنظیم umask در Shell فقط روی همان Session و Processهای فرزند اثر دارد. برای تنظیم دائمی باید فایل‌های Startup کاربر، تنظیمات System-wide، PAM یا گزینه UMask در systemd بررسی شوند.

همچنین در پوشه‌هایی که Default ACL دارند، Permission نهایی ممکن است فقط براساس محاسبه ساده umask تعیین نشود. به همین دلیل بعد از هر تغییر باید Permission واقعی فایل‌ها و پوشه‌های آزمایشی بررسی شود.

هنوز نیاز به کمک دارید؟

آیا سوالی دارید؟

آیا این مقاله برای شما مفید بود؟ بله خیر

نظرات خود را بنویسید... لغو پاسخ

اشتراک گذاری این مقاله

آموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید

کپی کردن لینک

Clipboard Icon

جدیدترین مقالات

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی ...
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

تقویم

آگوست 2026
شیدسچپج
1234567
891011121314
15161718192021
22232425262728
293031 
« جولای    

عضویت

جدیدترین پست‌ها

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی Ubuntu 24.04
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

سلام