دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
دانشنامه مارال هاست دانشنامه مارال هاست
دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
لینوکس
  • Folder icon closed Folder open iconآشنایی با لینوکس (Linux Fundamentals)
  • Folder icon closed Folder open iconتوزیع‌های مختلف لینوکس (Linux Distributions)
  • Folder icon closed Folder open iconFHS؛ آشنایی با ساختار فایل‌ و پوشه‌های لینوکسی
  • Folder icon closed Folder open iconمهم‌ترین دستورات پایه‌ای برای هر sysadmin
  • Folder icon closed Folder open iconمدیریت فایل و پوشه (file & directory management) در لینوکس
  • Folder icon closed Folder open iconآموزش ویرایش فایل‌های متنی در لینوکس با Nano و Vim
  • Folder icon closed Folder open iconآشنایی با users، groups و ساختار مدیریت کاربران در لینوکس
  • Folder icon closed Folder open iconآموزش Permission و Ownership در لینوکس
  • Folder icon closed Folder open iconآشنایی با Root و sudo
  • Folder icon closed Folder open iconآشنایی با Processها در لینوکس
  • Folder icon closed Folder open iconتغییر Hostname در لینوکس
  • Folder icon closed Folder open iconتنظیم Timezone در لینوکس
  • Folder icon closed Folder open iconتنظیم NTP در لینوکس
  • Folder icon closed Folder open iconبروزرسانی سیستم در لینوکس
  • Folder icon closed Folder open iconساخت کاربر جدید در لینوکس
  • Folder icon closed Folder open iconایجاد کاربران و گروه ها در لینوکس
  • Folder icon closed Folder open iconآموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها
  • Folder icon closed Folder open iconآموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید
  • Folder icon closed Folder open iconآموزش فایل sudoers؛ مدیریت دسترسی کاربران به دستورات مدیریتی در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chown در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chmod در لینوکس
  • Folder icon closed Folder open iconSticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی
  • Folder icon closed Folder open iconآموزش SUID در لینوکس؛ اجرای برنامه‌ها با دسترسی مالک فایل
  • Folder icon closed Folder open iconآموزش SGID در لینوکس؛ مدیریت دسترسی گروه‌ها و اجرای برنامه‌ها
لینوکس

ایجاد کاربران و گروه ها در لینوکس

ایجاد کاربران و گروه ها در لینوکس

مقدمه

لینوکس یک سیستم‌عامل چندکاربره است؛ یعنی چند کاربر می‌توانند حساب‌های مستقل داشته باشند و به‌صورت هم‌زمان از منابع سیستم استفاده کنند. برای کنترل دسترسی به فایل‌ها، دایرکتوری‌ها، سرویس‌ها و دستورات مدیریتی، لینوکس از دو مفهوم اصلی کاربر (User) و گروه (Group) استفاده می‌کند.

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

در این مقاله نحوه ایجاد و مدیریت کاربران و گروه‌ها در توزیع‌های مختلف لینوکس، به‌خصوص Ubuntu و AlmaLinux، آموزش داده می‌شود.


کاربر در لینوکس چیست؟

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

مشخصات اصلی هر کاربر عبارت‌اند از:

  • نام کاربری یا Username
  • شناسه کاربری یا UID
  • شناسه گروه اصلی یا GID
  • گروه اصلی
  • گروه‌های جانبی
  • پوشه خانگی
  • Login Shell
  • رمز عبور یا روش احراز هویت
  • وضعیت فعال یا غیرفعال بودن حساب

لینوکس در سطح داخلی معمولاً کاربران را با UID شناسایی می‌کند، نه با نام کاربری. به همین دلیل مالکیت فایل‌ها نیز در نهایت براساس UID و GID ذخیره می‌شود. هر گروه نیز یک شناسه عددی منحصربه‌فرد به نام GID دارد.


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

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

کاربر root

کاربر root بالاترین سطح دسترسی را در سیستم دارد و UID آن همیشه برابر صفر است:

UID=0

این کاربر می‌تواند:

  • فایل‌های سیستمی را تغییر دهد.
  • کاربران و گروه‌ها را مدیریت کند.
  • سرویس‌ها را اجرا یا متوقف کند.
  • نرم‌افزار نصب یا حذف کند.
  • مجوزها و مالکیت فایل‌ها را تغییر دهد.
  • تنظیمات شبکه، فایروال و سیستم‌عامل را مدیریت کند.

استفاده روزمره از حساب root توصیه نمی‌شود. بهتر است برای مدیران حساب‌های جداگانه ایجاد شده و دسترسی مدیریتی فقط در مواقع لازم از طریق sudo داده شود.


کاربران سیستمی

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

نمونه‌ها:

