تا به حال شده به این فکر کنید که چرا وقتی فایل یا دایرکتوری جدیدی در لینوکس ایجاد میکنید با پرمیژن های پیش فرض 644 برای فایل و 755 برای دایرکتوری ایجاد میشوند؟ این مقادیر پیش فرض از کجا میآیند؟ و آیا امکان تغییر این مقادیر پیش فرض وجود دارد و چگونه؟؟
Umask در Linux چیست؟
Umask (مخفف user file-creation mode mask) توسط سیستم های مبتنی بر یونیکس برای تنظیم مجوزهای (permissions) پیش فرض برای فایل ها و دایرکتوری های تازه ایجاد شده استفاده می شود که این کار را با mask کردن یا کم کردن این مجوزها انجام می دهد. برای مثال، با تنظیم Umask روی 022 در اکثر سیستمها، تمام فایلهای جدیدی که ایجاد میکنیم، مقدار Umask را از مجوزهای کامل کم میکنند (برای فایلها : 666 - 022 = 644 ). Umask را می توان در مقادیر octal یا symbolic بیان کرد.
مقادیر octal (مثلا 027) - این سه رقم بر مجوزهای حاصله برای users ، groups و «nobody» تأثیر میگذارد.
مقادیر symbolic (مانند u=rwx,g=rx,o=rx) - معادل مقادیر اکتال 022. مجوزهای نمادین (symbolic) لیست شده در اینجا واقعاً با Umask پوشانده یا کم نمی شوند، بلکه مقداری از u=rwx,g=rx,o=rx منجر به ایجاد دایرکتوری با u=rwx,g=rx,o=rx و فایل هایی با مجوز u=rw,g=r,o=r می شود، با توجه به اینکه فایل ها را نمی توان با ویژگی اجرایی ایجاد کرد.
چگونه دستور Umask لینوکس مفید است؟
دستور umask لینوکس زمانی بسیار مفید است که چندین کاربر در حال ایجاد فایلها و دایرکتوریهای جدید (به خصوص در هر نوع محیط مشترک) هستند. مدیران سیستم میتوانند اطمینان حاصل کنند که با تنظیم مناسب مقادیر umask، کاربران مختلف بجای تعمیر و تنظیم دستی آنها، به طور پیشفرض فایلهایی با مجوزهای امن ایجاد میکنند، که ممکن است خطرناک، پیچیده و زمانبر باشد.
تفاوت بین chmod و umask چیست؟
در حالی که هر موقعیتی متفاوت است، مزیت umask نسبت به chmod این است که بر تمام فایل ها و دایرکتوری های ایجاد شده توسط آن کاربر در سراسر سیستم تأثیر می گذارد. با استفاده از chmod به جای اینکه فایل ها به طور پیش فرض با مجوزهای مناسب ساخته شوند، شما باید مجوزها را به طور جداگانه برای هر فایل به طور خاص تغییر دهید.
همچنین توصیه میشود مطالعه کنید :
مدیریت کاربران، گروه ها، سطوح دسترسی و خصوصیت فایل ها در لینوکس
Umask در Linux چگونه کار می کند؟
سیستمعاملهای مبتنی بر UNIX دارای مجموعهای از ویژگیها هستند که برای تعیین افرادی که مجاز به خواندن، نوشتن یا اجرای فایلها یا دایرکتوریهای خاص هستند، استفاده میشوند. سه دسته به نام "کلاس های پرمیژن" (permissions class) وجود دارد که این مجوزها برای آنها اعمال می شود و به شرح زیر می باشد.
user : به طور پیش فرض مالک یا سازنده یک فایل یا پوشه است. مالکیت فایل جدید برای این کاربر پیشفرض است.
group : مجموعه ای از کاربرانی که سطح دسترسی یا مجوزهای یکسانی را برای یک فایل یا پوشه به اشتراک می گذارند.
other : به عنوان هر کاربری که در دو دسته قبلی گنجانده نشده است تعریف می شود. این کاربران نه فایل یا پوشه ای ایجاد کرده اند و نه به گروه کاربری خاصی تعلق دارند. این گروه شامل همه افرادی است که به عنوان کاربر یا بخشی از یک گروه کاربری شناسایی نشده اند. وقتی سطح مجوز یک فایل یا پوشه را روی Other قرار می دهیم، به هر کسی که به فایل یا پوشه دسترسی داشته باشد، سطح مجوز other دسترسی می دهد.
همچنین میتوانیم permission ها را در نمادهای ارايه شده (symbolic) در سمت چپ ببینیم.
دستور umask با حذف مجوزها هنگام ایجاد فایل کار می کند. در سیستم، umask پیشفرض در حال حاضر روی مقدار اکتال 022 تنظیم شده است :
برای اینکه بفهمید وقتی umask روی 022 با چه مجوزهایی ساخته میشود، کافی است آن مقدار را از مجوزهای پیشفرض فایلها و دایرکتوری ها کم کنید که قبل از umask 666 برای فایلها و برای دارکتوری ها 777 است.
دستور زیر یک فایل ایجاد می کند، سپس با استفاده از دستور stat زیر می توان مجوزهای فایل را در حالت اکتال نشان داد :
این دستورات همین کار را انجام می دهند اما این بار با یک دایرکتوری :
مقدار umask 026 برای یک دایرکتوری، مجوزهای owner را به read, write و execute ، برای یک group فقط read و execute، و برای سایر کاربران (other) فقط قابلیت execute را با 777 - 027 = 751 تعیین می کند.
در زیر میتوانیم ببینیم که چگونه هر مقدار اکتال unmask بر روی فایلهای جدید ایجاد شده تأثیر میگذارد.
مقادیر مربوط به ایرکتوری ها :
از کجا می توانم دستور Umask را پیدا کنم؟
دستور umask لینوکس را می توان با تایپ umask در ترمینال خود پیدا کرد. همچنین می توانید از دستور which برای یافتن مسیر باینری آن استفاده کنید.
اگر میخواهید مقدار umask پیشفرض را (بهجای تنظیم مجدد در هر بار ورود) ویرایش کنید، میتوانید فایل .bash_profile خود را ویرایش کنید و دستور umask را در پایین اضافه کنید.
همچنین این مورد را میتوان در فایل bashrc. دایرکتوری home کاربر خاص نیز انجام داد.
ساختار دستور umask
خروجی manpage دستور umask :
برای مشاهده مقدار فعلی umask از دستور umask استفاده می کنیم. اجرای دستور umask به خودی خود مجوزهای پیش فرضی را ارائه می دهد که هنگام ایجاد یک فایل یا پوشه به آنها اختصاص داده می شود.
برای تغیر این مقادیر دستورات زیر را اجرا میکنیم :
علامت ### در دستور اول به جای یک عدد اکتالی واقعی استفاده میشوند.
در زیر میتوان مقادیر ترجمه شده اکتال و نحوه ارتباط آنها را مشاهده کرد.
بنابراین، وقتی دستور ls را اجرا می کنیم، مقادیر مجوزهای اکتال یا symbolic در ابتدای خروجی نشان داده می شوند :
مجوزهای تنظیم شده برای دایرکتوری آزمایشی 755 یا 'rwx' 'r-x' 'r-x' است.
مجوزهای تنظیم شده برای فایل test.txt 644 یا 'rw -' 'r - -' 'r - -' است.
خط تیره نشان دهنده مقدار 0 است.
Symbolic Headings
Numeric Headings
مکان پیکربندی Umask
در اکثر توزیع های Linux، مقدار umask را می توان در مکان های زیر پیدا کرد و پیکربندی کرد :
/etc/profile : اینجا جایی است که متغیرهای پیش فرض در سراسر سیستم ذخیره می شوند.
/etc/bash.bashrc : اینجا جایی است که فایل های پیکربندی shell پیش فرض ذخیره می شوند.
نمادهای Umask (Umask Symbols)
همانطور که در صفحه umask man در بالا ذکر شد، میتوانیم از نمادهای خاصی برای تعیین مقادیر مجوزی که میخواهیم تنظیم کنیم استفاده کنیم. برای پیش نمایش مقدار umask تنظیم شده فعلی در نمادها (Symbols)، از دستور زیر استفاده می کنیم :
برای تغییر آن، میتوانیم از دستوری استفاده کنیم که در آن حروف «u»، «g» و «o» نشاندهنده user، group و other یا world هستند، مانند شکل زیر :
هنگامی که مجوزها را به این شیوه تنظیم میکنیم، ما جای "$" را با نماد(های) مجوز مورد نظر تکمیل می کنیم. علامت برابر "="، تنها عملگر در اختیار ما (هنگام تنظیم umask با مقادیر symbolic) نیست. میتوانیم از عملگرهای جمع «+» و منها «-» نیز استفاده کنیم.
نماد = اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را ممنوع می کند
نماد + اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را نادیده بگیرند
نماد - با نادیده گرفتن مجوزهای نامشخص، مجوزها را از فعال شدن منع می کند
توجه داشته باشید :
استفاده از فاصله بعد از کاما کار نمی کند و bash پیام خطای “invalid symbolic mode operator” را نمایش می دهد.
یک نماد اضافی وجود دارد که میتوان برای زمانی که بخواهیم مجوز یکسانی را برای همه کلاسهای مجوزها (کاربر، گروه و غیره) به طور همزمان تنظیم کنیم، از آن استفاده کرد :
Umask در Linux چیست؟
Umask (مخفف user file-creation mode mask) توسط سیستم های مبتنی بر یونیکس برای تنظیم مجوزهای (permissions) پیش فرض برای فایل ها و دایرکتوری های تازه ایجاد شده استفاده می شود که این کار را با mask کردن یا کم کردن این مجوزها انجام می دهد. برای مثال، با تنظیم Umask روی 022 در اکثر سیستمها، تمام فایلهای جدیدی که ایجاد میکنیم، مقدار Umask را از مجوزهای کامل کم میکنند (برای فایلها : 666 - 022 = 644 ). Umask را می توان در مقادیر octal یا symbolic بیان کرد.
مقادیر octal (مثلا 027) - این سه رقم بر مجوزهای حاصله برای users ، groups و «nobody» تأثیر میگذارد.
مقادیر symbolic (مانند u=rwx,g=rx,o=rx) - معادل مقادیر اکتال 022. مجوزهای نمادین (symbolic) لیست شده در اینجا واقعاً با Umask پوشانده یا کم نمی شوند، بلکه مقداری از u=rwx,g=rx,o=rx منجر به ایجاد دایرکتوری با u=rwx,g=rx,o=rx و فایل هایی با مجوز u=rw,g=r,o=r می شود، با توجه به اینکه فایل ها را نمی توان با ویژگی اجرایی ایجاد کرد.
چگونه دستور Umask لینوکس مفید است؟
دستور umask لینوکس زمانی بسیار مفید است که چندین کاربر در حال ایجاد فایلها و دایرکتوریهای جدید (به خصوص در هر نوع محیط مشترک) هستند. مدیران سیستم میتوانند اطمینان حاصل کنند که با تنظیم مناسب مقادیر umask، کاربران مختلف بجای تعمیر و تنظیم دستی آنها، به طور پیشفرض فایلهایی با مجوزهای امن ایجاد میکنند، که ممکن است خطرناک، پیچیده و زمانبر باشد.
تفاوت بین chmod و umask چیست؟
در حالی که هر موقعیتی متفاوت است، مزیت umask نسبت به chmod این است که بر تمام فایل ها و دایرکتوری های ایجاد شده توسط آن کاربر در سراسر سیستم تأثیر می گذارد. با استفاده از chmod به جای اینکه فایل ها به طور پیش فرض با مجوزهای مناسب ساخته شوند، شما باید مجوزها را به طور جداگانه برای هر فایل به طور خاص تغییر دهید.
همچنین توصیه میشود مطالعه کنید :
مدیریت کاربران، گروه ها، سطوح دسترسی و خصوصیت فایل ها در لینوکس
Umask در Linux چگونه کار می کند؟
سیستمعاملهای مبتنی بر UNIX دارای مجموعهای از ویژگیها هستند که برای تعیین افرادی که مجاز به خواندن، نوشتن یا اجرای فایلها یا دایرکتوریهای خاص هستند، استفاده میشوند. سه دسته به نام "کلاس های پرمیژن" (permissions class) وجود دارد که این مجوزها برای آنها اعمال می شود و به شرح زیر می باشد.
user : به طور پیش فرض مالک یا سازنده یک فایل یا پوشه است. مالکیت فایل جدید برای این کاربر پیشفرض است.
group : مجموعه ای از کاربرانی که سطح دسترسی یا مجوزهای یکسانی را برای یک فایل یا پوشه به اشتراک می گذارند.
other : به عنوان هر کاربری که در دو دسته قبلی گنجانده نشده است تعریف می شود. این کاربران نه فایل یا پوشه ای ایجاد کرده اند و نه به گروه کاربری خاصی تعلق دارند. این گروه شامل همه افرادی است که به عنوان کاربر یا بخشی از یک گروه کاربری شناسایی نشده اند. وقتی سطح مجوز یک فایل یا پوشه را روی Other قرار می دهیم، به هر کسی که به فایل یا پوشه دسترسی داشته باشد، سطح مجوز other دسترسی می دهد.
همچنین میتوانیم permission ها را در نمادهای ارايه شده (symbolic) در سمت چپ ببینیم.
دستور umask با حذف مجوزها هنگام ایجاد فایل کار می کند. در سیستم، umask پیشفرض در حال حاضر روی مقدار اکتال 022 تنظیم شده است :
کد PHP:
[root@host umask]# umask
0022
برای اینکه بفهمید وقتی umask روی 022 با چه مجوزهایی ساخته میشود، کافی است آن مقدار را از مجوزهای پیشفرض فایلها و دایرکتوری ها کم کنید که قبل از umask 666 برای فایلها و برای دارکتوری ها 777 است.
کد PHP:
New files: 666 - 022 = 644
New directories: 777 - 022 = 755
دستور زیر یک فایل ایجاد می کند، سپس با استفاده از دستور stat زیر می توان مجوزهای فایل را در حالت اکتال نشان داد :
کد PHP:
[root@host umask]# touch newfile.txt
[root@host umask]# stat -c '%a' newfile.txt
644
این دستورات همین کار را انجام می دهند اما این بار با یک دایرکتوری :
کد PHP:
[root@host umask]# mkdir newdirectory
[root@host umask]# stat -c '%a' newdirectory
755
مقدار umask 026 برای یک دایرکتوری، مجوزهای owner را به read, write و execute ، برای یک group فقط read و execute، و برای سایر کاربران (other) فقط قابلیت execute را با 777 - 027 = 751 تعیین می کند.
کد PHP:
[root@host umask]# umask 026
[root@host umask]# umask
0026
[root@host umask]# mkdir testdir
[root@host umask]# stat -c '%a' testdir
751
در زیر میتوانیم ببینیم که چگونه هر مقدار اکتال unmask بر روی فایلهای جدید ایجاد شده تأثیر میگذارد.
کد PHP:
0: read and write.
1: read and write.
2: read.
3: read.
4: write.
5: write.
6: execute only.
7: no permissions.
مقادیر مربوط به ایرکتوری ها :
کد PHP:
0: read, write and execute.
1: read and write.
2: read and execute.
3: read only.
4: write and execute.
5: write only.
6: execute only.
7: no permissions.
از کجا می توانم دستور Umask را پیدا کنم؟
دستور umask لینوکس را می توان با تایپ umask در ترمینال خود پیدا کرد. همچنین می توانید از دستور which برای یافتن مسیر باینری آن استفاده کنید.
کد PHP:
[root@host umask]# which umask
/usr/bin/umask
اگر میخواهید مقدار umask پیشفرض را (بهجای تنظیم مجدد در هر بار ورود) ویرایش کنید، میتوانید فایل .bash_profile خود را ویرایش کنید و دستور umask را در پایین اضافه کنید.
کد PHP:
[root@host ~]# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
umask 0023
همچنین این مورد را میتوان در فایل bashrc. دایرکتوری home کاربر خاص نیز انجام داد.
کد PHP:
[root@host testuser]# cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
umask 0023
ساختار دستور umask
خروجی manpage دستور umask :
کد PHP:
umask [-p] [-S] [mode]
The user file-creation mask is set to mode.
If mode begins with a digit, it is interpreted as an octal number; otherwise it is interpreted as a symbolic mode mask similar to that accepted by chmod(1). If mode is omitted, the current value of the mask is printed.
The -S option causes the mask to be printed in symbolic form; the default output is an octal number.
If the -p option is supplied, and mode is omitted, the output is in a form that may be reused as input. The return status is 0 if the mode was successfully changed or if no mode argument was supplied, and false otherwise.
برای مشاهده مقدار فعلی umask از دستور umask استفاده می کنیم. اجرای دستور umask به خودی خود مجوزهای پیش فرضی را ارائه می دهد که هنگام ایجاد یک فایل یا پوشه به آنها اختصاص داده می شود.
کد PHP:
[root@host ~]# umask
0022
[root@host ~]#
برای تغیر این مقادیر دستورات زیر را اجرا میکنیم :
کد PHP:
[root@host ~]# umask ###
[root@host ~]# umask 022
علامت ### در دستور اول به جای یک عدد اکتالی واقعی استفاده میشوند.
در زیر میتوان مقادیر ترجمه شده اکتال و نحوه ارتباط آنها را مشاهده کرد.
کد PHP:
Number Permission
4 read
2 write
1 execute
Read Write Execute Total Value Symbolic Equivalent:
0 0 0 0
0 0 1 1 x
0 2 0 2 w
0 2 1 3 wx
4 0 0 4 r
4 0 1 5 rx
4 2 0 6 rw
4 2 1 7 rwx
بنابراین، وقتی دستور ls را اجرا می کنیم، مقادیر مجوزهای اکتال یا symbolic در ابتدای خروجی نشان داده می شوند :
کد PHP:
[root@host ~]# ls
drwxr-xr-x 2 root root 4096 Apr 21 12:54 test/
-rw-r--r-- 1 root root 0 Apr 21 12:53 test.txt
مجوزهای تنظیم شده برای دایرکتوری آزمایشی 755 یا 'rwx' 'r-x' 'r-x' است.
مجوزهای تنظیم شده برای فایل test.txt 644 یا 'rw -' 'r - -' 'r - -' است.
خط تیره نشان دهنده مقدار 0 است.
Symbolic Headings
کد PHP:
--- no permission
--x execute
-w- write
-wx writeand execute
r-- read
r-x readand execute
rw- read and write
rwx read, write and execute
Numeric Headings
کد PHP:
0 --- no permission
1 --x execute
2 -w- write
3 -wx write and execute
4 r-- read
5 r-x read and execute
6 rw- read and write
7 rwx read, write and execute
مکان پیکربندی Umask
در اکثر توزیع های Linux، مقدار umask را می توان در مکان های زیر پیدا کرد و پیکربندی کرد :
/etc/profile : اینجا جایی است که متغیرهای پیش فرض در سراسر سیستم ذخیره می شوند.
/etc/bash.bashrc : اینجا جایی است که فایل های پیکربندی shell پیش فرض ذخیره می شوند.
نمادهای Umask (Umask Symbols)
همانطور که در صفحه umask man در بالا ذکر شد، میتوانیم از نمادهای خاصی برای تعیین مقادیر مجوزی که میخواهیم تنظیم کنیم استفاده کنیم. برای پیش نمایش مقدار umask تنظیم شده فعلی در نمادها (Symbols)، از دستور زیر استفاده می کنیم :
کد PHP:
umask -S
برای تغییر آن، میتوانیم از دستوری استفاده کنیم که در آن حروف «u»، «g» و «o» نشاندهنده user، group و other یا world هستند، مانند شکل زیر :
کد PHP:
umask u=$، g=$، o=$
هنگامی که مجوزها را به این شیوه تنظیم میکنیم، ما جای "$" را با نماد(های) مجوز مورد نظر تکمیل می کنیم. علامت برابر "="، تنها عملگر در اختیار ما (هنگام تنظیم umask با مقادیر symbolic) نیست. میتوانیم از عملگرهای جمع «+» و منها «-» نیز استفاده کنیم.
نماد = اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را ممنوع می کند
نماد + اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را نادیده بگیرند
نماد - با نادیده گرفتن مجوزهای نامشخص، مجوزها را از فعال شدن منع می کند
توجه داشته باشید :
استفاده از فاصله بعد از کاما کار نمی کند و bash پیام خطای “invalid symbolic mode operator” را نمایش می دهد.
یک نماد اضافی وجود دارد که میتوان برای زمانی که بخواهیم مجوز یکسانی را برای همه کلاسهای مجوزها (کاربر، گروه و غیره) به طور همزمان تنظیم کنیم، از آن استفاده کرد :
کد PHP:
umask a=
کامنت