محمد عابدینی
کارشناس ارشد متخصص سیستم عامل های متن باز ( لینوکس و یونیکس )

دوره آموزش BSDA سیستم عامل BSD بصورت گام به گام

آموزش BSD | آموزش FreeBSD | آموزش سیستم عامل یونیکس | آموزش یونیکس | آموزش Unix | دوره آموزشی BSDA | آموزش BSDA و ...

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

دوره آموزشی BSDA قسمت 1 : آشنایی با Security Level ها 

سلام دوستان با دوره آموزشی آزمون BSDA در خدمت شما دوستان عزیز هستم در بخش اول قصد دارم در خصوص security level موجود در هسته با شما دوستان عزیز صحبت بکنم.در این بخش سعی بر آن است که تمام مواردی که شما برای شرکت در آموزش BSDA نیاز دارید را بدانید.هسته سیستم عامل های مبتنی بر BSD من FreeBSD و یا OpenBSD این قابلیت را دارند که حتی در سطوح امنیتی مختلف سطح دسترسی کاربر root را هم مسدود کنند.

شاید شما برای گوشیها اندوریدی خودتون هم شنید باشید که از اصطلاح root کردن استفاده می کنند که هدف اصلی آنها کاهش این سطح امنیتی است تا بتوانید در گوشی خود اعمالی را که نیاز دارید انجام دهید،security level به 5 سطح کلی تقسیم می شود که از سطح منفی 1 شروع شده و تا سطح 3 قابل تغییر است که هر بخش محدودیتهایی را برای شما اعمال می کند که در این بخش با آنها آشنا می شوید:

  • سطح منفی 1 : این سطح یک سطح خنثی بوده برای شما هیچ محدودیت در هسته اعمال نمی شود که البته سطح اصلی 0 است.
  • سطح 0 : به این بخش سطح نا امن می گویند و پرچم های append-only و غیر قابل تغییر برروی فایلها می تواند غیر فعال شوند.


نکته: برروی هر فایلی شما علاوه بر سطح دسترسی می توانید پرچم های را تنظیم کنید که هدف از تنظیم آنها اعمال روش های دسترسی اضافه به فایلها است برای مثال شما می توانید فایلهای log را append-only کنید تا فقط به آن بتوانید اضافه کنید و خطی را نتوانید پاک کنید، این پرچمها را شما به راحتی می توانید با علم به افزایش امنیت سیستم خود به فایلها اضافه کنید، برای مثال می توانید فایلهای پیکربندی اصلی سیستم خود را غیرقابل تغییر کنید.

  • سطح 1 : در این سطح شما نمی توانید پرچم های یک فایل را خاموش کنید، برروی دستگاه های devmem devkmem ، dev/io نمی توانید چیزی بنویسید و این شاخه ها در حالت فقط خواندن باز می شود. و هیچ ماژولی به هسته نه اضافه می شود و نه کم می شود.
  • سطح 2 : علاوه بر موارد سطح قبل دیگر شما نمی توانید در این سطح فایل سیستم جدید اضافه و کم کنید. کاربر root هم دیگر نمی تواند بخشی را تغییر دهد.
  • سطح3 :این سطح به امنیت در بخش شبکه معروف است و زمانی که این بخش فعال شود علاوه بر بخشهای قبلی شما دیگر نمی توانید رولهای فایروال خود را هم تغییر دهید.

روش فعال کردن

برای فعال کردن این بخش باید از قابلیت بخش kern.securelevel که در هسته سیستم عامل قرار دارد با استفاه از فرمان sysctl استفاده کنید، به این نکته هم دقت کنید که بعد از افزایش آن دیگر شما نمی توانید آنرا کاهش دهید مگر سیستم شما دوباره راه اندازی شود.برای مثال برای تغییر دادن در لحظه این بخش از فرمان زیر استفاده کنید:

""# sysctl kern.securelevel ""kern.securelevel: 2

برای راه اندازی دایمی این بخش در فایل rc.conf خط زیر را اضافه کنید:

kern_securelevel_enable="YES" ""kern_securelevel="2"

دوره آموزشی BSDA قسمت 2 : بررسی مفهوم File Flags