www-data
nginx
apache
mysql
postgres
redis
sshd

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

  • امکان ورود تعاملی ندارند.
  • Home Directory معمولی ندارند.
  • Shell آن‌ها روی nologin یا false تنظیم شده است.
  • برای محدودکردن دسترسی یک سرویس استفاده می‌شوند.

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

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

نمونه:

ali
support
developer
serveradmin

در بسیاری از توزیع‌ها UIDهای کمتر از 1000 برای حساب‌ها و گروه‌های سیستمی رزرو شده‌اند و کاربران معمولی معمولاً از UID برابر 1000 به بعد ساخته می‌شوند. محدوده دقیق به توزیع و تنظیمات /etc/login.defs بستگی دارد.

برای مشاهده محدوده UIDهای تنظیم‌شده:

grep -E '^(UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX)' /etc/login.defs

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

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

برای مثال، می‌توان گروهی با نام developers ایجاد کرد و تمام توسعه‌دهندگان را عضو آن کرد. سپس دسترسی یک پوشه پروژه را به این گروه داد.

در این حالت نیازی نیست مجوز پوشه برای هر کاربر به‌صورت جداگانه تنظیم شود.

هر گروه دارای موارد زیر است:

  • نام گروه
  • شناسه عددی GID
  • فهرست اعضا
  • تنظیمات امنیتی گروه

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


تفاوت گروه اصلی و گروه‌های جانبی

هر کاربر در لینوکس دارای یک گروه اصلی و می‌تواند عضو چند گروه جانبی باشد.

گروه اصلی

هر کاربر در هر لحظه فقط یک Primary Group دارد.

هنگامی که کاربر فایلی ایجاد می‌کند، گروه اصلی او معمولاً به‌عنوان مالک گروهی فایل انتخاب می‌شود؛ مگر اینکه دایرکتوری دارای تنظیماتی مانند Setgid باشد.

نمونه:

User: ali
Primary Group: ali

گروه‌های جانبی

کاربر می‌تواند عضو صفر، یک یا چند گروه جانبی باشد.

نمونه:

User: ali
Primary Group: ali
Supplementary Groups: developers, docker, backup

گروه‌های جانبی برای اعطای دسترسی‌های اضافی استفاده می‌شوند. برای مثال عضویت در گروه docker می‌تواند امکان مدیریت Docker را فراهم کند و عضویت در sudo یا wheel ممکن است دسترسی مدیریتی ایجاد کند.

هر کاربر فقط یک گروه اصلی دارد، اما می‌تواند عضو چند گروه جانبی باشد.


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

اطلاعات کاربران و گروه‌های محلی در چند فایل اصلی ذخیره می‌شود.

فایل /etc/passwd

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

cat /etc/passwd

نمونه:

ali:x:1001:1001:Ali Ahmadi:/home/ali:/bin/bash

هر خط دارای هفت بخش است:

username:password:UID:GID:comment:home:shell

توضیح بخش‌ها:

  • ali: نام کاربری
  • x: رمز عبور در فایل /etc/shadow نگهداری می‌شود.
  • 1001: شناسه کاربری
  • 1001: شناسه گروه اصلی
  • Ali Ahmadi: توضیحات یا نام کامل
  • /home/ali: پوشه خانگی
  • /bin/bash: Login Shell

فایل /etc/shadow

این فایل اطلاعات امنیتی رمز عبور و انقضای حساب‌ها را نگهداری می‌کند:

sudo cat /etc/shadow

این فایل فقط باید برای کاربر root قابل خواندن باشد.

اطلاعات آن شامل موارد زیر است:

  • Hash رمز عبور
  • تاریخ آخرین تغییر رمز
  • حداقل عمر رمز
  • حداکثر عمر رمز
  • زمان هشدار انقضا
  • تاریخ انقضای حساب

رمز عبور به‌صورت متن ساده در این فایل ذخیره نمی‌شود.


فایل /etc/group

اطلاعات گروه‌های محلی در این فایل نگهداری می‌شود:

cat /etc/group

نمونه:

developers:x:2000:ali,sara

ساختار هر خط:

group_name:password:GID:user_list

فهرست انتهای خط، اعضای صریح یا جانبی گروه را نشان می‌دهد. ممکن است کاربری که این گروه، گروه اصلی او است در این فهرست نمایش داده نشود؛ بنابراین برای بررسی کامل عضویت بهتر است از id و groups استفاده شود.


فایل /etc/gshadow

این فایل اطلاعات امنیتی گروه‌ها را نگهداری می‌کند:

sudo cat /etc/gshadow

اطلاعات آن شامل موارد زیر است:

  • نام گروه
  • وضعیت رمز گروه
  • مدیران گروه
  • اعضای گروه

این فایل نباید برای کاربران عادی قابل خواندن باشد.


فایل /etc/login.defs

این فایل برخی تنظیمات پیش‌فرض مدیریت کاربران را مشخص می‌کند:

cat /etc/login.defs

