این اولین مطلب در مورد مطالب پایه در مورد سیستمعامل ارزشمند و آزاد FreeBSD میباشد. همانگونه که قول داده بودم، قرار شد دو مطلب بر مبنای مطالب پایهایFreeBSD و مطالب پایهای Hardening به سایت اضافه شود. این مطلب به دلیل ضرورتش اولین مطلب از مطالب پایهای FreeBSD میباشد.
شما در هرگونه از سیستمعاملهای خانواده یونیکس که بنگرید، یکی از مطالب پایهای آن سیستم authentication آن یا بهتر بگویم سیستم effective users و effective groups های آن میباشند. درواقع هر کاربر و گروهی که بر روی سیستم شما به صورت غیر مجازی ذخیره گردد و فایلهای خاص etc/passwd/ و غیره را تحت الشعاع قرار دهد به آن effective users و effective groups میگوییم.
برای شروع بهترین راه یک تقسیمبندی صحیح برای درک قضیه است و مهم اینکه اینجا Gnu\Linux نیست بلکه اینجا FreeBSD است.
۱. فایلهای پیکربندی
همانگونه که در بالا گفته شد، به دلیل عمده تغییرات FreeBSD با Gnu\Linux باید خود را با محیط و عوامل این سیستمعامل سازگار کنیم.
فایل etc/master.passwd/ :
این فایل اصلیترین فایل در FreeBSD میباشد و همه فایلها بر اساس آن ساخته میشود مواظب آن باشید. بیایید به فرمت آن سرک بکشیم:
هر خط آن مرتبط با یک کاربر میباشد و محتوایات مرتبط به آن درج گردیده است به عنوان مثال به خط زیر نگاه کنید:
1 |
mohsen:$6$fY9MK3cyqMOWfjRt$7FNnWNwIRQpTSUBrl32guSoNB4YbNz41y8ovV04iYs6BTnB6pz3.J0hkzHuZutt/O9Hm5iwLu0PXUxmrur0BE.:1001:1001::0:0:Mohsen Pahlevanzadeh:/home/mohsen:/bin/tcsh |
نکته: اگر دقت کردید همانند passwd لینوکس هر فیلدی با : از یکدیگر جدا میشود.
فیلدها به ترتیب از چپ به راست به نامهای زیر لیست شدهاند:
-
name
-
password
-
uid
-
gid
-
class
-
change
-
expire
-
gecos
-
home_dir
-
shell
تذکر: بله، شاید برایتان جالب باشد که فیلدهای فایل shadow و passwd لینوکس در این فایل ترکیب شدهاند، درست است.
بهتر است تنها ۳ گزینه class، change و expire که در passwd لینوکس وجود ندارند را توضیح دهیم.
گزینه class که پیشفرض آن در login.conf تعیین میشود همان termcap میباشد.
فیلد change تعداد ثانیههایی میباشد که account تغییر یافته است. اگر صفر باشد یعنی این فیلد صرفنظر میشود.
فیلد expire تعداد ثانیههای مانده به expire شدن حساب میباشد و اگر صفر باشد یعنی این حساب نا محدود است.
فایل etc/passwd/ :
این فایل از روی master.passwd با دستور pwd_mkdb ساخته میشود و ۴ فیلد class، password ،change و expire را ندارد. یک نمونه بارز آن در زیر آمده است:
1 2 |
root@firewall:~ # grep mohsen /etc/passwd mohsen:*:1001:1001:Mohsen Pahlevanzadeh:/home/mohsen:/bin/tcsh |
فایل etc/pwd.db/ :
این همان فایل etc/passwd/ میباشد که به صورت باینری میباشد درواقع دوفایل etc/passwd/ و etc/master.passwd/ به صورت باینری درمیآیند تا سرعت query گرفتن بالا رود.
فایل etc/spwd.db/ :
این همان باینری شده فایل etc/master.passwd/ میباشد.
فایل etc/group/ :
دقیقاً همانند etc/group/ لینوکس است با این تفاوت که در اینجا gshadow وجود ندارد و فیلدهای آن به صورت زیر میباشند:
group
passwd
gid
members
۲. برخی از فرامین مورد نیاز یا سنتی کار با گروهها و کاربران:
همانطور که در بخش قبل اشاره شد، اگر بخواهیم در etc/master.passwd/ دست ببریم باید فایلهای باینری را دوباره ایجاد نماییم. برای ایجاد فایلهای باینری از دستور زیر استفاده مینماییم:
1 |
pwd_mkdb -p /etc/master.passwd |
در مورد پاککردن/اضافهکردن کاربران و گروهها چندین گزینه روی میز وجود دارد. اولین گزینه یک گزینه TUI میباشد که در FreeBSD های قدیمی از sysinstall استفاده میشد و با نسخه ۱۰ آن این نرمافزار حذف شده و به جای آن bsdconfig حضور پیدا کرده است.
اولین دستور مرتبط با Authentication فرمان passwd میباشد. به دستور زیر دقت نمایید:
1 2 3 4 5 |
root@firewall:/home/mohsen # passwd -l mohsen Changing local password for mohsen New Password: Retype New Password: root@firewall:/home/mohsen # |
در این فرمان به دلیل به کار بردن گزینه l- به passwd میگوییم که این کاربر باید در Kerberos database
هم update شود. ولی اگر بدون l- به کار رود، فقط به صورت local و بر روی همان ماشین update میشود.
فرمان adduser و در مقابل آن rmuser از دو فرمانهای قدیمی FreeBSD هستند که در هر نسخه پیشرفتهتر میشوند. به مثال adduser زیر دقت ننمایید که چندین نکته در آن نهفته است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
root@firewall:/home/mohsen # adduser Username: test Full name: John Smith Uid (Leave empty for default): 1005 Login group [test]: Login group is test. Invite test into other groups? []: wheel Login class [default]: Shell (sh csh tcsh nologin) [sh]: tcsh Home directory [/home/test]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: yes Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : test Password : ***** Full Name : John Smith Uid : 1005 Class : Groups : test wheel Home : /home/test Home Mode : Shell : /bin/tcsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (test) to the user database. Add another user? (yes/no): no Goodbye! root@firewall:/home/mohsen # |
تذکر: همانند سایر یونیکسها به دلایل امنیتی شما باید برای کاربر خود یک گروه اختصاصی داشته باشید.
تذکر: اگر میخواهید با su تغییر کاربری دهید حتماً باید عضو گروه wheel باشید.
تذکر: این فرمان باینری فایلها را به روز میکند.
بقیه موارد که مانند روز روشن است.
اگر به rmuser زیر دقت شود نیز سوالهای آن جالب توجه میباشد:
1 2 3 4 5 6 7 8 9 10 |
root@firewall:/home/mohsen # rmuser Please enter one or more usernames: test Matching password entry: test:*:1005:1005::0:0:John Smith:/home/test:/bin/tcsh Is this the entry you wish to remove? yes Remove user's home directory (/home/test)? yes Removing user (test): mailspool home passwd. root@firewall:/home/mohsen # |
تذکر: این یک امتحان بود ولی همیشه در دنیای واقعی دایرکتوری home را نگه میدارند. تا کل اطلاعات پاک نشود. البته منوط به موارد امنیتی همه چیز را پاک میکنند.
یکی دیگر از فرامین سنتی FreeBSD که هنوز کاربرد دارد دستور chpass میباشد. این فرمان میتواند تمام فیلدهای etc/master.passwd/ را تغییر دهید. به مثال زیر دقت نمایید:
1 2 3 |
root@firewall:~ # chpass -s csh test chpass: user information updated root@firewall:~ # |
با این فرمان شل مربوط به کاربر test را به csh تغییر دادیم.
تذکر: به یاد داشته باشید که نام کاربر در این فرمان آخرین گزینه است.
دو فرمان groups و id تقریباً یک کار انجام میدهند ولی وسعت کار id خیلی بیشتر است.
به خروجی فرمان زیر دقت نماید:
1 2 |
root@firewall:~ # groups mohsen mohsen wheel |
به ما نشان داد که کاربر mohsen در چه گروههایی عضو است.
تذکر: اگر آن را بدون پارامتر به کار ببریم کاربر جاری را به عنوان پارامتر قبول میکند.
این دستور معادل فرمان زیر میباشد:
1 2 |
root@firewall:~ # id -Gn mohsen mohsen wheel |
۳. فرمان مدرن pw
به فرمان زیر دقت نمایید:
1 2 3 |
root@firewall:~ # pw --help usage: pw [user|group|lock|unlock] [add|del|mod|show|next] [help|switches/values] |
دقیقاً میتوان همانند دستور ip لینوکس از آن help گرفت:
1 2 |
root@firewall:~ # pw user show test1 test1:*:1006:1006::0:0:User &:/home/test1:/bin/sh |
مثال زیر گروه test را پاک میکند:
1 |
root@firewall:~ # pw group del test |
تذکر: در تمام فرامین بالا قسمت اول میتواند به قسمت دوم برای راحتی بچسبد:
1 2 3 |
root@firewall:~ # pw usershow test1 test1:*:1006:1006::0:0:User &:/home/test1:/bin/sh root@firewall:~ # pw groupdel test |
و این عمل زمان را بهینه میکند. از ای به بعد به صورت بهینه شده عمل میکنیم.
با دستور زیر کاربر test را به گروه wheel اضافه میکنیم:
1 |
root@firewall:~ # pw groupmod wheel -m test |
با فرمان زیر کاربر test را lock مینماییم:
1 |
root@firewall:~ #pw lock test |
تذکر: در به کار بردن فرمان pw باید به خاطر داشته باشید که کلی option وجود دارد و هر option برای یک فرمان است. به عنوان مثال option های user با group فرق دارند، البته ممکن است مشترکاتی داشته باشند.
در نهایت کافیست به مفاهیم effective users و effective groups ها مسلط باشید، آنگاه در هر یونیکسی موفق خواهید بود.
خیلی مفید بود
لطفا ادامه بده