در این بخش می خوایم در مورد file flags با شما صحبت بکنم، همانطوری که در بخش قبلی با روش افزایش سطح امنیتی در هسته سیستم عاملهای خانواده BSD اشنا شدید با مفهومی مواجه شدیم به نام file flags که در این بخش در موردش صحبت می کنیم. در سیستم عاملهای خانواده BSD علاوه بر سطح دسترسی معمول هر فایلی که به 3 بخش اصلی خواندن نوشتن و اجرا کردن تقسیم می شود هر فایل هم می تواند file flags داشته باشد تا روش رفتار با آن فایل مشخص شود که این file flags به دسته های زیر تقسیم می شوند:

  • archived :  فایل مورد نظر باید بایگانی شود.
  • opaque : شاخه مورد نظر را نمی توانید از طریق unionfs به شاخه دیگری mount کنید.
  • nodump : این فایل توسط ابزارهای پشتیبانی گیری backu گفته نمی شود.
  • sappend : به این فایل فقط می توان خط جدید اضافه کرد و نمی توان انرا تغییر داد.
  • schange : این فایل را نمی توان تغییر داد.
  • sunlink : این فایل را نمی توانی unlink کنید.
  • uappend : به این فایل فقط می شود توسط صاحب آن اضافه کردن و هر کاربری قابلیت اضافه کردن بخش جدید را به آن ندارد.
  • uchange : به این فایل فقط می شود توسط صاحب آن تغییر کند و هر کاربری قابلیت اضافه کردن بخش جدید را به آن ندارد.
  • uunlink : این فایل فقط می تواند توسط صاحب آن unlink شود.

نکته: flag هایی که با s شروع می شود فقط توسط کاربر root. قابل تغییر است.

همانطوری هم که در بخش قبلی به شما دوستان توضیح دادم این قابلتها زمانی معنا پیدا می کنند که سطح امنیتی هسته را بالا برده تا بتوان سیستم خود را امن کنید. چند دیدگاه کلی در این بخش شامل موارد زیر است:

  • فایلهای نوع log فقط باید قابل اضافه کردن باشند تا خرابکار نتواند به آنها چیزی اضافه و یا کم کند و رد پای خود را پاک کند.
  • فایلهای اصلی سیستم شما که فایلهای پیکربندی هستند نباید قابل تغییر باشند.

برای اعمال تغییرات برروی flag فایلها از فرمان زیر استفاه کنید:

> chflags uappend important.log
(succeeds)

> ls -l important.log
-rw-r--r--  1 ivoras  ivoras   172 Jan 20 00:42 important.log

> ls -lo important.log
-rw-r--r--  1 ivoras  ivoras  uappnd 172 Jan 20 00:42 important.log

> echo garbage > important.log
important.log: Operation not permitted.

> echo garbage >> important.log
(succeeds)

> mv important.log unimportant.log
important.log: Operation not permitted

دوره آموزشی BSDA قسمت 3 : نمایش وضعیت کاربران در BSD

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

""Last login: Thu Jan 11 20:18:18 2007 on ttyv4

علاوه بر این نمایش که برای هر کاربری به صورت جداگانه نمایش دهده می شود 3 فایل دیگر هم در FreeBSD وجود دارد که محل ذخیره سازی این اطلاعات است که در ادامه با هر فایل آشنا می شوید:

  • فایل var/run/utmp/  : این فایل شامل اطلاعاتی در مورد کاربرانی است که در حال حاضر به سیستم متصل هستند.
  • فایل var/log/wtmp/  : در این فایل چهار دسته اطلاعات ذخیره می شود اطلاعات ورود هر کاربر، خارج شدن هر کاربر، restart شدن و shutdown شدن سیستم.
  • فایل var/log/lastlog/  : این فایل اخرین اطلاعات ورود به سیستم است.

    برای نمایش و استخراج اطلاعات از این فایلها شما نیاز به فرمان هایی دارید که در ادامه با دو فرمان معروف در این بخش آشنا می شوید. فرمان اول فرمان lastlogin است که اطلاعات برای ورود همه کاربران را نمایش می دهد و شما برای محدود کردن آن کافیست اسم کاربر خاص خود را بعد از فرمان ذکر کنید در این بخش یک مثال از خروجی این فرمان را مشاهده می کند:
$ lastlogin
root ttyv2 Thu Jan 11 19:12:23 2007 
mike ttyp1 192.168.112.24 Thu Jan 11 20:43:05 2007

فرمان دوم last است که همه ورد به سیستم ها را برای شما نمایش می دهد، خروجی این فرمان در شکل زیر نمایش داده شده است :

$ last -n5 
mike ""mike ttyp1 192.168.112.24 Thu Jan 11 20:43 - 20:43 (00:00) 
mike ttyv4 Thu Jan 11 20:42 - 20:42 (00:00) 
mike ttyv4 Thu Jan 11 20:41 - 20:41 (00:00) 
mike ttyp0 192.168.112.24 Thu Jan 11 20:37 still logged in 
mike ttyp0 192.168.112.24 Thu Jan 11 20:18 - 20:37 (00:19)

دوره آموزشی BSDA قسمت 4 : کنترل فایل های پیشفرض شاخه user

