پنجشنبه, ۲۰ دی, ۱۴۰۳ / 9 January, 2025
مجله ویستا

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


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

مدیریت کاربران در لینوکس, هر چند که بسیار ساده است, اما جزئیات دقیقی دارد مدیریت کاربران آنقدر ساده است که باعث تنفر از وجود کاربر جدید نخواهد شد بهتر است یک قانون کلی برای کاربران داشته باشیم به هرچیزی که نیاز دارند دسترسی بدهیم, نه بیشتر و نه کمتر

مدیریت کاربران در لینوکس، هر چند که بسیار ساده است، اما جزئیات دقیقی دارد. مدیریت کاربران آنقدر ساده است که باعث تنفر از وجود کاربر جدید نخواهد شد. بهتر است یک قانون کلی برای کاربران داشته باشیم؛ به هرچیزی که نیاز دارند دسترسی بدهیم، نه بیشتر و نه کمتر.

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

● دستورات گروه

در ابتدا به چگونگی کارکرد گروه‌ها خواهیم پرداخت. تنظیمات گروه‌ها در فایل ‌/‌etc‌/‌group‌ یافت می‌شوند. یک فایل لینوکس استاندارد ‌/‌etc‌/‌group شامل اطلاعات زیر خواهد بود که به فرم نام گروه: x: شناسه گروه: کاربر قرار می‌گیرد.

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

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

khess rdpusers

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

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

# useradd fred

# grep fred ‌/‌etc‌/‌passwd

fred:x:۵۰۴:۵۰۶::‌/‌home‌/‌fred:‌/‌bin‌/‌bash

# grep fred ‌/‌etc‌/‌group

fred:x:۵۰۶:

# useradd ‌ـ‌g ۱۰۰ ‌ـ‌c "Bob Alobdob" bob

# grep bob ‌/‌etc‌/‌passwd

bob:x:۵۰۵:۱۰۰:Bob Alobdob:‌/‌home‌/‌bob:‌/‌bin‌/‌bash

# grep bob ‌/‌etc‌/‌group

#

چرا وقتی دستور grep bob ‌/‌etc‌/‌group را تایپ کردیم، سیستم پاسخی به ما نداد؟ دلیل این کار این است که گروه کاربران گروه اصلی شناسه bob است. اگر گروه users یک گروه فرعی بود، شناسه bob در خروجی چاپ می‌شد. برای مثال، کافی است شناسه‌ای با rdpusers به‌‌عنوان گروه فرعی بسازیم.

# useradd ‌ـ‌G ۵۰۴ ‌ـ‌c "Jon Shmon" john

# grep john ‌/‌etc‌/‌passwd

john:x:۵۰۶:۵۰۷:Jon Shmon:‌/‌home‌/‌john:‌/‌bin‌/‌bash

# grep john ‌/‌etc‌/‌group

rdpusers:x:۵۰۴:khess,john

john:x:۵۰۷:

توجه داشته باشید که گروه را قبل از تعیین کاربرانش باید بسازیم. دستور groupadd گروه جدیدی را با شناسه گروه (GID) یکتا می‌سازد.

# groupadd ‌ـ‌g ۱۰۴۰ accounting

# grep ۱۰۴۰ ‌/‌etc‌/‌group

accounting:x:۱۰۴۰:

اگر در دستور ذکر شده، شناسه گروه را وارد نکنیم، خود سیستم به‌طور خودکار یک شناسه یکتا به آن گروه می‌دهد.

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

# groupmod ‌ـ‌n accounting beancounters

# grep ۱۰۴۰ ‌/‌etc‌/‌group

beancounters:x:۱۰۴۰:

نکته: دستور chgrp (دسترسی گروه) را نباید با دستور groupmod (تغییر نام گروه) اشتباه گرفت.

با دستور groupdel نیز می‌توان یک گروه را به‌طور کلی پاک کرد.

# groupdel beancounters

اگر ترجیح می‌دهید به‌صورت مستقیم فایل‌های پیکربندی تنظیمات گروه را ویرایش کنید (هر چند نیازی به انجام این کار نیست)، دستور vigr فایل ‌/‌etc‌/‌group را با قراردادن یک قفل روی فایل ویرایش می‌کند. به‌این ترتیب تنها یک مدیر در لحظه می‌تواند فایل را ویرایش کند و تداخل تنظیمات به‌وجود نمی‌آید.

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

● دستورات کاربر

این دستورات به‌این علت در این بخش قرار گرفته‌است که عملکرد آنها بیشتر در حوزه کاربرها واضح خواهد بود. حتی اگر یک کاربر بداند که این دستورها کجاست (‌/‌usr‌/‌sbin) باز هم نمی‌تواند بدون دسترسی root به‌ آنها دست یابد.

برای مثال اگر یک کاربر بخواهد شناسه جدیدی را با استفاده از دستور useradd و vipw ایجاد کند، با پیغام زیر روبه‌رو می‌شود:

$ ‌/‌usr‌/‌sbin‌/‌useradd steve

useradd: Only root may add a user or group to the system.

$ ‌/‌usr‌/‌sbin‌/‌vipw

vipw: Couldn۰۳۹;t lock file: Permission denied

vipw: ‌/‌etc‌/‌passwd is unchanged

می‌توان یک کاربر را با دستور useradd ایجاد کرد، شناسه آن را از طریق usermod عوض کرد و با کمک دستور userdel شناسه کاربر را از سیستم حذف کرد. همچنین ویرایش فایل ‌/‌etc‌/‌passwd را مستقیما از طریق دستور vipw انجام داد. دستور useradd و شیوه اجرای آن را در مثال‌های قبلی دیده‌اید.

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

# grep khess ‌/‌etc‌/‌passwd

khess:x:۵۰۰:۵۰۰:Kenneth Hess:‌/‌home‌/ ‌khess:‌/‌bin‌/‌bash

# usermod ‌ـ‌c "Ken Hess" khess

# grep khess ‌/‌etc‌/‌passwd

khess:x:۵۰۰:۵۰۰:Ken Hess:‌/‌home‌/‌khess:/ ‌bin‌/‌bash

دستور usermod را باید با احتیاط اجرا کرد چرا که تایپ ناصحیح یک دستور می‌تواند باعث بی‌استفاده‌شدن آن حساب شود. مثلا اگر فرض کنیم Bob Alobdob که در مثال گروه آن را ایجاد کردیم، بخواهد شناسه ورودی و دایرکتوری home خود را به robert تغییر دهد.

# usermod ‌ـ‌d "‌/‌home‌/‌robert" ‌ـ‌m ‌ـ‌l robert bob

# grep robert ‌/‌etc‌/‌passwd

robert:x:۵۰۵:۱۰۰:Bob Alobdob:‌/‌home/ ‌robert:‌/‌bin‌/‌bash

دقت کنید که چطور عبارت ‌/‌home‌/‌robert بدقت و درون گیومه وارد شده است. اگر این اتفاق نیفتد، شناسه رابرت دیگر دایرکتوری Home ندارد و در نتیجه سیستم برایش بی‌استفاده خواهد شد. همان‌طور که در دستور مشخص است، دایرکتوری فعلی ‌/‌home‌/‌bob به ‌/‌home‌/‌robert تغییر می‌کند. شناسه لاگین bob‌ نیز به robert تغییر می‌کند و گزینه ‌ـ‌m محتوای دایرکتوری bob را به robert منتقل می‌کند.

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

دستور userdel احتمالا واضح است، اما بعد از اجرای این دستور متوجه می‌شوید که دایرکتوری home کاربر دست نخورده باقی‌مانده است.

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

محمدرضا قربانی