موارد مهم آن می‌تواند شامل این گزینه‌ها باشد:

UID_MIN
UID_MAX
GID_MIN
GID_MAX
SYS_UID_MIN
SYS_UID_MAX
UMASK
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_WARN_AGE

دایرکتوری /etc/skel

هنگام ساخت Home Directory برای یک کاربر جدید، فایل‌های موجود در /etc/skel معمولاً در پوشه خانگی او کپی می‌شوند.

برای مشاهده محتوا:

ls -la /etc/skel

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

.bashrc
.profile
.bash_logout

ابزار useradd می‌تواند هنگام ایجاد Home Directory فایل‌های اولیه را از /etc/skel کپی کند.


مشاهده کاربران سیستم

مشاهده تمام حساب‌های محلی

cat /etc/passwd

برای مشاهده فقط نام‌ها:

cut -d: -f1 /etc/passwd

استفاده از getent

getent passwd

دستور getent فقط به فایل /etc/passwd محدود نیست و می‌تواند کاربران ارائه‌شده از طریق NSS، مانند LDAP یا Active Directory، را نیز نمایش دهد. بنابراین در سرورهای متصل به سرویس‌های مرکزی، معمولاً انتخاب کامل‌تری است.


جست‌وجوی یک کاربر

getent passwd ali

اگر کاربر وجود داشته باشد، اطلاعات او نمایش داده می‌شود.

برای بررسی سریع وجود حساب:

id ali

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

id: ‘ali’: no such user

مشاهده UID کاربر

id -u ali

مشاهده گروه اصلی کاربر

id -gn ali

مشاهده تمام گروه‌های کاربر

id -nG ali

یا:

groups ali

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

مشاهده گروه‌های محلی

cat /etc/group

مشاهده گروه‌ها با getent

getent group

جست‌وجوی یک گروه

getent group developers

نمونه خروجی:

developers:x:2000:ali,sara

مشاهده GID یک گروه

getent group developers | cut -d: -f3

ایجاد گروه جدید

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

sudo groupadd developers

برای بررسی:

getent group developers

نمونه خروجی:

developers:x:2000:

دستور groupadd یک گروه جدید با GID آزاد و مطابق تنظیمات سیستم ایجاد می‌کند.


ساخت گروه در Ubuntu با addgroup

در Ubuntu و Debian می‌توان از دستور زیر نیز استفاده کرد:

sudo addgroup developers

Ubuntu استفاده از ابزارهای adduser و addgroup را برای مدیریت ساده‌تر حساب‌های محلی پیشنهاد می‌کند.

هر دو دستور زیر برای ایجاد گروه قابل استفاده‌اند:

sudo groupadd developers
sudo addgroup developers

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


ایجاد گروه با GID مشخص

برای تعیین GID:

sudo groupadd -g 2500 developers

قبل از ایجاد، بررسی کنید GID موردنظر استفاده نشده باشد:

getent group 2500

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

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


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

برای ساخت یک گروه مخصوص سرویس:

sudo groupadd --system appservice

شکل کوتاه:

sudo groupadd -r appservice

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


ایجاد کاربر جدید

روش ساخت کاربر در توزیع‌های مختلف کمی متفاوت است.


ساخت کاربر در Ubuntu

در Ubuntu استفاده از adduser برای ساخت کاربران معمولی ساده‌تر است:

sudo adduser ali

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

  • حساب کاربر را ایجاد می‌کند.
  • گروه خصوصی هم‌نام ایجاد می‌کند.
  • Home Directory را می‌سازد.
  • فایل‌های /etc/skel را کپی می‌کند.
  • رمز عبور دریافت می‌کند.
  • اطلاعات اختیاری کاربر را دریافت می‌کند.

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


ساخت کاربر در AlmaLinux

در AlmaLinux و توزیع‌های مبتنی بر RHEL می‌توانید از useradd استفاده کنید:

sudo useradd -m -s /bin/bash ali

گزینه‌ها:

  • -m: ساخت Home Directory
  • -s /bin/bash: تعیین Bash به‌عنوان Login Shell
  • ali: نام کاربر

سپس رمز عبور را تنظیم کنید:

sudo passwd ali

استفاده عمومی از useradd

دستور زیر در بیشتر توزیع‌ها قابل استفاده است:

sudo useradd -m -s /bin/bash ali

سپس:

sudo passwd ali

برای بررسی:

id ali
getent passwd ali

ایجاد کاربر با گروه اصلی مشخص

ابتدا گروه را ایجاد کنید:

sudo groupadd developers

سپس کاربر را با گروه اصلی developers بسازید:

sudo useradd -m -g developers -s /bin/bash ali

در این دستور:

  • -m: ایجاد Home Directory
  • -g developers: تعیین گروه اصلی
  • -s /bin/bash: تعیین Shell
  • ali: نام کاربر

سپس رمز را تعیین کنید:

