اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

Umask چیست و چگونه از آن به طور موثر استفاده کنیم

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    Umask چیست و چگونه از آن به طور موثر استفاده کنیم

    تا به حال شده به این فکر کنید که چرا وقتی فایل یا دایرکتوری جدیدی در لینوکس ایجاد میکنید با پرمیژن های پیش فرض 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 تنظیم شده است :
    کد PHP:
    [root@host umask]# umask
    0022 





    برای اینکه بفهمید وقتی umask روی 022 با چه مجوزهایی ساخته می‌شود، کافی است آن مقدار را از مجوزهای پیش‌فرض فایل‌ها و دایرکتوری ها کم کنید که قبل از umask 666 برای فایل‌ها و برای دارکتوری ها 777 است.
    کد PHP:
        New files666 022 644
        
    New directories777 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:
        0read and write.
        
    1read and write.
        
    2read.
        
    3read.
        
    4write.
        
    5write.
        
    6execute only.
        
    7no permissions






    مقادیر مربوط به ایرکتوری ها :
    کد PHP:
        0readwrite and execute.
        
    1read and write.
        
    2read and execute.
        
    3read only.
        
    4write and execute.
        
    5write only.
        
    6execute only.
        
    7no 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 [ -~/.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 [ -/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 digitit is interpreted as an octal numberotherwise it is interpreted as a symbolic mode mask similar to that accepted by  chmod(1). If mode is omittedthe current value of the mask is printed.  

    The -S option causes the mask to be printed in symbolic formthe default output is an octal number.

    If 
    the -p option is supplied, and mode is omittedthe output is in a form that may be reused as inputThe 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 



    دستور umask









    مجوزهای تنظیم شده برای دایرکتوری آزمایشی 755 یا 'rwx' 'r-x' 'r-x' است.
    مجوزهای تنظیم شده برای فایل test.txt 644 یا 'rw -' 'r - -' 'r - -' است.
    خط تیره نشان دهنده مقدار 0 است.



    Symbolic Headings
    کد PHP:
    --- no permission  
    --x execute
    -wwrite
    -wx writeand execute
    r
    -- read
    r
    -x readand execute
    rw
    read and write
    rwx read
    write and execute 





    Numeric Headings
    کد PHP:
    --- no permission  
    --x execute
    -wwrite
    -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 -





    برای تغییر آن، می‌توانیم از دستوری استفاده کنیم که در آن حروف «u»، «g» و «o» نشان‌دهنده user، group و other یا world هستند، مانند شکل زیر :
    کد PHP:
    umask u=$، g=$، o=$ 




    هنگامی که مجوزها را به این شیوه تنظیم میکنیم، ما جای "$" را با نماد(های) مجوز مورد نظر تکمیل می کنیم. علامت برابر "="، تنها عملگر در اختیار ما (هنگام تنظیم umask با مقادیر symbolic) نیست. می‌توانیم از عملگرهای جمع «+» و منها «-» نیز استفاده کنیم.

    نماد = اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را ممنوع می کند
    نماد + اجازه می دهد تا مجوزها فعال شوند و مجوزهای نامشخص را نادیده بگیرند
    نماد - با نادیده گرفتن مجوزهای نامشخص، مجوزها را از فعال شدن منع می کند




    توجه داشته باشید :

    استفاده از فاصله بعد از کاما کار نمی کند و bash پیام خطای “invalid symbolic mode operator” را نمایش می دهد.

    یک نماد اضافی وجود دارد که می‌توان برای زمانی که بخواهیم مجوز یکسانی را برای همه کلاس‌های مجوزها (کاربر، گروه و غیره) به طور همزمان تنظیم کنیم، از آن استفاده کرد :
    کد PHP:
    umask a
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 08-24-2023, 11:33 PM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

    #2
    برای اینکه یک سرویسی از حالت mask خارج کنیم میتونیم از دستور unmask همانند زیر استفاده کنیم :
    کد PHP:
    # systemctl unmask docker.service
    # systemctl unmask docker.socket
    # systemctl start docker.service​ 

    کامنت

    درباره انجمن منطقه لینوکسی ها

    انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

    شبکه های اجتماعی
    در حال انجام ...
    X