سلام دوستان عزیز ، بارهای شده که شما در سیستم عاملهای خانواده BSD یک کاربر جدید اضافه می کنید و این کاربر جدید به شاخه به نام Home دارد که محل ذخیره سازی فایلهای شخصی کاربر است، این شاخه در زمان اضافه شدن کاربر ایجاد شده و یک سری فایلهای پیش فرضی را در خود جای داده است. فایلهای پیش فرض در این بخش در یک شاخه معروف به نام skel قرار می گیرد که محل ذخیره سازی فایلهای پیش فرض است و از این محل است که فایلهای پیش فرض برای هر کاربری کپی می شود.

قبل از ادامه دادن به این بخش باید خدمت شما دوستان عزیز عرض کنم که هر فایلی که اسم ان با نقطه شروع بشه یک فایل مخفی به حساب میاد و در قدم اول هم نمایش داده نمی شود و باید از سویچ های خاصی باید برای نمایش استفاده کنید. یک سری فایلهای خاص که شمال متغییر های سیستمی،متغییرهای ورود به سیستم، فایل مربوط به aliases و

سایر تنظیمات است به نام (.login, .cshrc, .shrc, .rhosts, .mailrc ) این فایلها به صورت پیش فرض در زیر شاخه skel وجود دارد و برای هر کاربری هم در شاخه home کپی می شود که به اصطلاح به این فایلها dotfiles هم گفته می شود. اگر شما قصد دارید به عنوان یک مدیر سیستم که همه کاربران شما از متغییرهای یکسانی برخوردار باشند باید این فایلها را در زیر شاخه skel مدیریت و ویرایش کنید. در این بخش نمونه از فایلهای dotfiles در زیر شاخه skel در سیستم عامل FreeBSD را مشاهده می کنید:

FreeBSD$ ls /usr/share/skel
dot.cshrc         dot.login_conf    dot.mailrc        dot.rhosts
dot.login         dot.mail_aliases  dot.profile       dot.shrc

به این نکته توجه کنید که این فایلها در سیستم عامل های NetBSD و OpenBSD در زیر شاخه etcskel/ قرار دارند. در سیستم عامل OpenBSD هم فایلهای dotfiles در زیر شاخه etc/dotfile قرار دارند به صورت زیر این فایلها را مشاهده می کنید:

OpenBSD$ ls /etc/dotfiles
OpenBSD$

Try using "ls -a":

OpenBSD$ ls -a /etc/dotfiles
.        ..       .cshrc   .login   .mailrc  .profile .rhosts

دوره آموزشی BSDA قسمت 5 : تغییر الگوریتم پیشفرض تغییر رمز

در سیستم عامل های خانواده BSD برای رمزعبور دو فایل وجود دارد که فایل اول به نام passwd است که اطلاعات کاربران در آن قرار دارد و فایل دوم به نام masterpasswd است که هر دوی این فایلها در زیر شاخه etc قرار دارد که در فایل دوم رمز عبور به صورت هش شده در آن نوشته است. برای این کار الگوریتم هایی وجود دارند که وظیفه آنها کد کردن رمز وارد شده توسط کاربر بوده. معروفترین این الگوریتم ها DES, MD5 و Blowfish است که همه این الگوریتم ها در BSD وجود دارند و طول هر کدام از انها در خروجی با هم متفاوت است ولی طول کلی خروجی آنها در هر کدام از این روش های هش یکسان بوده که شما کاراکتری وارد کنید که تعداد کاراکترهای وارد شده توسط شما بیش از تعداد کاراکترهای خروجی یک الگوریتم باشد. در زیر با مثالهایی از طول متفاوت الگوریتم های مختلف هش برای یک رمز عبور یکسان را مشاهده می کنید:

ld but common crypt(3) DES: 7rpABVh3LoKjE
MD5: $1$FSh3ps5T$Etg/3eGiSBqdGahf29lIN1
NetBSD newsalt: _Gl/.Sw2RBVnj01TI6Tc
SHA1: $sha1$21773$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIH
Blowfish: $2a$04$3/vwv4ibdVz2SUG3w.SRwOgI6kk7FUmmCVswZ/KUS9bngvgGEkqNq

در سیستم عامل NetBSD فرمان passwd این روش کد کردن را از طریق فایل etcpasswd.conf باز خوانی و اجرا می کند. در سیستم عامل OpenBSD از localcipher برای هش کردن استفاده می شود که برای مشخص کردن نوع الگوریتم هش بخش مربوطه را از فایل etclogin.conf می خواند و اجرا می کند که از MD پیشتیبانی می کند و هم از Blowfish. در سیستم عامل FreeBSD و DragonflyBSD برای تغییر دادن روش هش کردن رمزهای عبور از برنامه passwd_format استفاده می شود و روش هش کردن مورد استفاده از فایل etclogin.conf می خواند.