sudo passwd ali

بررسی:

id ali

نمونه خروجی:

uid=1001(ali) gid=2000(developers) groups=2000(developers)

گروهی که با گزینه -g تعیین می‌شود باید از قبل وجود داشته باشد.


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

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

sudo groupadd developers
sudo groupadd backup

سپس کاربر را بسازید:

sudo useradd -m -s /bin/bash -G developers,backup ali

بین نام گروه‌ها فاصله قرار ندهید:

developers,backup

سپس:

sudo passwd ali

بررسی عضویت‌ها:

id ali

تعیین رمز عبور کاربر

برای ایجاد یا تغییر رمز عبور:

sudo passwd ali

رمز را دو بار وارد کنید:

New password:
Retype new password:

در هنگام تایپ رمز، کاراکتری روی صفحه نمایش داده نمی‌شود. این رفتار طبیعی است.

برای بررسی وضعیت رمز:

sudo passwd -S ali

افزودن کاربر به گروه جانبی

روش اصلی:

sudo usermod -aG developers ali

توضیح گزینه‌ها:

  • -G: تعیین گروه‌های جانبی
  • -a: افزودن گروه جدید بدون حذف گروه‌های قبلی

وجود گزینه -a بسیار مهم است.

دستور زیر خطرناک است:

sudo usermod -G developers ali

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

روش صحیح:

sudo usermod -aG developers ali

مستندات usermod مشخص می‌کند که استفاده از -G بدون -a فهرست گروه‌های جانبی را جایگزین می‌کند، اما -aG عضویت جدید را به فهرست موجود اضافه می‌کند.


افزودن کاربر با gpasswd

روش دیگر:

sudo gpasswd -a ali developers

گزینه -a کاربر را به گروه موردنظر اضافه می‌کند.


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

sudo usermod -aG developers,backup,docker ali

تمام گروه‌ها باید از قبل وجود داشته باشند.

بررسی:

id ali

افزودن کاربر به گروه sudo در Ubuntu

sudo usermod -aG sudo ali

سپس کاربر باید خارج شده و دوباره وارد شود.

برای آزمایش:

su - ali

سپس:

sudo whoami

خروجی صحیح:

root

افزودن کاربر به گروه wheel در AlmaLinux

sudo usermod -aG wheel ali

در AlmaLinux و سیستم‌های مبتنی بر RHEL، گروه wheel معمولاً برای دسترسی sudo استفاده می‌شود.

بررسی:

id ali

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

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

sudo gpasswd -d ali developers

نمونه خروجی:

Removing user ali from group developers

گزینه -d در gpasswd کاربر را از اعضای گروه حذف می‌کند.

در Ubuntu می‌توانید از دستور زیر نیز استفاده کنید:

sudo deluser ali developers

بررسی:

id ali

حذف دسترسی sudo در Ubuntu

sudo gpasswd -d ali sudo

حذف دسترسی wheel در AlmaLinux

sudo gpasswd -d ali wheel

تغییر گروه اصلی کاربر

برای تغییر گروه اصلی:

sudo usermod -g developers ali

بررسی:

id ali

یا:

id -gn ali

گروه جدید باید از قبل وجود داشته باشد.

هنگام تغییر گروه اصلی، ابزار usermod می‌تواند مالکیت گروهی فایل‌های داخل Home کاربر را تغییر دهد؛ اما فایل‌های متعلق به کاربر در مسیرهای خارج از Home ممکن است نیازمند اصلاح دستی باشند.

برای پیدا کردن فایل‌های دارای گروه قبلی:

sudo find / -xdev -group oldgroup -ls 2>/dev/null

اعمال عضویت جدید در Session کاربر

پس از اضافه‌شدن کاربر به یک گروه، Sessionهای فعلی معمولاً عضویت جدید را دریافت نمی‌کنند.

راه پیشنهادی این است که کاربر:

  1. از سیستم خارج شود.
  2. دوباره وارد شود.

برای بررسی Session جدید:

id

در صورت نیاز می‌توان برای بازکردن یک Shell با گروه جدید از دستور زیر استفاده کرد:

newgrp developers

این دستور یک Shell جدید با گروه فعال developers باز می‌کند.

برای خروج از آن:

exit

مشاهده اعضای یک گروه

برای مشاهده رکورد گروه:

getent group developers

نمونه:

developers:x:2000:ali,sara

اما این خروجی لزوماً کاربرانی را که developers گروه اصلی آن‌ها است در فهرست پایانی نشان نمی‌دهد. برای مشاهده گروه‌های یک کاربر، id مطمئن‌تر است. ساختار /etc/group فقط یک فهرست جداشده با کاما برای اعضای ثبت‌شده گروه نگهداری می‌کند.

برای بررسی یک کاربر:

id ali

برای پیدا کردن کاربرانی که این گروه، گروه اصلی آن‌ها است:

