توی این درس یاد میگیری لینوکس چند کاربره است: هر پروسه و هر فایل مالک دارد و مالک یک کاربر (user) و یک گروه (group) است. میفهمی «کاربر» در واقع یک عدد به اسم UID است، اطلاعات کاربرها در /etc/passwd و گروهها در /etc/group نگهداری میشود، و هر کاربر یک گروه اصلی و چند گروه اضافی دارد. با id، whoami و groups میبینی چه کسی هستی، با useradd -m کاربر میسازی، با usermod -aG به گروه اضافهاش میکنی، با passwd رمز و قفل را مدیریت میکنی و با userdel پاکش میکنی.
مسئله: چه کسی چه کاری میتواند بکند؟
Section titled “مسئله: چه کسی چه کاری میتواند بکند؟”یک سرور واقعی تنها یک نفر ندارد: برنامهنویسها، سرویسهایی مثل nginx و دیتابیس، مدیران سیستم. اگر همه با یک حساب کار کنند، هیچکس مسئول چیزی نیست و یک اشتباه همهچیز را میبرد. لینوکس اجازه میدهد هر آدم (و هر سرویس) حساب جدا داشته باشد و دسترسیها (درس بعد) روی «چه کسی» تعیین شود. پایهی همهی اینها: کاربر و گروه.
تشبیه: کارت شناسایی و گروههای کاری
Section titled “تشبیه: کارت شناسایی و گروههای کاری”هر کاربر مثل یک کارمند با کارت شناسایی است: یک شمارهی کارمندی یکتا (UID) دارد (نه فقط اسم، چون سیستم با عدد کار میکند). هر کارمند یک بخش اصلی (گروه اصلی) دارد و میتواند عضو چند کمیته (گروههای اضافی) هم باشد. دسترسی به اتاقها (فایلها) را بر اساس «تو کی هستی» یا «عضو کدام گروه هستی» میدهند.
مثالهای عملی
Section titled “مثالهای عملی”مثال ۱: من کی هستم؟ id، whoami، groups
Section titled “مثال ۱: من کی هستم؟ id، whoami، groups”whoamiidecho "--- جدا:"echo "UID=$(id -u) GID=$(id -g) نام=$(id -un) گروه اصلی=$(id -gn)"echo "گروهها: $(groups)"echo "--- کاربر دیگر (root):"id rootaliuid=1001(ali) gid=1001(ali) groups=1001(ali)--- جدا:UID=1001 GID=1001 نام=ali گروه اصلی=aliگروهها: ali--- کاربر دیگر (root):uid=0(root) gid=0(root) groups=0(root)خروجی id: uid=1001(ali) شمارهی کاربر و اسمش، gid=1001(ali) گروه اصلی، و groups=... همهی گروههایم. root همیشه UID 0 است: «مدیر» بودن به عدد ۰ وابسته است، نه به اسم. (در درس root و sudo بیشتر.)
مثال ۲: /etc/passwd، فهرست کاربرها
Section titled “مثال ۲: /etc/passwd، فهرست کاربرها”اطلاعات کاربرها در یک فایل متنی ساده است. هر خط ۷ فیلد با ::
grep '^ali:' /etc/passwdecho "--- فیلدها:"grep '^ali:' /etc/passwd | awk -F: '{print "1) نام:", $1; print "2) رمز (x یعنی در shadow):", $2; print "3) UID:", $3; print "4) GID گروه اصلی:", $4; print "5) توضیح (GECOS):", ($5==""?"(خالی)":$5); print "6) پوشهی خانه:", $6; print "7) shell:", $7}'ali:x:1001:1001::/home/ali:/bin/bash--- فیلدها:1) نام: ali2) رمز (x یعنی در shadow): x3) UID: 10014) GID گروه اصلی: 10015) توضیح (GECOS): (خالی)6) پوشهی خانه: /home/ali7) shell: /bin/bashفیلد دوم x یعنی رمز واقعاً اینجا نیست و در /etc/shadow است (فقط root میخواند). برای پرسیدن امنتر از پایگاه کاربرها (که ممکن است از LDAP هم بیاید) از getent استفاده کن:
getent passwd aliecho "--- کاربرهای عادی (UID از 1000 به بالا):"awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $3}' /etc/passwdecho "--- چند کاربر سیستمی (UID < 1000) و shell شان:"awk -F: '$3 < 1000 {print $1, $3, $7}' /etc/passwd | head -4ali:x:1001:1001::/home/ali:/bin/bash--- کاربرهای عادی (UID از 1000 به بالا):ubuntu 1000ali 1001--- چند کاربر سیستمی (UID < 1000) و shell شان:root 0 /bin/bashdaemon 1 /usr/sbin/nologinbin 2 /usr/sbin/nologinsys 3 /usr/sbin/nologinکاربرهای عادی UID ≥ ۱۰۰۰ دارند؛ کاربرهای سیستمی (برای سرویسها) UID کمتر و معمولاً shell شان nologin است (یعنی نمیتوان با آنها وارد شد).
مثال ۳: /etc/group و رمزها در /etc/shadow
Section titled “مثال ۳: /etc/group و رمزها در /etc/shadow”head -3 /etc/groupecho "--- گروه sudo (چه کسانی عضوند):"getent group sudoecho "--- shadow برای کاربر عادی خوانا نیست:"ls -l /etc/shadowcat /etc/shadow 2>&1 | head -1root:x:0:daemon:x:1:bin:x:2:--- گروه sudo (چه کسانی عضوند):sudo:x:27:ubuntu--- shadow برای کاربر عادی خوانا نیست:-rw-r----- 1 root shadow 665 Oct 3 20:24 /etc/shadowcat: /etc/shadow: Permission deniedهر خط /etc/group: نام:رمز:GID:اعضایاضافی. گروه sudo همان است که اجازهی استفاده از sudo را میدهد. و /etc/shadow (رمزهای هششده) فقط برای root قابل خواندن است (-rw-r----- و مالک root:shadow). هیچوقت رمز خام ذخیره نمیشود.
فیلد دوم /etc/passwd (x) یعنی چه؟
x نشانهی «رمز در shadow» است؛ خودش رمز نیست.
مثال ۴: ساختن کاربر، useradd
Section titled “مثال ۴: ساختن کاربر، useradd”برای ساختن کاربر به دسترسی مدیر نیاز داری (sudo، درسهای بعد). useradd با flag های مهم:
sudo useradd -m -s /bin/bash -c "Demo User" demogetent passwd demoecho "--- پوشهی خانهی ساختهشده و محتوایش (از /etc/skel):"sudo ls -la /home/demo | awk 'NR>1 {print $1, $3, $4, $9}'echo "--- گروه اصلی خودکار ساخته شد:"getent group demoid demodemo:x:1002:1002:Demo User:/home/demo:/bin/bash--- پوشهی خانهی ساختهشده و محتوایش (از /etc/skel):drwxr-x--- demo demo .drwxr-xr-x root root ..-rw-r--r-- demo demo .bash_logout-rw-r--r-- demo demo .bashrc-rw-r--r-- demo demo .profile--- گروه اصلی خودکار ساخته شد:demo:x:1002:uid=1002(demo) gid=1002(demo) groups=1002(demo)flag ها: -m (create home: پوشهی خانه را بساز و فایلهای پایهی /etc/skel را در آن کپی کن؛ بدون -m پوشه ساخته نمیشود)، -s shell، -c توضیح (نام کامل). بهطور پیشفرض یک گروه همنام با کاربر (گروه اصلی) و یک UID بعدی (≥ ۱۰۰۰) ساخته میشود. (برای دیدن پوشهی خانهی demo از sudo استفاده کردم: در Ubuntu جدید پوشهی خانهی کاربرها با دسترسی drwxr-x--- ساخته میشود و دیگران نمیتوانند داخلش را ببینند.)
مثال ۵: useradd در برابر adduser
Section titled “مثال ۵: useradd در برابر adduser”روی Debian/Ubuntu دو دستور هست. useradd سطح پایین است و پیشفرضهای کم دارد؛ adduser یک اسکریپت دوستانهتر است:
echo "--- پیشفرضهای useradd (shell پیشفرض را ببین):"useradd -D | grep -E "SHELL|HOME|SKEL"sudo useradd -m rezagetent passwd reza | cut -d: -f1,6,7echo "--- با adduser (غیرتعاملی):"sudo adduser --disabled-password --gecos "" svcuser 2>&1 | tail -2getent passwd svcuser | cut -d: -f1,6,7sudo userdel -r reza; sudo deluser --remove-home svcuser >/dev/null 2>&1--- پیشفرضهای useradd (shell پیشفرض را ببین):HOME=/homeSHELL=/bin/shSKEL=/etc/skelreza:/home/reza:/bin/sh--- با adduser (غیرتعاملی):info: Adding new user `svcuser' to supplemental / extra groups `users' ...info: Adding user `svcuser' to group `users' ...svcuser:/home/svcuser:/bin/bashuserdel: reza mail spool (/var/mail/reza) not foundدقت کن: useradd -m reza بدون -s به کاربر /bin/sh داد (یک shell ساده، بدون Tab و تاریخچه)، ولی adduser خودش /bin/bash گذاشت و پوشهی خانه ساخت. برای همین در درسها و کار تیمی useradd -m -s /bin/bash را کامل مینویسیم یا از adduser در سرورهای Ubuntu استفاده میکنیم (که برای ما تعاملی رمز و نام میپرسد).
مثال ۶: رمز، passwd
Section titled “مثال ۶: رمز، passwd”برای رمز گذاشتن: sudo passwd demo (دوبار رمز را میپرسد؛ تایپ نمایش داده نمیشود). چون اینجا تعاملی نیست، وضعیت رمز را میخوانیم و قفل/بازکردن را میبینیم:
echo "--- وضعیت رمز demo (L = قفل، NP = بدون رمز، P = رمز دارد):"sudo passwd -S demo | cut -d' ' -f1,2sudo passwd -l demosudo passwd -S demo | cut -d' ' -f1,2echo "--- در shadow فیلد رمز demo (فقط ساختار):"sudo getent shadow demo | cut -d: -f1,2--- وضعیت رمز demo (L = قفل، NP = بدون رمز، P = رمز دارد):demo Lpasswd: password changed.demo L--- در shadow فیلد رمز demo (فقط ساختار):demo:!کاربر تازهساختهشده با useradd رمز ندارد و قفل است (! در shadow): تا رمز نگذاری نمیتواند با رمز وارد شود. passwd -l قفل میکند (یک ! به ابتدای هش اضافه میکند)، passwd -u بازمیکند و passwd -S وضعیت را میگوید (ستون دوم: L قفل، P رمز دارد، NP بدون رمز). برای کارمندی که رفته: قفل کردن (و نه فوراً حذف) راهی امن است تا فایلهایش و تاریخچه بماند. (در کار خودکار، رمز را با chpasswd از ورودی میدهند؛ رمز واقعی را هرگز در اسکریپت یا تاریخچه نگه ندار.)
مثال ۷: گروهها، groupadd و usermod -aG
Section titled “مثال ۷: گروهها، groupadd و usermod -aG”sudo groupadd developersgetent group developersecho "--- افزودن demo به گروه developers (-aG):"sudo usermod -aG developers demoid demoecho "--- groups:"groups demodevelopers:x:1003:--- افزودن demo به گروه developers (-aG):uid=1002(demo) gid=1002(demo) groups=1002(demo),1003(developers)--- groups:demo : demo developers-a (append) و -G (گروههای اضافی): کاربر به گروه اضافه میشود. اگر -a را فراموش کنی، -G فهرست گروههای اضافی کاربر را با فهرست جدید جایگزین میکند و از بقیهی گروهها (حتی sudo) خارجش میکند:
sudo usermod -aG sudo demoecho "قبل: $(id -Gn demo)"sudo usermod -G developers demo # بدون -a!echo "بعد از usermod -G بدون -a: $(id -Gn demo)"sudo usermod -aG developers demoقبل: demo sudo developersبعد از usermod -G بدون -a: demo developersگروه sudo از بین رفت. این از اشتباهات بسیار رایج (و گاهی خطرناک روی سرور واقعی: ممکن است خودت را از sudo بیرون بیندازی) است.
مثال ۸: گروهها فوراً اعمال نمیشوند
Section titled “مثال ۸: گروهها فوراً اعمال نمیشوند”وقتی کاربری را به گروه اضافه میکنی، session های فعلی او گروه جدید را نمیبینند؛ باید دوباره وارد شود:
sudo usermod -aG developers aliecho "پایگاه داده: $(id -Gn ali)"echo "shell فعلی من هنوز: $(id -Gn)"echo "--- یک session تازه (sudo -u ali id):"sudo -u ali id -Gnecho "--- یا فعالسازی موقت گروه در همین shell: newgrp"sudo gpasswd -d ali developers >/dev/nullپایگاه داده: ali developersshell فعلی من هنوز: ali--- یک session تازه (sudo -u ali id):ali developers--- یا فعالسازی موقت گروه در همین shell: newgrpid ali (از پایگاه کاربرها) گروه را دارد ولی id در shell جاری هنوز قدیمی است، چون گروهها هنگام ورود (login) خوانده میشوند. راهحل: خروج و ورود دوباره، یا newgrp developers، یا یک session تازه (مثل sudo -u ali ... که اینجا نشان داد). مشکل رایج: «او را به گروه اضافه کردم ولی هنوز دسترسی ندارد»؛ بگو دوباره وارد شود.
مثال ۹: کاربر سیستمی برای سرویس
Section titled “مثال ۹: کاربر سیستمی برای سرویس”سرویسها نباید با حساب شخصی یا root اجرا شوند؛ یک کاربر سیستمی بدون shell و بدون پوشهی خانه برایشان میسازی:
sudo useradd -r -s /usr/sbin/nologin -c "App Service" svc-appgetent passwd svc-appecho "UID سیستمی (< 1000): $(id -u svc-app)"echo "--- ورود با آن ممکن نیست:"sudo su - svc-app 2>&1 | head -2echo "--- ولی میتوان یک دستور را با هویت او اجرا کرد:"sudo -u svc-app id -unsvc-app:x:999:994:App Service:/home/svc-app:/usr/sbin/nologinUID سیستمی (< 1000): 999--- ورود با آن ممکن نیست:su: warning: cannot change directory to /home/svc-app: No such file or directoryThis account is currently not available.--- ولی میتوان یک دستور را با هویت او اجرا کرد:svc-app-r (system) یعنی UID از بازهی سیستمی و پوشهی خانه ساخته نشود؛ nologin ورود را رد میکند. اصل کمترین دسترسی: اگر سرویس هک شود، مهاجم فقط همین حساب بیاختیار را دارد. (مثل www-data برای nginx یا postgres.)
مثال ۱۰: تغییر و حذف کاربر
Section titled “مثال ۱۰: تغییر و حذف کاربر”echo "--- تغییر shell و توضیح:"sudo usermod -s /bin/zsh -c "Demo Changed" demogetent passwd demo | cut -d: -f1,5,7echo "--- قفل کردن حساب (usermod -L) و باز کردن (-U):"sudo usermod -L demo; sudo passwd -S demo | cut -d' ' -f1,2sudo usermod -U demo; sudo passwd -S demo | cut -d' ' -f1,2echo "--- تغییر نام ورود (usermod -l):"sudo usermod -l demo2 demogetent passwd demo2 | cut -d: -f1,3sudo usermod -l demo demo2echo "--- حذف با userdel -r (پوشهی خانه را هم میبرد):"ls -d /home/demosudo userdel -r demo 2>&1 | head -1ls -d /home/demo 2>&1 | head -1sudo userdel svc-appsudo groupdel developersgetent passwd demo svc-app | wc -l--- تغییر shell و توضیح:demo:Demo Changed:/bin/zsh--- قفل کردن حساب (usermod -L) و باز کردن (-U):demo Lusermod: unlocking the user's password would result in a passwordless account.You should set a password with usermod -p to unlock this user's password.demo L--- تغییر نام ورود (usermod -l):demo2:1002--- حذف با userdel -r (پوشهی خانه را هم میبرد):/home/demouserdel: demo mail spool (/var/mail/demo) not foundls: cannot access '/home/demo': No such file or directory0دقت کن که usermod -U برای حسابی که اصلاً رمز ندارد خطا داد (unlocking ... would result in a passwordless account): سیستم اجازه نمیدهد با باز کردن قفل یک حساب بدون رمز بسازی؛ اول رمز بگذار. userdel -r کاربر و پوشهی خانه (و صف ایمیلش) را حذف میکند (پیام «mail spool not found» فقط یک هشدار بیاهمیت است چون این سیستم صف ایمیل ندارد)؛ بدون -r فایلهایش میمانند و مالک شان یک UID یتیم میشود. قبل از حذف، فایلهای مهم او را بررسی کن (find / -user demo در درس پیدا کردن فایلها). groupdel گروهی را که گروه اصلی هیچ کاربری نیست حذف میکند.
پشت پرده: سیستم کاربر و گروه چگونه کار میکند؟
Section titled “پشت پرده: سیستم کاربر و گروه چگونه کار میکند؟”هسته فقط عدد میشناسد: هر پروسه یک UID و یک یا چند GID دارد و هر فایل یک UID مالک و یک GID گروه. اسمها فقط برای انساناند و هنگام نمایش از پایگاههای متنی (/etc/passwd و /etc/group، یا سرویسهای دیگر مثل LDAP، از راه NSS) ترجمه میشوند. برای همین اگر کاربری حذف شود ولی فایلهایش بماند، ls -l بهجای اسم یک عدد نشان میدهد (مالک «یتیم»).
وقتی وارد میشوی (login)، سیستم UID و GID اصلی و همهی گروههای اضافی تو را به پروسهی shell تو میدهد و همهی پروسههایی که از آن میسازی این هویت را به ارث میبرند. کنترل دسترسی (درس بعد) فقط این اعداد را با مالک و گروه فایل مقایسه میکند. و بازهی UID ها (از /etc/login.defs): ۰ root، ۱–۹۹۹ سیستمی، ۱۰۰۰ به بالا کاربر عادی؛ 65534 کاربر nobody.
دو فایل مهم دیگر: /etc/shadow (رمزهای هششده + قفل و انقضا)، و /etc/gshadow. فرمت هش رمز ($y$... یعنی yescrypt یا $6$... یعنی SHA-512) شامل الگوریتم، نمک (salt) و هش است؛ نمک باعث میشود دو کاربر با یک رمز، هش متفاوت داشته باشند. فقط خود شخص یا root رمز را عوض میکند.
جدولهای مرجع
Section titled “جدولهای مرجع”| دستور | کار |
|---|---|
id [کاربر] |
UID، GID و گروهها |
whoami |
نام کاربر فعلی |
groups [کاربر] |
گروههای کاربر |
getent passwd نام |
اطلاعات کاربر |
sudo useradd -m -s /bin/bash -c "نام" user |
ساخت کاربر با پوشهی خانه |
sudo useradd -r -s /usr/sbin/nologin svc |
کاربر سیستمی |
sudo adduser user |
ساخت کاربر (تعاملی، Debian/Ubuntu) |
sudo passwd user |
تعیین رمز |
sudo passwd -l/-u user |
قفل / بازکردن |
sudo usermod -aG grp user |
افزودن به گروه |
sudo usermod -s SHELL user |
تغییر shell |
sudo userdel -r user |
حذف کاربر با پوشهی خانه |
sudo groupadd / groupdel |
ساخت / حذف گروه |
sudo gpasswd -d user grp |
حذف کاربر از گروه |
| فایل | محتوا |
|---|---|
/etc/passwd |
نام:x:UID:GID:توضیح:خانه:shell |
/etc/group |
نام:x:GID:اعضا |
/etc/shadow |
رمز هششده و انقضا (فقط root) |
/etc/skel |
فایلهای اولیهی پوشهی کاربر جدید |
/etc/login.defs |
بازهی UID و پیشفرضها |
اشتباهات رایج
Section titled “اشتباهات رایج”۱) usermod -G بدون -a
Section titled “۱) usermod -G بدون -a”مثال ۷: گروههای قبلی (از جمله sudo) پاک شد. راهحل: همیشه usermod -aG.
۲) useradd بدون -m و -s
Section titled “۲) useradd بدون -m و -s”sudo useradd nohomegetent passwd nohome | cut -d: -f1,6,7ls -d /home/nohome 2>&1 | head -1sudo userdel nohomenohome:/home/nohome:/bin/shls: cannot access '/home/nohome': No such file or directoryکاربر ساخته شد ولی پوشهی خانهاش (/home/nohome) وجود ندارد و shell اش هم /bin/sh است. راهحل: useradd -m -s /bin/bash.
۳) انتظار فوری بودن گروه جدید
Section titled “۳) انتظار فوری بودن گروه جدید”مثال ۸. راهحل: logout/login یا newgrp.
۴) حذف کاربر بدون بررسی فایلها و سرویسهای او
Section titled “۴) حذف کاربر بدون بررسی فایلها و سرویسهای او”sudo useradd -m temp1sudo -u temp1 touch /tmp/temp1-filesudo userdel temp1ls -ln /tmp/temp1-file | awk '{print "مالک (عدد):", $3}'ls -l /tmp/temp1-file | awk '{print "مالک (نام):", $3}'sudo rm /tmp/temp1-fileuseradd: warning: the home directory /home/temp1 already exists.useradd: Not copying any file from skel directory into it.مالک (عدد): 1002مالک (نام): 1002بعد از حذف، مالک فایل فقط یک عدد است (فایل یتیم). راهحل: قبل از حذف find / -user نام را بررسی و فایلها را منتقل یا پاک کن.
۵) اجرای سرویس با root یا کاربر شخصی
Section titled “۵) اجرای سرویس با root یا کاربر شخصی”اگر nginx یا دیتابیس با root اجرا شود، هک شدن آن یعنی دسترسی کامل. راهحل: کاربر سیستمی اختصاصی (useradd -r) و nologin.
اسم، UID و گروه اصلی خودت را با سه دستور جدا چاپ کن و فهرست همهی گروههایت را بنویس.
دیدن جواب
echo "نام: $(id -un) UID: $(id -u) گروه اصلی: $(id -gn)"echo "همهی گروهها: $(id -Gn)"نام: ali UID: 1001 گروه اصلی: aliهمهی گروهها: aliتمرین اصلی: یک کاربر جدید بساز و به گروه دلخواه اضافه کن. کاربر demo را با پوشهی خانه و shell bash بساز، گروه developers را بساز، demo را (با -aG) عضو آن کن و ثابت کن (id، groups). در پایان همهچیز را پاک کن.
دیدن جواب
sudo useradd -m -s /bin/bash demosudo groupadd developerssudo usermod -aG developers demoid demogroups demogetent group developerssudo userdel -r demo; sudo groupdel developersecho "پاک شد: $(getent passwd demo | wc -l) کاربر demo باقی مانده"uid=1002(demo) gid=1002(demo) groups=1002(demo),1003(developers)demo : demo developersdevelopers:x:1003:demouserdel: demo mail spool (/var/mail/demo) not foundپاک شد: 0 کاربر demo باقی ماندهیک اسکریپت adduser-safe بنویس که نام کاربر و گروه را بگیرد، اگر کاربر از قبل وجود داشت خطا بدهد، وگرنه کاربر را با -m -s /bin/bash بسازد، گروه را (اگر نبود) بسازد، کاربر را عضوش کند و خلاصهی id را چاپ کند. دوبار اجرا کن (بار دوم باید خطا بدهد) و در پایان پاکسازی کن.
دیدن جواب
adduser_safe() { local u="$1" g="$2" if getent passwd "$u" >/dev/null; then echo "خطا: کاربر $u از قبل هست"; return 1; fi getent group "$g" >/dev/null || sudo groupadd "$g" sudo useradd -m -s /bin/bash "$u" && sudo usermod -aG "$g" "$u" && id "$u"}adduser_safe reza developersadduser_safe reza developerssudo userdel -r reza; sudo groupdel developersuid=1002(reza) gid=1003(reza) groups=1003(reza),1002(developers)خطا: کاربر reza از قبل هستuserdel: reza mail spool (/var/mail/reza) not foundآزمونک
Section titled “آزمونک”UID کاربر root چند است؟
مدیر بودن به UID صفر وابسته است.
در /etc/passwd فیلد دوم x یعنی…
فقط root shadow را میخواند.
کدام دستور کاربر را با پوشهی خانه و shell bash میسازد؟
بدون -m پوشهی خانه ساخته نمیشود.
برای افزودن کاربر به گروه بدون پاک شدن بقیهی گروههایش؟
-a یعنی append؛ بدونش گروههای قبلی جایگزین میشوند.
چرا بعد از usermod -aG کاربر هنوز دسترسی گروه جدید را ندارد؟
session فعلی هنوز گروههای قدیمی را دارد.
کاربر سیستمی برای سرویسها چه ویژگیای دارد؟
اصل کمترین دسترسی.
جمعبندی
Section titled “جمعبندی”- هسته فقط UID/GID (عدد) میشناسد؛ اسمها از
/etc/passwdو/etc/group(و رمزها از/etc/shadow) میآیند.id،whoami،groupsهویت را نشان میدهند. - هر کاربر یک گروه اصلی و چند گروه اضافی دارد؛ کاربران عادی UID ≥ ۱۰۰۰، سیستمی کمتر.
- ساخت:
sudo useradd -m -s /bin/bash -c "نام" user(یاadduser)؛ رمز:sudo passwd user؛ قفل:passwd -l. - گروه:
groupadd،usermod -aG(همیشه با -a)،gpasswd -d؛ تغییر گروه پس از login جدید اعمال میشود. - سرویسها:
useradd -r -s /usr/sbin/nologin؛ حذف:userdel -r(بعد از بررسی فایلها). - بدون
-mپوشهی خانه ساخته نمیشود و بدون-sshell پیشفرض ممکن است/bin/shباشد.
| دستور | کاری که میکند |
|---|---|
id / id user | UID، GID و گروهها |
whoami / groups | نام کاربر / گروهها |
getent passwd user | اطلاعات کاربر |
sudo useradd -m -s /bin/bash user | ساخت کاربر |
sudo adduser user | ساخت کاربر (تعاملی) |
sudo passwd user | تعیین رمز |
sudo passwd -l user / -u | قفل / باز کردن |
sudo groupadd grp | ساخت گروه |
sudo usermod -aG grp user | افزودن به گروه (بدون پاک شدن بقیه) |
sudo gpasswd -d user grp | حذف از گروه |
sudo useradd -r -s /usr/sbin/nologin svc | کاربر سیستمی سرویس |
sudo userdel -r user | حذف کاربر با پوشهی خانه |