دوره آموزشی BSDA قسمت 6 : تغییر Shell پیشفرض کاربران

هر کاربری بعد از ورود به سیستم در BSD یک محیط خط فرمان پیش فرض را دارد که هم به محیط های نصب شده توسط مدیر سیستم بستگی دارد و هم محیط پیش فرض مدیر سیستم. انواع Shell در BSD به نام های sh bash chsh tcsh وجود دارد که لیستی از shell های خط فرمانی در فایل به نام shells در زیر شاخه etc قرار دارند. در ادامه یک مثال از این فایل را مشاهده می کنید و هر shell که برروی سیستم خود نصب می کنید باید در این فایل مسیر خود را ثبت کنن:

# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/bin/pdksh

البته ذکر این نکته هم لازم است که بدانید بعد از وارد شدن به سیستم از طریق محیط تایپی و یا باز کردن شل شما می توانید با اجرا کردن فرمان محیط خط فرمانی مورد نظر وارد آن شوید. در این بخش از کاربران امتحان BSDA توفق داشته خواهد شد که روش تغییر دادن این محیط Shell پیش فرض را بدانید. در هر سیستم عاملی از خانواده BSD برای هر کاربری یک shell پیش فرضی برای کاربر root در نظر گرفته شده است، در سیستم عامل FreeBSD شل پیش فرض CSH است. در سیستم عامل OpenBSD شل پیش فرض ksh است. از سری shell ها یک shell پیش فرضی وجود دارد که در همه جا هست و در زیر شاخه /bin قرار دارد این shell به نام sh است و در همه سیستم عامل ها وجود دارد اگر برای کاربری shell تعریف نکرده باشید این shell به عنوان پیش فرض تعریف می شود.

یکی دیگه از shell ها معروف nologin است که اگر برای هر کاربری تنظیم شده باشد امکان ورود به سیستم وجود ندارد، از این قابلیت برای کاربرانی که به سرویس ها متصل هستند و سرویس ها از این طریق راه اندازی می شود استفاده می شود. برای تغییر دادن shell پیش فرض باید از فرمان chpass استفاده کنید و باید توسط هر کاربر به صورت شخصی راه اندازی شود، بعد از راه اندازی این فرمان شما وارد فایل اصلی اطلاعات خود کاربر می شوید و این فایل در یک محیط ویرایشگر متنی باز می شود و شما باید با دقت مسیر Shell جدید را وارد کنید.

دوره آموزشی BSDA قسمت 7 : Lock کردن یک کاربر

همانطوری که در بخشهای قبلی در مورد کاربران و محل ذخیره سازی رمز عبور هر کاربر در بخش الگوریتم های رمزنگاری صبحت شد، هر کاربری یک رمز عبور برای ورود به سیستم دارد که با استفاده از الگوریتم های رمز نگار هش شده است، اگر خروجی هش شده رمزعبور در فایل اصلی master.passwd دارای یک تغییر کوچک شود تز درسترسی کاربر به سیستم جلوگیری می شود.برای انجام دادن این عمل دو سیستم عامل FreeBSD و DragonFlyاز pw استفاده می شود که این فرمان در هش رمزعبور کاربر کلمه LOCKED اضافه می شود که به صورت زیر این فرمان را اجرا کنید:

#pw lock fred

با اجرا این فرمان fred لاک می شود و برای خارج کردن از حالت lock باید فرمان زیر را اجرا کنید:

#pw unlock 2395

در فرمان بالا بجای نام کاربری ID کاربر را قرار دادیم. در سیستم عامل NetBSD برای انجام این کار از فرمان usermod استفاده می شود که با استفاده از سویچ C در این فرمان حالت lock به فایل ذمر کاربر اعمال می شود، در این سیستم عامل باید فرمان زیر را اجرا کنید:

#usermod -C yes julie

برای خارج کردن یک کاربر از حالت lock در سیستم عامل NetBSD فرمان زیر را اجرا کنید:

# usermod -C no julie

این عمل در سیستم عامل OpenBSD هم با سایر BSD ها متفاوت است و باید از فرمان userdel با استفادها ز سویچ p به صورت زیر استفاده کنید:

#userdel -p [true|yes|non-zero-number] username

و برای unlock کردن هم از فرمان زیر استفاده کنید:

#userdel -p [false|no|0] username

دوره آموزشی BSDA قسمت 8 : تعیین هویت و عضویت در گروه ها