GROUP_GID=$(getent group developers | cut -d: -f3)

getent passwd | awk -F: -v gid="$GROUP_GID" '$4 == gid {print $1}'

برای مشاهده اعضای جانبی ثبت‌شده:

getent group developers | cut -d: -f4 | tr ',' '\n'

تغییر نام گروه

برای تغییر نام گروه:

sudo groupmod -n programmers developers

در این مثال:

  • نام قبلی: developers
  • نام جدید: programmers

بررسی:

getent group programmers

گزینه -n نام گروه را تغییر می‌دهد.


تغییر GID گروه

برای تغییر شناسه گروه:

sudo groupmod -g 3000 developers

بررسی:

getent group developers

تغییر GID گروه لزوماً GID فایل‌های موجود را تغییر نمی‌دهد. فایل‌هایی که با GID قبلی ذخیره شده‌اند ممکن است همچنان مالکیت عددی قبلی را نشان دهند و باید به‌صورت دستی اصلاح شوند.

ابتدا GID قبلی را در متغیر قرار دهید:

OLD_GID=2000

فایل‌ها را پیدا کنید:

sudo find / -xdev -gid "$OLD_GID" -ls 2>/dev/null

در صورت تأیید، مالکیت گروهی را تغییر دهید:

sudo find / -xdev -gid "$OLD_GID" \
-exec chgrp developers {} + 2>/dev/null

قبل از اجرای دستور دوم، حتماً خروجی دستور اول را بررسی کنید.


تغییر نام کاربر

برای تغییر Login Name:

sudo usermod -l newali ali

این دستور فقط نام ورود را تغییر می‌دهد و Home Directory را خودکار تغییر نام نمی‌دهد.

برای تغییر Home و انتقال فایل‌ها:

sudo usermod -d /home/newali -m newali

اگر گروه خصوصی کاربر نیز ali نام دارد، می‌توانید آن را تغییر دهید:

sudo groupmod -n newali ali

کاربر نباید هنگام تغییر نام وارد سیستم باشد.

بررسی پردازش‌ها:

ps -u ali -f

بررسی Sessionها:

who

تغییر UID کاربر

برای تغییر UID:

sudo usermod -u 1500 ali

قبل از انجام این کار بررسی کنید UID جدید استفاده نشده باشد:

getent passwd 1500

بعد از تغییر UID، فایل‌هایی که خارج از Home کاربر قرار دارند ممکن است همچنان UID قبلی را داشته باشند.

پیداکردن فایل‌ها:

sudo find / -xdev -uid 1001 -ls 2>/dev/null

اصلاح مالکیت پس از بررسی:

sudo find / -xdev -uid 1001 \
-exec chown ali {} + 2>/dev/null

تغییر UID در سرور Production باید با دقت انجام شود؛ زیرا مالکیت فایل‌ها، Cron Jobها، سرویس‌ها، NFS و Volumeهای Docker ممکن است به UID قبلی وابسته باشند.


ایجاد پوشه مشترک برای یک گروه

یکی از کاربردهای اصلی گروه‌ها، ساخت پوشه مشترک برای اعضای یک تیم است.

فرض کنید می‌خواهیم پوشه‌ای برای گروه developers بسازیم.

مرحله اول: ساخت گروه

sudo groupadd developers

اگر گروه از قبل وجود دارد، این مرحله را اجرا نکنید.


مرحله دوم: افزودن کاربران

sudo usermod -aG developers ali
sudo usermod -aG developers sara

مرحله سوم: ساخت دایرکتوری مشترک

sudo mkdir -p /srv/projects/developers

مرحله چهارم: تعیین مالک گروهی

sudo chown root:developers /srv/projects/developers

یا:

sudo chgrp developers /srv/projects/developers

مرحله پنجم: تنظیم مجوز و Setgid

sudo chmod 2770 /srv/projects/developers

عدد ابتدایی 2 بیت Setgid را روی دایرکتوری فعال می‌کند.

در نتیجه:

  • مالک و گروه اجازه کامل دارند.
  • سایر کاربران دسترسی ندارند.
  • فایل‌ها و زیرپوشه‌های جدید، گروه دایرکتوری را به ارث می‌برند.

Setgid روی دایرکتوری باعث می‌شود فایل‌های جدید به گروه مالک همان دایرکتوری اختصاص داده شوند و مدیریت پوشه‌های اشتراکی گروهی ساده‌تر شود.


مرحله ششم: بررسی مجوزها

ls -ld /srv/projects/developers

نمونه خروجی:

drwxrws--- 2 root developers 4096 Jul 25 10:30 /srv/projects/developers

حرف s در بخش مجوز گروه نشان می‌دهد Setgid فعال است:

rws

آزمایش دسترسی

با کاربر عضو گروه وارد شوید:

su - ali

سپس:

