اگر با لینوکس کار کرده باشید، احتمالا با مفاهیمی مثل 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 ، این دستور نام کاربری که در حال حاضر با اون وارد سیستم شدید رو نمایش میده.