یکی از بخشهای مهمی که نیاز به تعیین هویت کاربران داره تعیین کردن سطح دسترسی به فایلها و سرویسها و منابع سیستم است، سطح دسترسی هر کاربر در BSD با عضویت در گروه های مختلف متفاوت است. در این بخش شما با فرمانهایی آشنا می شوید که بتوانید تعیین هویت و عضویت در گروه را تشخیص دهید. در این میان گروه امکان مدیریت کردن کاربران را ساده تر می کند. برای این کار شما نیاز به سه فرمان id, groups , whoami دارید که هر کدام اطلاعاتی را در اختیار شما قرار می دهند و در ادامه با آنها آشنا می شوید.برای نمایش نام کاربر کافیست از فرمان whoami استفاده کنید که در خروجی این فرمان نام کاربر وارد شده به سیستم را نمایش می دهد:

$ whoami 
user

در این مثال کاربر وارد شده به سیستم user است. برای نمایش همه گروه هایی که کاربر وارد شده به سیستم عضو ان است از فرمان groups است. خروجی این فرمان را مشاهده می کنید:

$ groups 
users audio mail cvs

شما می توانید گروه کاربران دیگر را هم چک کنید که برای این کار کافیست نام کاربر را بعد از فرمان groups وارد کنید، در فرمان زیر این بخش را مشاهده می کنید:

$ groups john 
users mail 
$ groups mike 
groups: mike: no such user

همانطوری که می دانید سیستم عامل BSD بجای استفاده از نام ها از اعدادی که به نام های کاربران نسبت داده می شود استفاده می کند، برای مثال هر نام کاربری یک User ID یا به اختصار UID دارد و هر گروه هم به اختصار یه GID دارد که برای پردازشهای دسترسی در BSD از آن استفاده می شود، برای نمایش این اطلاعات از فرمان id استفاده می شود که در زیر خروجی این فرمان را مشاهده می کنید:

$ id 
uid=1001(user) gid=100(users) groups=100(users), 92(audio), 1003(mail), 1004(cvs)

این فرمان ID های کاربر واد شده به سیستم را نمایش می دهد و شما مثل فرمان قبلی می توانید نام کاربر خاصی را ذکر کنید:

$ id john 
uid=1002(john) gid=100(users) groups=100(users), 1003(mail)

برای نمایش دادن کاربرانی که به سیستم وارد شده اند را می توانید از فرمان who و یا همان w مختصر شده استفاده کنید که خروجی این فرمان را در زیر مشاهده می کنید:

$ who 
root ttyv1 Jan 4 23:16 
user ttyp0 Jan 5 22:19 (192.168.86.11)


این فرمان بخش دیگری هم دارد که فقط می توانید کاربر وارد شده را مشاهده کنید به نام who am i که در زیر خروجی این فرمان را مشاهده می کنید و تفاوت آنرا با فرمان بالا را مشاهده می کنید:

$ who am I 
user ttyp0 Jan 5 22:19 (192.168.86.11)

دوره آموزشی BSDA قسمت 9 : تغییر رمز عبور کاربر

در سیستم عامل ها و در کل در سیستم های که از احراز هویت رمزعبور استفاده می کند رمز عبور بخش مهمی اتز احراز هویت و در نهایت دسترسی به سیستم است. سیستم عامل شما زمانی که شخصی با رمز عبور و نام کاربری درست وارد شده باشد به درخواست ها شخص پاسخ می دهد حتی اگر این شخص هکر باشد. پس به این نکته و رمز عبور خودتون دقت کنید.
یک مدیر سیستم خوب به صورت مدام و در زمان های مختلفی رمز عبور ها رو تغییر می ده و همه کاربران رو مجبور به تغییر رمز بعد از مدت معلوم میکنه و همیشه هم برای کاربر root یم رمز عبور قوی که به راحتی قابل حدس زدن نباشد رو انتخاب می کنه، چون در نهایت کاربران ساده سیستمی شما در BSD دسترسی به انجام کارهای مدیریتی ندارند و خیلی از کارها رو نمی تونن انجام بدن.

به عنوان یک مدیری سیستم شما نیاز دارید که بتونید رمزعبور کاربر Root و سایر کاربران رو تغییر بدین(شاید برای شما هم مشکل فراموش کردن رمز عبور کاربر root پیش اومده باشه در این موقعیت باید وارد single user mode بشید و در این حالت رمزعبور رو تغییر بدین) در همه این کارها و رفتار ها شما نیاز دارید که از برنامه passwd استفاده کنید که راحت با استفاده از اون بدون داشتن دانش خاصی از تغییر در فایلهای دیتابیس رمزعبور، password را تغییر دهید.
برای تغییر دادن رمزعبور کاربر root حتما باید با کاربر root وارد سیستم بشید و یا از طریق کاربری که عضو گروه wheel هست این کار رو انجام بدین و با استفاده از فرمان su و رمز عبور کاربر root به سطح دسترسی کاربر root وارد بشید که در ادامه مشاهده می کنید. قبل از تغییر دادن رمزعبور با استفاده از فرمان id می تونید نام کاربری که با استفاده از اون به سیستم متصل هستید رو مشاهده کنید و از صحت تغییر مطمین بشید، این بخش رو در مثال زیر مشاهده می کنید:

$ id 
uid=1001(someuser) gid=0(wheel) groups=0(wheel) 
$ passwd 
Changing local password for someuser 
Old Password: 
New Password: 
Retype New Password:

حال همین کاربر که دسترسی به اجرای فرمان su داره می تونه رمز کاربر root رو هم به صورت زیر تغییر بده:

$ id 
uid=1001(someuser) gid=0(wheel) groups=0(wheel) 
$ su 
Password: 
# id 
uid=0(root) gid=0(wheel) groups=0(wheel), 5(operator) 
# passwd 
Changing local password for root 
New Password: 
Retype New Password:

خب در بخش بعد فرض کنید که قصد دارید رمز عبور کاربر دیگه رو تغییر بدید این امر بیشتر زمانی رو می دهد که کاربر رمز خود رو فراموش کرده باشد در این گونه از مواقع شما با استفاده از دسترسی کاربر root و عدم نیاز به رمز قبلی کاربر می تونید این کار رو انجام بدین به صورت زیر این تفاوت رو مشاهده می کنید:

# id 
uid=0(root) gid=0(wheel) groups=0(wheel), 5(operator) 
# passwd someotheruser 
Changing local password for someotheruser 
New Password:
Retype New Password:

این تفاوت رو در بالا مشاهده کردین، به این نکته هم توجه داشته باشید که رمز تایپ شده نمایش داده نمی شود و با زدن Enter رمز خاتمه پیدا می کند و تا زمانی که دو رمز با هم برابر نباشند تغییر رمز اتفاق نمی افتد. حال شما می توانید به راحتی اعمال زیر رو انجام بدین:

  • تغییر رمز کاربر خودتون در BSD
  • تغییر رمز کاربر Root در BSD
  • تغییر رمز کاربران دیگه با استفاده از دسترسی root

منابع بیشتر برای مطالعه صفحات man زیر است:

passwd(1), vipw(8) 

دوره آموزشی BSDA قسمت 10 : ایجاد اکانت سیستمی 

سلام دوستان،در روش جدید مدیتریت کردن سرویسها در سیستم عامل BSD و برای جلوگیری از خطرهای احتمالی هک شدن سرویسها و دسترسی از این روش با کاربر root به سیستم در سیستم عامل های خانواده BSD برای هر سرویسی که قصد راه اندازی داشته باشید یک کاربر خاص سیستم به آن نسبت داده شده است. این نوع از کاربران هم مثل سایر کاربران نیاز به UID دارند تا از طریق هسته مدیریت شوند و امکان گزارش گیری هم برای آنها وجود داشته باشد و بتوان در سیستم برای آنها سطح دسترسی تعیین کرد ولی در عین حال این کاربران نباید شامل موارد زیر در بخش پروفایل خود باشند:

  • نباید shell قابل اجرایی داشته باشند و از شب nologin برای آنها استفاده می شود
  • نباید شامل رمزعبور باشند تا امکان ورود به سیستم برای آنها نباشد.
  • نباید دارای شاخه Home باشند.

در نصب کردن پیش فرض سیستم عامل BSD و برای راه اندازی کردن سرویسها یک سری سرویسهایی برای سیستم مثل سرویس ssh در نظر گرفته شده است که در زیر مثالی از اطلاعات این کاربران را مشاهده می کنید:

root::0:0::0:0:Charlie &:/root:/bin/csh
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/sbin/nologin
_pflogd:*:74:74::0:0:pflogd privsep:/var/empty:/sbin/nologin
nobody:*:32767:32767::0:0:Unprivileged user:/nonexistent:/sbin/nologin

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

nologin(8); 

دوره آموزشی BSDA قسمت 11 : حفاظت از اطلاعات احراز هویتی

برای جلوگیری از حملاتی که به دیتابیس رمزعبور در سیستم عاملهای متن باز اتفاق می افتد در سیستم عاملهای خانواده BSD فایل اصلی که حاوی رمز هاست به صورت کد شده برروی هارد ذخیره می شود و فقط توسط خود سیستم عامل قابل مشاهده است. وظیفه یک مدیر سیستم این است که محل ذخیره شدن این فایل را بداند و بتواند با سطح دسترسی درست انرا مدیریت کند. در سیستم عامل خانواده BSD یک فایلی به نام master.passwd وجود دارد که در زیر شاخه etc قرار گرفته که فایل اصلی و محل ذخیره سازی رمزعبور و سایر اطلاعات کاربر است.