touch /srv/projects/developers/test.txt

بررسی مالکیت:

ls -l /srv/projects/developers/test.txt

باید گروه فایل developers باشد.


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

برای برنامه‌ای با نام myapp می‌توان حساب سیستمی جداگانه ساخت.

ابتدا مسیر nologin را بررسی کنید:

command -v nologin

سپس:

sudo useradd \
--system \
--user-group \
--no-create-home \
--shell "$(command -v nologin)" \
myapp

گزینه‌ها:

  • --system: ساخت کاربر سیستمی
  • --user-group: ایجاد گروه هم‌نام
  • --no-create-home: عدم ایجاد Home
  • --shell nologin: جلوگیری از ورود تعاملی

بررسی:

id myapp
getent passwd myapp

حساب‌های سرویس نباید بدون ضرورت عضو گروه‌های مدیریتی مانند sudo یا wheel باشند.


غیرفعال‌سازی کاربر

اگر کاربر موقتاً نباید وارد سیستم شود، بهتر است ابتدا حساب او را غیرفعال کنید و اطلاعات را حذف نکنید.

قفل‌کردن رمز عبور

sudo passwd -l ali

یا:

sudo usermod -L ali

قفل‌کردن رمز فقط ورود با رمز عبور را مسدود می‌کند. اگر کاربر SSH Key داشته باشد، ممکن است همچنان امکان ورود وجود داشته باشد.

برای غیرفعال‌سازی کامل‌تر:

sudo usermod --expiredate 1 ali

سپس Sessionهای فعال را بررسی کنید:

w

در صورت نیاز:

sudo loginctl terminate-user ali

فعال‌سازی مجدد

sudo usermod --expiredate -1 ali

سپس:

sudo passwd -u ali

حذف کاربر

حذف فقط حساب

sudo userdel ali

در Ubuntu:

sudo deluser ali

در این حالت ممکن است Home Directory باقی بماند.


حذف کاربر همراه با Home

sudo userdel -r ali

در Ubuntu:

sudo deluser --remove-home ali

قبل از حذف، از اطلاعات کاربر Backup تهیه کنید.

نمونه:

sudo tar -C /home \
-czf /root/ali-home-$(date +%F).tar.gz ali

حذف با گزینه -r معمولاً Home و Mail Spool کاربر را حذف می‌کند، اما فایل‌های متعلق به او در مسیرهای دیگر باید جداگانه بررسی شوند.


بررسی فایل‌های متعلق به کاربر

sudo find / -xdev -user ali -ls 2>/dev/null

بررسی پردازش‌های فعال

ps -u ali -f

اگر کاربر Session فعال دارد:

sudo loginctl terminate-user ali

سپس حذف را انجام دهید.


حذف گروه

برای حذف گروه:

sudo groupdel developers

در Ubuntu می‌توانید از دستور زیر نیز استفاده کنید:

sudo delgroup developers

قبل از حذف بررسی کنید گروه وجود دارد:

getent group developers

گروهی که هنوز گروه اصلی یک کاربر است قابل حذف نیست. ابتدا باید گروه اصلی آن کاربر را تغییر دهید:

sudo usermod -g users ali

سپس:

sudo groupdel developers

همچنین قبل از حذف باید بررسی کنید فایل‌ها یا دایرکتوری‌های مهمی با مالکیت این گروه وجود نداشته باشند:

sudo find / -xdev -group developers -ls 2>/dev/null

بررسی صحت اطلاعات کاربران و گروه‌ها

برای بررسی سازگاری فایل‌های حساب کاربری:

sudo pwck -r

برای بررسی اطلاعات گروه‌ها:

sudo grpck -r

گزینه -r بررسی را در حالت Read-only انجام می‌دهد و تغییری اعمال نمی‌کند.

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

getent passwd ali
getent group developers
id ali

مثال عملی کامل

فرض کنید می‌خواهیم دو کاربر با نام‌های ali و sara ایجاد کنیم و آن‌ها را عضو گروه linuxteam کنیم.

مرحله اول: ساخت گروه

sudo groupadd linuxteam

مرحله دوم: ساخت کاربران در Ubuntu

sudo adduser ali
sudo adduser sara

یا با useradd:

sudo useradd -m -s /bin/bash ali
sudo useradd -m -s /bin/bash sara

سپس:

sudo passwd ali
sudo passwd sara

مرحله سوم: افزودن کاربران به گروه

sudo usermod -aG linuxteam ali
sudo usermod -aG linuxteam sara

مرحله چهارم: بررسی عضویت

id ali
id sara

مرحله پنجم: ایجاد پوشه تیم

sudo mkdir -p /srv/linuxteam

مرحله ششم: تعیین مالکیت گروهی

sudo chown root:linuxteam /srv/linuxteam

مرحله هفتم: تنظیم دسترسی

sudo chmod 2770 /srv/linuxteam

