برچسب: سطوح دسترسی لینوکس

  • آموزش مدیریت کاربران و سطوح دسترسی در لینوکس

    آموزش مدیریت کاربران و سطوح دسترسی در لینوکس

    اگر با لینوکس کار کرده باشید، احتمالا با مفاهیمی مثل User ،Group و Permission یا همون دسترسی فایل‌ها برخورد کردید.

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

    یکی از مهم‌ترین چیزهایی که باید در مدیریت سرورهای لینوکسی بلد باشید، شناخت سطح دسترسی در لینوکس هست.

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

    توی این مقاله از بلاگ رهام کلود قراره قدم‌به‌قدم با مدیریت کاربران، گروه‌ها و سطح دسترسی فایل‌ها در لینوکس آشنا بشیم و در آخر هم چند مثال کاربردی داشته باشیم.

    پس با ما تا انتهای این مقاله همراه باشید.

     

     

    کاربر (User) در لینوکس چیه؟

    در لینوکس هر کسی که با سیستم کار می‌کنه، معمولا یک حساب کاربری داره. این حساب کاربری مشخص می‌کنه که کاربر چه دسترسی‌هایی روی سیستم داشته باشه.

    مثلا فرض کن یک سرور لینوکسی داری و سه نفر روی اون کار می‌کنن؛ مدیر سرور، توسعه‌دهنده و کاربر عادی.

    قرار نیست همه این افراد به تمام فایل‌های سرور دسترسی داشته باشن. مثلا ممکنه بخواید توسعه‌دهنده فقط به فایل‌های یک پروژه دسترسی داشته باشه و نتونه فایل‌های سیستمی رو تغییر بده.

    اینجاست که مدیریت کاربران و سطح دسترسی اهمیت پیدا میکنه.

     

    انواع کاربران در لینوکس

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

    کاربر Root

    کاربر root قدرتمندترین کاربر در لینوکسه و تقریبا به همه بخش‌های سیستم دسترسی داره. مثلا میتونه:

    -کاربر جدید بسازه
    -کاربران رو حذف کنه
    -نرم‌افزار نصب کنه
    -فایل‌های سیستمی رو تغییر بده
    -سرویس‌ها رو مدیریت کنه
    -سطح دسترسی فایل‌ها رو تغییر بده

    به همین دلیل بهتره برای کارهای روزمره همیشه با Root کار نکنیم؛ چون یک دستور اشتباه می‌تونه باعث آسیب جدی به سیستم بشه.

     

    کاربران معمولی

    این کاربران دسترسی محدودی دارن و معمولا برای کارهای روزمره ازشون استفاده میشه. مثلا میتونیم یک کاربر به اسم ali بسازیم:

    sudo adduser ali

    بعد از اجرای این دستور، لینوکس ازتون رمز عبور و چند اطلاعات دیگه میخواد.

    برای اینکه ببینید کاربر ساخته شده یا نه، میتونید از این دستور استفاده کنید:

    id ali

     

    ساخت کاربر جدید در لینوکس

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

    sudo adduser user1

    اگر فقط بخواید با دستور useradd کاربر بسازید:

    sudo useradd user1

    تفاوت این دو دستور اینه که adduser معمولا یک فرآیند تعاملی و ساده‌تر برای ساخت کاربر داره، در حالی که useradd یک ابزار سطح پایین‌تره و برای تنظیمات دقیق‌تر استفاده میشه.

    بعد از ساخت کاربر، می‌تونید با دستور زیر برای اون رمز عبور تعیین کنید:

    sudo passwd user1

    حذف کاربر در لینوکس

    اگر دیگه به یک کاربر نیاز نداشتید، میتونید اون رو حذف کنید.

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

    sudo deluser user1

    اگر بخوای پوشه Home کاربر هم حذف بشه:

    sudo deluser –remove-home user1

    در بعضی توزیع‌ها هم می‌تونی از `userdel` استفاده کنی:

    sudo userdel user1

    و برای حذف Home:

    sudo userdel -r user1

    قبل از حذف کاربر بهتره مطمئن بشید فایل مهمی داخل Home اون کاربر وجود نداشته باشه.

     

    کاربرد گروه‌ها (Groups) در لینوکس

    فرض کنید روی یک سرور 10 کاربر دارید و می‌خواید همه اون‌ها به فایل‌های یک پروژه دسترسی داشته باشن.

    به‌جای اینکه برای تک‌تک کاربران Permission تنظیم کنید، می‌تونید یک Group بسازید و کاربران رو داخل اون قرار بدید.

    مثلا یک گروه به اسم developers بسازید:

    sudo groupadd developers

    حالا کاربر ali رو به این گروه اضافه کنید:

    sudo usermod -aG developers ali

    برای اضافه کردن کاربر `reza` هم:

    sudo usermod -aG developers reza

    حالا هر دو کاربر عضو گروه developers هستن و میتونید دسترسی‌های مربوط به پروژه رو برای این گروه تنظیم کنید.

    برای دیدن گروه‌های یک کاربر:

    groups ali
    یا:
    id ali

     

    سطح دسترسی در لینوکس چیه؟

    حالا میرسیم به یکی از مهم‌ترین بخش‌های مدیریت لینوکس؛ یعنی سطح دسترسی در لینوکس.

    هر فایل و پوشه در لینوکس Permission یا سطح دسترسی مشخصی داره.

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

    سه نوع دسترسی اصلی داریم:

    Read یا r
    برای خواندن فایل استفاده میشه.

    Write یا w
    اجازه تغییر دادن فایل رو میده.

    Execute یا x
    اجازه اجرای فایل رو میده.

    اگر یک فایل رو با دستور زیر بررسی کنیم:

    ls -l

    ممکنه چیزی شبیه این ببینیم:

    –rwxr-xr-

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

    rwx برای مالک فایل
    r-x برای گروه
    –r برای سایر کاربران

     

    عددهای Permission در لینوکس

    برای مدیریت راحت‌تر سطح دسترسی در لینوکس معمولا از اعداد هم استفاده می‌کنیم.

    هر Permission یک مقدار عددی داره:

    خواندن = 4
    نوشتن = 2
    اجرا = 1

    حالا اگر بخوایم همه دسترسی‌ها رو داشته باشیم:

    4 + 2 + 1 = 7

    پس:

    rwx = 7

    اگر فقط Read و Write داشته باشیم:

    4 + 2 = 6

    پس:

    rw- = 6

    و اگر فقط Read داشته باشیم:

    r– = 4

    به همین دلیل Permissionهایی مثل این رو زیاد می‌بینیم:

    755
    644
    700
    600

     

    Permission 755 یعنی چی؟

    یکی از Permissionهای رایج در لینوکس 755 هست.

    وقتی می‌نویسیم:

    chmod 755 file.sh

    یعنی:

    مالک: rwx → خواندن، نوشتن و اجرا
    گروه: r-x → خواندن و اجرا
    سایر کاربران: r-x → خواندن و اجرا

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

     

    644 یعنی چی؟

    Permission 644 هم برای فایل‌های معمولی خیلی رایجه. مثلا:

    chmod 644 index.html

    یعنی:

    مالک: خواندن و نوشتن
    گروه: فقط خواندن
    سایر کاربران: فقط خواندن

    این نوع Permission برای فایل‌هایی مثل HTML، CSS و فایل‌های متنی کاربرد زیادی داره.

     

    دستور chmod چیست؟

    برای تغییر سطح دسترسی فایل‌ها و پوشه‌ها از دستور chmod استفاده می‌کنیم. مثلا:

    chmod 755 script.sh یا chmod 644 index.html

    یک روش دیگه هم استفاده از حالت نمادین هست.

    مثلا برای اضافه کردن دسترسی اجرا به مالک:

    chmod u+x script.sh

    اینجا:

    u یعنی User یا مالک
    g یعنی Group
    o یعنی Other
    a یعنی همه

    مثلا برای حذف دسترسی نوشتن از سایر کاربران:

    chmod o-w file.txt

     

    مالک فایل رو چطور تغییر بدیم؟

    برای تغییر Owner یک فایل یا پوشه از chown استفاده میکنیم. مثلا:

    sudo chown ali file.txt

    حالا مالک فایل file.txt کاربر ali میشه.

    اگر بخواید هم مالک و هم گروه رو تغییر بدید:

    sudo chown ali:developers file.txt

    یعنی:

    مالک: ali
    گروه: developers

    برای تغییر مالک یک پوشه و تمام فایل‌های داخلش هم می‌تونی از R- استفاده کنی:

    sudo chown -R ali:developers /var/www/project

    البته در استفاده از R- باید دقت کنی، چون تغییر مالکیت اشتباه روی یک مسیر مهم می‌تونه باعث مشکل در سرویس‌ها بشه.

     

    دستور chgrp چیه؟

    اگر فقط بخوای گروه یک فایل رو تغییر بدید، می‌تونید از chgrp استفاده کنید. مثلا:

    sudo chgrp developers project.txt

    حالا گروه فایل project.txt به developers تغییر میکنه.

     

    تفاوت chmod و chown و chgrp

    برای اینکه این سه دستور رو با هم اشتباه نگیرید، خیلی ساده میتونیم این‌طوری بگیم:

    chmod = تغییر سطح دسترسی
    chown = تغییر مالک فایل
    chgrp = تغییر گروه فایل

    مثلا فرض کن این فایل رو داریم:

    rw-r—– 1 ali developers project.txt-

    در اینجا:

    -مالک فایل ali هست.
    -گروه فایل developers هست.
    -مالک می‌تونه فایل رو بخونه و تغییر بده.
    -اعضای گروه فقط می‌تونن فایل رو بخونن.
    -سایر کاربران هیچ دسترسی ندارن.

     

    مثال مدیریت دسترسی یک پروژه

    فرض کنید یک پروژه وب روی سرور دارید:

    /var/www/myproject

    دو توسعه‌دهنده به نام‌های ali و reza روی پروژه کار میکنن.

    اول یک گروه می‌سازیم:

    sudo groupadd developers

    حالا کاربران رو به گروه اضافه می‌کنیم:

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

    بعد مالکیت پوشه پروژه رو تنظیم می‌کنیم:

    sudo chown -R root:developers /var/www/myproject

    حالا می‌تونیم Permission مناسب رو تنظیم کنیم:

    sudo chmod -R 775 /var/www/myproject

    در این حالت:

    -مالک فایل دسترسی کامل داره.
    -اعضای گروه هم دسترسی کامل دارن.
    -سایر کاربران می‌تونن فایل‌ها رو بخونن و اجرا کنن.

    البته در یک سرور واقعی، Permission مناسب کاملا به نوع پروژه و سرویس‌هایی که روی سرور اجرا میشن بستگی داره و نباید بدون بررسی، روی همه مسیرها 777 قرار بدید.

     

    چرا نباید از chmod 777 زیاد استفاده کرد؟

    احتمالا این دستور رو زیاد دیدید:

    chmod -R 777 /var/www/project

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

    ممکنه در بعضی آموزش‌ها برای حل سریع یک مشکل پیشنهاد بشه، ولی در محیط واقعی سرور کار خطرناکیه.

    چون اگر یک فایل یا پوشه حساس Permission 777 داشته باشه، کاربران یا سرویس‌های بیشتری می‌تونن اون رو تغییر بدن.

    پس بهتره به‌جای اینکه سریع سراغ 777 بریم، اول ببینیم مشکل دقیقا از کجاست و چه Permissionی واقعا نیاز داریم.

     

    دستور sudo چه کاری انجام میده؟

    کاربر معمولی همیشه اجازه اجرای دستورات مدیریتی رو نداره.

    برای اجرای بعضی دستورات با دسترسی مدیریتی از sudo استفاده می‌کنیم. مثلا:

    sudo systemctl restart nginx یا sudo apt update

    برای اینکه یک کاربر بتونه از sudo استفاده کنه، معمولا باید عضو گروه مناسب مدیریتی باشه.

    در Ubuntu مثلا می‌تونی کاربر رو به گروه sudo اضافه کنی:

    sudo usermod -aG sudo ali

    بعد از ورود مجدد کاربر، می‌تونه دستورات مدیریتی رو با sudo اجرا کنه.

    در بعضی توزیع‌ها مثل CentOS و RHEL معمولاً گروه wheel برای این کار استفاده میشه:

    sudo usermod -aG wheel ali

     

    چطور کاربران لاگین‌شده را ببینیم؟

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

    who یا w

    برای دیدن کاربری که در حال حاضر با اون وارد سیستم شدی:

    whoami

    مثلا اگر خروجی ali باشه، یعنی در حال حاضر با کاربر ali وارد سیستم هستی.

     

    چطور اطلاعات کاربران را ببینیم؟

    برای دیدن اطلاعات یک کاربر می‌تونی از id استفاده کنی:

    id ali

    خروجی ممکنه چیزی شبیه این باشه:

    uid=1001(ali) gid=1001(ali) groups=1001(ali),1002(developers)

    از این خروجی می‌فهمیم که کاربر ali عضو گروه developers هم هست.

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

    در ادامه چند دستور مهم رو یکجا داشته باشیم:

    ساخت کاربر
    sudo adduser ali

    تعیین یا تغییر رمز عبور
    sudo passwd ali

    نمایش اطلاعات کاربر
    id ali

    نمایش گروه‌های کاربر
    groups ali

    ساخت گروه
    sudo groupadd developers

    اضافه کردن کاربر به گروه
    sudo usermod -aG developers ali

    تغییر مالک فایل
    sudo chown ali file.txt

    تغییر مالک و گروه
    sudo chown ali:developers file.txt

    غییر گروه
    sudo chgrp developers file.txt

    تغییر Permission
    chmod 644 file.txt

    نمایش Permission فایل‌ها
    ls -l

    نمایش کاربر فعلی
    whoami

     

    نکاتی درباره سطح دسترسی در لینوکس

    وقتی با Permissionها کار می‌کنید، همیشه سعی کنید حداقل دسترسی لازم رو به کاربران و سرویس‌ها بدید.

    یعنی اگر یک کاربر فقط باید فایل رو بخونه، نیازی نیست بهش دسترسی Write بدید.

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

    این روش که بهش اصل حداقل دسترسی یا Least Privilege گفته میشه، یکی از نکات مهم در امنیت سرورهاست.

     

    نتیجه‌گیری

    مدیریت کاربران و Permissionها یکی از پایه‌های مهم کار با لینوکسه. اگر با سرور لینوکسی، هاستینگ یا پشتیبانی سرور کار می‌کنی، باید حداقل با مفاهیمی مثل User، Group، Owner و سطح دسترسی در لینوکس آشنا باشی.

    با دستورهایی مثل `chmod` می‌تونی دسترسی فایل‌ها رو تغییر بدی، با `chown` مالک فایل رو عوض کنی و با Groupها هم مدیریت دسترسی چند کاربر رو ساده‌تر انجام بدی.

    مهم‌ترین نکته اینه که برای حل مشکلات دسترسی، سریع سراغ `chmod 777` نری. اول بررسی کن فایل متعلق به چه کاربریه، گروهش چیه و چه Permissionهایی داره. بعد دقیقاً همون دسترسی‌ای رو تنظیم کن که واقعاً نیاز داری.

    اگر این مفاهیم رو خوب یاد بگیری، مدیریت سرورهای لینوکسی برات خیلی راحت‌تر میشه و موقع مواجه شدن با خطاهای Permission هم سریع‌تر می‌تونی مشکل رو پیدا و برطرف کنی.

     


    سوالات متداول

    سطح دسترسی در لینوکس چیست؟
    سطح دسترسی در لینوکس مشخص میکنه که مالک فایل، اعضای گروه و سایر کاربران چه کاری میتونن با یک فایل یا پوشه انجام بدن.
    این دسترسی‌ها معمولا شامل Read، Write و Execute هستن.

    تفاوت chmod و chown چیست؟
    chmod برای تغییر Permission یا سطح دسترسی استفاده میشه، اما chown برای تغییر مالک فایل یا پوشه کاربرد داره.

    Permission عددی 755 یعنی چی؟
    در Permission 755، مالک دسترسی کامل rwx داره و گروه و سایر کاربران میتونن فایل رو بخونن و اجرا کنن، ولی اجازه تغییر اون رو ندارن.

    Permission 644 برای چه فایل‌هایی مناسبه؟
    Permission 644 برای خیلی از فایل‌های معمولی مثل فایل‌های HTML، CSS و فایل‌های متنی مناسبه.
    مالک می‌تونه فایل رو بخونه و تغییر بده و بقیه فقط امکان خواندن دارن.

    آیا استفاده از chmod 777 کار درستی است؟
    معمولا نه. 777 دسترسی خیلی زیادی به کاربران میده و می‌تونه از نظر امنیتی خطرناک باشه. بهتره همیشه فقط دسترسی‌های مورد نیاز رو تنظیم کنید.

    چطور یک کاربر رو به گروه اضافه کنیم؟
    می‌تونید از دستور زیر استفاده کنید:
    sudo usermod -aG developers ali
    در این مثال، کاربر ali به گروه developers اضافه میشه.

    چطور بفهمیم یک فایل چه سطح دسترسی‌ای دارد؟
    با دستور زیر می‌تونید Permission فایل‌ها رو ببینید:
    ls -l

    چطور بفهمیم کاربر عضو چه گروه‌هایی هست؟
    کافیه دستور زیر رو اجرا کنی:
    groups username
    مثلا:
    groups ali

    چطور کاربر فعلی لینوکس را ببینیم؟
    با دستور whoami ، این دستور نام کاربری که در حال حاضر با اون وارد سیستم شدید رو نمایش میده.