این فایل بسیار از نظر سطح دسترسی مهم است و سطح دسترسی آنرا در بخش بعدی به شما دوستان نمایش خواهیم داد. در مقابل این فایل ذکر شده فایل دیگری وجود دارد به نام passwd که باز هم در زیر شاخه etc قرار دارد و این فایل برای هر کاربر قابل مشاهده ودسترسی است و شامل اطلاعات کاربری است به غیر از اطلاعات رمز عبور که سایر اطلاعات در این فایل قابل مشاهده می باشد. حال در این بخش قصد داریم که سطح دسترسی هر دو فایل مذکور را با هم مقایسه کنیم:

# ls -l /etc/master.passwd /etc/passwd 
-rw------- 1 root wheel 3704 Jan 7 12:58 /etc/master.passwd 
-rw-r--r-- 1 root wheel 3028 Jan 7 12:58 /etc/passwd

همانطوری که مشاهده می کنید فقط کاربر root است که می تواند در فایل اصلی بخواند و بنویسد و سایر کاربران به این فایل دسترسی ندارند و به فایل passwd همه کاربران دسترسی فقط خواندن را دارند. در سطح سیستم های با کاربران بالا و برای افزایش سرعت پاسخ گویی به درخواست های کاربران و در دسترس بودن همیشگی قالبت ورود به سیستم ، سیستم عاملهای مبتنی بر BSD یک دیتابیس برای هم کدام از این دو فایل ایجاد می کند که در قالب قابل فهم برای سیستم عامل ایجاد و طراحی می شود و برای کاربران قابل مشاهده نیست. این سیستم عامل ها از فایل passwd فایل pwd.db و از فایل master.passwd فایل spwd.db را ایجاد کرده و در زیر شاخه etc قرار می دهند. در ادامه سطح دسترسی به این دو دیتابیس ایجاد شده را مشاهده می کنید که با سطح دسترسی برای فایلهای اصلی انها یکسان بوده است.

# ls -l /etc/spwd.db /etc/pwd.db 
-rw-r--r-- 1 root wheel 57344 Jan 7 12:58 /etc/pwd.db 
-rw------- 1 root wheel 57344 Jan 7 12:58 /etc/spwd.db

دوره آموزشی BSDA قسمت 12 : مباحث کلی مدیریت کاربران

سلام دوستان ، بخش چهارم از آموزش BSDA مباحثی در مورد مدیریت کردن کاربران را بیان می کند و قصد و هدف اصلی آشنا شدن با موارد مورد نیاز در مورد کاربران سیستمی و معمولی و root است. در بخش شروع هیچ توضیحاتی در مورد این بخش داده نشده است در سایت اصلی و سرفصل آموزشی این بخش. به دلیل ناقص بودن این بخش و فرض کردن این موضوع که اشخاصی قصد مطالعه این بخش را دارند که در مورد اضافه کردن کاربران اطلاعات کافی دارند مطالبی در مورد اضافه کردن کاربران باین نشده که این بخش در این باره توضیحاتی در قالب یک نکته در سیستم عامل FreeBSD بیان خواهم کرد.

  • اضافه کردن کاربر در FreeBSD

برای اضافه کردن کاربر دو فرمان کلی وجود دارد که یکی از پرکاربرد ترین آنها فرمان adduser است که در قالب تعامل با کاربر عمل می کند و هر بخش سوالاتی برای اضافه کردن از مدیر سیستم پرسیده می شود و بعد از پاسخ گویی به بخش بعدی هدایت خواهد شدو در پایان هم گزارشی از اطلاعات وارد شده نمایش داده می شود و در صورت تصدیق این اطلاعات کاربر ثبت خواهد ش، در زیر یک مثال از این بخش را مشاهده می کنید:

# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [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   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#

همانطوری که مشاهده می کنید اطلاعاتی مثل نام کاربر و رمز عبور نوع شل شاخه home و غیر سوال می شود و در صورتی که تایید شود کاربر اضافه شده و باز هم شما در بخش پایانی از این فرمان امکان اضافه کردن کاربر جدید را هم دارید که باز همان مراحل و اطلاعات از شما پرسیده خواهد شد.

  • پاک کردن کاربر

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

# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
#