مرحله هشتم: بررسی

ls -ld /srv/linuxteam

نمونه خروجی:

drwxrws--- 2 root linuxteam 4096 Jul 25 11:00 /srv/linuxteam

اکنون اعضای گروه linuxteam می‌توانند در این پوشه فایل ایجاد و ویرایش کنند.


رفع خطاهای رایج

خطای user already exists

useradd: user 'ali' already exists

بررسی:

getent passwd ali

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


خطای group already exists

groupadd: group 'developers' already exists

بررسی:

getent group developers

خطای group does not exist

نمونه:

usermod: group 'developers' does not exist

ابتدا گروه را ایجاد کنید:

sudo groupadd developers

سپس:

sudo usermod -aG developers ali

عضویت گروه اعمال نشده است

ابتدا بررسی کنید:

id ali

اگر عضویت ثبت شده اما در Session فعلی اعمال نشده است، کاربر باید Logout و دوباره Login کند.

یا:

newgrp developers

حذف ناخواسته گروه‌های قبلی

اگر دستور زیر اجرا شده باشد:

sudo usermod -G developers ali

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

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

sudo usermod -aG sudo,docker,backup,developers ali

قبل از اجرا، گروه‌های لازم را براساس نقش واقعی کاربر بررسی کنید.


گروه حذف نمی‌شود

نمونه خطا:

groupdel: cannot remove the primary group of user 'ali'

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

sudo usermod -g users ali

سپس:

sudo groupdel developers

فایل‌ها به‌صورت UID یا GID عددی نمایش داده می‌شوند

نمونه:

-rw-r--r-- 1 1001 2000 1024 file.txt

این وضعیت معمولاً زمانی رخ می‌دهد که:

  • کاربر حذف شده است.
  • گروه حذف شده است.
  • UID یا GID تغییر کرده است.
  • فایل از سیستم دیگری منتقل شده است.

بررسی UID:

getent passwd 1001

بررسی GID:

getent group 2000

پس از شناسایی مالک صحیح:

sudo chown ali:developers file.txt

Home Directory ایجاد نشده است

بررسی:

getent passwd ali

اگر Home در حساب ثبت شده ولی پوشه وجود ندارد:

sudo mkdir -p /home/ali

کپی فایل‌های اولیه:

sudo cp -a /etc/skel/. /home/ali/

اصلاح مالکیت:

sudo chown -R ali:$(id -gn ali) /home/ali

تنظیم مجوز:

sudo chmod 700 /home/ali

کاربر به پوشه گروهی دسترسی ندارد

عضویت را بررسی کنید:

id ali

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

ls -ld /srv/projects/developers

باید گروه صحیح نمایش داده شود:

developers

در صورت نیاز:

sudo chgrp developers /srv/projects/developers

مجوز را بررسی کنید:

sudo chmod 2770 /srv/projects/developers

سپس کاربر باید مجدداً وارد سیستم شود.


نکات امنیتی و بهترین روش‌ها

  • برای هر فرد حساب کاربری جداگانه ایجاد کنید.
  • از حساب مشترک میان چند مدیر استفاده نکنید.
  • فعالیت‌های روزمره را با کاربر root انجام ندهید.
  • کاربران را فقط عضو گروه‌های موردنیاز کنید.
  • قبل از افزودن کاربر به sudo، wheel یا docker سطح دسترسی ایجادشده را بررسی کنید.
  • هنگام استفاده از usermod -G همیشه خطر حذف عضویت‌های قبلی را در نظر بگیرید.
  • برای کاربران سرویس از nologin استفاده کنید.
  • حساب‌های بلااستفاده را ابتدا غیرفعال و سپس حذف کنید.
  • پیش از حذف کاربر، Home، Cron Jobها و فایل‌های متعلق به او را بررسی کنید.
  • قبل از حذف یا تغییر GID یک گروه، فایل‌های متعلق به GID قبلی را پیدا کنید.
  • UID و GID تکراری ایجاد نکنید.
  • فایل‌های /etc/passwd، /etc/shadow، /etc/group و /etc/gshadow را بدون ضرورت دستی ویرایش نکنید.
  • برای پوشه‌های مشترک گروهی از Setgid استفاده کنید.
  • عضویت گروه‌های مدیریتی را به‌صورت دوره‌ای بازبینی کنید.
  • در محیط‌های دارای LDAP یا Active Directory از getent برای مشاهده اطلاعات واقعی کاربران استفاده کنید.
  • از Group Password به‌عنوان روش عمومی کنترل دسترسی استفاده نکنید؛ اشتراک رمز گروه میان چند نفر ریسک امنیتی ایجاد می‌کند.

