مقدمه

در درس قبل یاد گرفتیم که چگونه حساب‌های کاربری را به صورت انفرادی مدیریت کنیم. اما فرض کنید در یک پروژه، تیمی متشکل از ۱۰ توسعه‌دهنده داریم و همه‌ی آن‌ها باید به مجموعه‌ای از فایل‌های پروژه دسترسی خواندن و نوشتن داشته باشند. آیا باید برای هر ۱۰ نفر به صورت جداگانه مجوزها را تنظیم کنیم؟ این روش نه تنها زمان‌بر است، بلکه مدیریت آن نیز بسیار دشوار خواهد بود.

راهکار لینوکس برای این مشکل، استفاده از گروه‌های کاربری (User Groups) است. یک گروه، مجموعه‌ای از کاربران است. با استفاده از گروه‌ها، ما می‌توانیم به جای تخصیص مجوز به کاربران متعدد، مجوزها را به یک گروه واحد اختصاص دهیم. سپس، با اضافه کردن یا حذف کردن کاربران از آن گروه، می‌توانیم به سادگی و به صورت متمرکز، سطح دسترسی آن‌ها را کنترل کنیم. این مفهوم، اساس مدیریت دسترسی در سیستم‌های چند کاربره است.

گروه اصلی و گروه‌های ثانویه

در لینوکس، هر کاربر حداقل به یک گروه تعلق دارد که به آن گروه اصلی (Primary Group) گفته می‌شود. به طور پیش‌فرض، وقتی شما یک کاربر جدید ایجاد می‌کنید (مثلاً useradd ali)، لینوکس یک گروه جدید نیز با همان نام (ali) ایجاد کرده و آن را به عنوان گروه اصلی آن کاربر تعیین می‌کند. هر فایلی که این کاربر از این پس ایجاد کند، به صورت پیش‌فرض به این گروه اصلی تعلق خواهد داشت.

علاوه بر یک گروه اصلی، هر کاربر می‌تواند عضو تعداد زیادی گروه ثانویه (Secondary Groups) نیز باشد. این گروه‌های ثانویه هستند که برای اعطای دسترسی‌های مشترک به منابع مختلف (مانند دایرکتوری‌های پروژه، دسترسی به سخت‌افزارهای خاص و غیره) به کار می‌روند.

برای مشاهده‌ی گروه‌هایی که یک کاربر عضو آن‌هاست، از دستور id استفاده می‌کنیم:

$ id me
uid=1000(me) gid=1000(me) groups=1000(me),27(sudo),100(users),108(developers)

در این خروجی، gid نشان‌دهنده‌ی گروه اصلی کاربر me است (که در اینجا گروه me با GID 1000 است) و بخش groups لیست تمام گروه‌هایی (اصلی و ثانویه) را که این کاربر عضو آن‌هاست، نمایش می‌دهد.

دستورات مدیریت گروه‌ها

مجموعه دستورات مدیریت گروه‌ها، شباهت زیادی به دستورات مدیریت کاربران دارد و اجرای همه‌ی آن‌ها نیازمند دسترسی ریشه (sudo) است.

۱. ایجاد گروه جدید با groupadd

برای ساختن یک گروه جدید، از دستور groupadd به سادگی استفاده می‌کنیم:

$ sudo groupadd developers

۲. ویرایش گروه با groupmod

این دستور کمتر استفاده می‌شود، اما برای کارهایی مثل تغییر نام یک گروه کاربرد دارد. برای مثال، برای تغییر نام گروه developers به engineers:

$ sudo groupmod -n engineers developers

۳. حذف گروه با groupdel

برای حذف یک گروه، از دستور groupdel استفاده می‌شود:

$ sudo groupdel engineers
توجه داشته باشید که نمی‌توانید گروهی را حذف کنید که گروه اصلی یک کاربر موجود است. برای این کار، ابتدا باید گروه اصلی آن کاربر را با دستور usermod تغییر دهید.

مدیریت عضویت کاربران در گروه‌ها

رایج‌ترین کار در مدیریت گروه‌ها، افزودن کاربران به گروه‌ها یا حذف آن‌ها از گروه‌ها است.

افزودن کاربر به گروه‌ها

برای اضافه کردن یک کاربر به یک یا چند گروه ثانویه، از دستور usermod که در درس قبل با آن آشنا شدیم، به همراه گزینه‌های -a و -G استفاده می‌کنیم.

$ sudo usermod -aG developers me

در این دستور، -G لیست گروه‌های ثانویه را مشخص می‌کند و -a (مخفف append) به معنای «الحاق کردن» است. یعنی گروه developers را به لیست گروه‌های فعلی کاربر اضافه کن.

⚠️ هشدار بسیار مهم در مورد گزینه‌ی -a

فراموش کردن گزینه‌ی -a هنگام استفاده از -G یکی از رایج‌ترین اشتباهات کاربران تازه‌کار است. اگر دستور را به صورت sudo usermod -G developers me (بدون -a) اجرا کنید، کاربر me از تمام گروه‌های ثانویه دیگر حذف شده و فقط عضو گروه developers خواهد شد. این کار می‌تواند دسترسی‌های مهم کاربر (مانند دسترسی sudo) را از بین ببرد. همیشه از -aG با هم استفاده کنید.

حذف کاربر از یک گروه

برای حذف یک کاربر از یک گروه، راه استاندارد استفاده از دستور gpasswd با گزینه‌ی -d (مخفف delete) است.

$ sudo gpasswd -d me developers
Removing user me from group developers

مشاهده اطلاعات گروه‌ها

تمام اطلاعات مربوط به گروه‌های تعریف‌شده در سیستم، در فایل متنی /etc/group ذخیره می‌شود. هر خط از این فایل مربوط به یک گروه است و ساختاری به شکل زیر دارد:

group_name:password_placeholder:GID:user_list

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

$ grep "sudo" /etc/group
sudo:x:27:me