بعد از وارد کردن نام کاربر در مقابل این فرمان خط مربوط به کاربر در فایل اصلی passwd برای شما نمایش داده می شود و بعد از تایید کردن این بخش شما می توانید شاخه home کاربر را نگه دارید و یا نه ان را هم پاک کنید. این فرمان اطلاعات کاربران در بخش های زیر را هم پاکسازی می کند:

  • ورودی ها در بخش crontab
  • ورودی ها در بخش at
  • همه پردازش های راه اندازی شه توسط کاربر
  • میل های کاربر در شاخه mail
  • فایلهای موقت کاربر در شاخه temp
  • ویرایش کردن فایل group

دوره آموزشی BSDA قسمت 13 : تنظیمات شبکه

سلام دوستان با بخش ششم از سری اموزش های آزمون BSDA در خدمت شما دوستان عزیز خواهم بود، این بخش در مورد شبکه در سیستم عاملهای BSD بحث خواهد شد. این بخش شامل مطالب زیر است:

Determine the current TCP--IP settings on a system
Set a system's TCP--IP settings
Determine which TCP or UDP ports are open on a system
Verify the availability of a TCP--IP service
Query a DNS server
Determine who is responsible for a DNS zone
Change the order of name resolution
Convert a subnet mask between dotted decimal, hexadecimal or CIDR notation
Gather information using an IP address and subnet mask
Understand IPv6 address theory
Demonstrate basic tcpdump(1) skills
Manipulate ARP and neighbor discovery caches
Configure a system to use NTP
View and renew a DHCP lease
Recognize when and how to set or remove an interface alias
  • بخش Determine the current TCP--IP settings on a system

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

  • بخش Set a system's TCP--IP settings

در این بخش شما با روشها تنظیم کردن IP در BSD ها آشنا می شوید.

  • بخش Determine which TCP or UDP ports are open on a system

یکی از بخشهایی که شما به عنوان مدیر سیستم به آن نیاز دارید باید بدانید نمایش پورتهای باز و بسته سیستم است که در سیستم عامل های خانواده BSD باید این مهارت را داشته باشید.

  • بخش Verify the availability of a TCP--IP service

در این بخش شما با فرمان های مثل ping و telnet آشنا می شوید که با استفاده از آنها می توانید وضعیت شبکه ای سیستم خود را چک کنید.

  • بخش Query a DNS server

در این بخش با فرمان های host dig و nslookup آشنا می شوید.

  • بخش Determine who is responsible for a DNS zone

در این بخش شما با فرمان های whois برای پیدا کردن صاحب دامین ها و روش مشاهد کردن فایلهای zone دامین ها آشنا می شوید.

  • بخش Change the order of name resolution

در این بخش با nsswitch آشنا می شوید که ترتیب جستجوی دامین را برای سیستم شما تعیین می کند.

  • بخش Convert a subnet mask between dotted decimal, hexadecimal or CIDR notation

در این بخش با روش تعریف کردن subnet در BSD آشنا می شوید.

  • بخش Gather information using an IP address and subnet mask

در این بخش شما با روش محاسبه کردن تعداد هاست و net در IPV4 اشنا می شوید.

  • بخش Understand IPv6 address theory

در این بخش شما با مفاهیم IPV6 در BSD اشنا می شوید.

  • بخش Demonstrate basic tcpdump(1) skills

در این بخش با فرمان tcpdump آشنا می شوید که برای مشاهده کردن بسته های شبکه استفاده می شود.

  • بخش Manipulate ARP and neighbor discovery caches

در این بخش شما با فرمان arp و روش استفاده از آن آشنا می شوید.

  • بخش Configure a system to use NTP

یکی از روشهای تنظیم کردن زمان سیستم استفاده از NTP server است که در این بخش با روش تنظیم کردن آن آشنا می شوید.

  • بخش View and renew a DHCP lease

دی این بخش با مفاهیم DHCP آشنا می شوید

  • بخش Recognize when and how to set or remove an interface alias

یکی از قابلتهای موجود در این سیستم عاملها اضافه کردن آدرسهای IP مجازی است که در این بخش پوشش داده می شود.


محمد عابدینی
محمد عابدینی

کارشناس ارشد متخصص سیستم عامل های متن باز ( لینوکس و یونیکس )

سلام دوستان از سال ۱۳۸۱ با سیستم عامل های مبتنی بر BSD کار کردم. برگذار کننده دوره های PF و pfsense مدرس دوره های لینوکس ( LPIC303) مقالات و فیلم های آموزشی در زمینه BSD تهیه کردم. یکی از سیستم عامل های مورد علاقه من OpenBSD است. عاشق کار با سیستم عاملهای متن باز عاشق کار با خط فرمان.

11 آذر 1396 این مطلب را ارسال کرده

نظرات