اشتباهات رایج

  • ایجاد کاربر با useradd بدون ساخت Home Directory
  • فراموش‌کردن تعیین رمز عبور
  • استفاده از usermod -G بدون گزینه -a
  • اضافه‌کردن تمام کاربران به گروه sudo
  • حذف گروهی که گروه اصلی یک کاربر است
  • تغییر UID یا GID بدون اصلاح مالکیت فایل‌ها
  • حذف کاربر بدون Backup از Home
  • تصور اینکه خروجی /etc/group تمام اعضای اصلی و جانبی را نشان می‌دهد
  • استفاده از حساب مشترک برای چند کاربر
  • ساخت حساب سرویس با Shell قابل ورود
  • تغییر مستقیم فایل /etc/shadow
  • بستن Session مدیریتی پیش از آزمایش دسترسی کاربر جدید
  • حذف کاربر دارای پردازش فعال
  • اعطای دسترسی گروهی بدون بررسی مجوزهای فایل و دایرکتوری

چک‌لیست نهایی

پس از ایجاد کاربر و گروه موارد زیر را بررسی کنید:

  • گروه با موفقیت ایجاد شده است.
  • GID گروه معتبر و منحصربه‌فرد است.
  • کاربر با موفقیت ایجاد شده است.
  • UID کاربر معتبر و منحصربه‌فرد است.
  • Home Directory وجود دارد.
  • مالک Home همان کاربر است.
  • Login Shell صحیح تنظیم شده است.
  • رمز عبور یا SSH Key تنظیم شده است.
  • گروه اصلی کاربر صحیح است.
  • گروه‌های جانبی موردنیاز اضافه شده‌اند.
  • از گزینه -aG برای افزودن عضویت استفاده شده است.
  • دسترسی sudo فقط در صورت نیاز داده شده است.
  • کاربر Logout و مجدداً Login کرده است.
  • خروجی id بررسی شده است.
  • پوشه‌های گروهی دارای مالک گروهی صحیح هستند.
  • مجوز Setgid در پوشه‌های اشتراکی فعال شده است.
  • فایل‌های متعلق به UID یا GID قدیمی باقی نمانده‌اند.
  • کاربران و گروه‌های بلااستفاده شناسایی شده‌اند.
  • اطلاعات حساب‌ها با pwck و grpck بررسی شده‌اند.

دستورات کاربردی سریع

ساخت گروه

sudo groupadd developers

ساخت کاربر در Ubuntu

sudo adduser ali

ساخت کاربر عمومی

sudo useradd -m -s /bin/bash ali
sudo passwd ali

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

sudo usermod -aG developers ali

حذف از گروه

sudo gpasswd -d ali developers

مشاهده اطلاعات کاربر

id ali

مشاهده گروه

getent group developers

تغییر گروه اصلی

sudo usermod -g developers ali

تغییر نام گروه

sudo groupmod -n programmers developers

حذف کاربر با Home

sudo userdel -r ali

حذف گروه

sudo groupdel developers

ساخت پوشه اشتراکی گروه

sudo mkdir -p /srv/developers
sudo chown root:developers /srv/developers
sudo chmod 2770 /srv/developers

جمع‌بندی

مدیریت کاربران و گروه‌ها یکی از پایه‌ای‌ترین بخش‌های مدیریت سیستم‌عامل لینوکس است. هر کاربر با یک UID و هر گروه با یک GID شناخته می‌شود. هر کاربر فقط یک گروه اصلی دارد، اما می‌تواند عضو چند گروه جانبی باشد.

در Ubuntu معمولاً از adduser برای ایجاد کاربران معمولی استفاده می‌شود، در حالی که دستور useradd در AlmaLinux و سایر توزیع‌ها کاربرد گسترده‌ای دارد. برای ساخت و مدیریت گروه‌ها نیز می‌توان از groupadd، groupmod، groupdel و gpasswd استفاده کرد.

مهم‌ترین نکته هنگام افزودن کاربر به گروه، استفاده صحیح از گزینه -aG است؛ زیرا اجرای usermod -G بدون -a می‌تواند عضویت‌های قبلی کاربر را حذف کند.

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

هنوز نیاز به کمک دارید؟

آیا سوالی دارید؟

آیا این مقاله برای شما مفید بود؟ بله خیر

مطالب اخیراً بازدیدشده

  • آموزش Permission و Ownership در لینوکس
  • آموزش تنظیم و تغییر رمز عبور Administrator در Windows Server
  • ساخت کاربر جدید در لینوکس
  • مشاهده بیشتر

نظرات خود را بنویسید... لغو پاسخ

اشتراک گذاری این مقاله

ایجاد کاربران و گروه ها در لینوکس

کپی کردن لینک

Clipboard Icon

جدیدترین مقالات

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی ...
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

تقویم

آگوست 2026
شیدسچپج
1234567
891011121314
15161718192021
22232425262728
293031 
« جولای    

عضویت

جدیدترین پست‌ها

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی Ubuntu 24.04
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

سلام