منبع اصلی نوشتار زیر در این لینک قرار دارد

امنیت بیش تر در ssh با تغییراتی در shell

با سلام خدمت کاربران عزیز . همان طور که از عنوان مشخص است امروز در مورد بالا بردن امنیت ssh با استفاده از روشی خاص بحث خواهیم کرد . به طور خلاصه می توان گفت که دسترسی ssh را تنها به یک کاربر محدود می کنیم و shell پیش فرض این کاربر را هم محدود به دستور su می کنیم و در آخر اسکریپتی تهیه می کنیم تا قبل از باز شدن shell یوزر محدود خود , پسوردی دوم و عددی random از ما سوال شود .

سناریو :

در این سناریو قصد داریم دسترسی تمامی یوزر ها از جمله روت را از طریق ssh به سرور مسدود کنیم به جز یوزری به نام login

یعنی تمامی افراد برای اتصال به ssh از این یوزر باید استفاده کنند سپس بعد از وارد شده به یوزر خود su کنند .

نکته این جاست که shell پیش فرض این یوزر login بسیار محدود است و فقط اجرای دستور su در آن امکان پذیر است . همچنین قبل از وارد شدن به این یوزر یک عدد تصادفی نمایش داده می شود که کاربر باید آن را دستی وارد کند و در آخر پسورد دوم ( به غیر از پسورد یوزر login ) را وارد کند . در نهایت به آن محیط shell محدود که گفتیم وارد می شود .

 

توضیحات :

در اکثر سیستم ها و توزیع های لینوکسی shell پیش فرض یوزر ها و مخصوصا یوزر روت bash می باشد . البته shell های دیگری هم وجود دارد اما اکثرا از bash مخصوصا در لینوکس استفاده می کنند . زمانی که به صورت ریموت با استفاده از ssh به سرور متصل می شود یا حتی زمانی که پشت سیستم نشسته ایم و اقدام به لاگین کردن در سیستم می کنیم و یا حتی زمانی که با استفاده از دستور su به یوزری دیگر سویچ می کنیم , در همه ی این موارد shell جدید در سیستم باز و اجرا می شود و این shell متناسب با کانفیگ یوزر صورت می گیرد .

اگر فایل passwd را دیده باشید می دانید که یکی از قسمت هایش مربوط به shell اجرایی یوزر است .

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

 

نصب و کانفیگ lshell :

shell ای که برای یوزر login در نظر گرفته شد تا فقط امکان استفاده از دستور su را داشته باشد , lshell نام دارد . این شل در مخازن موجود است پس برای نصب به شکل زیر عمل می کنیم :

در توزیع های debian base :

root@OSLearn:~# apt-get install lshell

در توزیع های redhat base :

root@OSLearn:~# yum install lshell

فایل کانفیگ این shell در مسیر زیر قرار دارد :

/etc/lshell.conf

پیشنهاد می شود قبل از انجام هر کاری از آن یک بک آپ تهیه کنید :

root@OSLearn:~# cp /etc/lshell.conf /etc/lshell.conf.backup

حال این فایل کانفیگ را با یک ویرایشگر مثل nano باز کنید :

root@OSLearn:~# nano /etc/lshell.conf

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

forbidden       : [';', '&', '|','`','>','<', '$(', '${' , 'cat' ,'ls', 'pwd', 'ifconfig' , 'history' ,'lsudo', 'lpath', 'clear', 'help' , '?']
#aliases         : {'ll':'ls -l', 'vi':'vim'}
warning_counter : 2
intro : Wellcome to login gateway, now use 'su' command to switch on another users!

 

نوشتن اسکریپتی محدود برای پرسیدن پسوردی دوم و عددی رندم :

در واقع اسکیریپتی که در جلوتر می نوسیم shell پیش فرض یوزر login می شود . به این صورت که این بعد از لاگین این اسکریپت برای یوزر اجرا شده و اگر مراحلی که در نظر گرفتیم را درست طی کند , lshell برایش اجرا می شود .

ابتدا یک فایل با نام bash.limit در مسیر زیر ایجاد می کنیم :

root@OSLearn:~# touch /usr/bin/bash.limit

حال این فایل را با یک ویرایشگر باز می کنیم :

root@OSLearn:~# nano /usr/bin/bash.limit

اساس کار این اسکریپت را بر روی دو شرط قرار می دهیم . اولی پرسیدن عددی رندم و دومی وارد کردن پسورد :

#!/bin/bash
# By E2MA3N
# e2ma3n@Gmail.com
# http://OSLearn.ir
####################################################
random=`echo $RANDOM`
echo -e "e[1;31m[!] Protected By E2MA3N e[0m"
echo '[!] Random number is : '$random
sleep 3
read -p "[?] Enter Random number : " in1
####################################################
if [ $in1 -eq  $random ]
then
        echo "[+] It's true, go to next item"
        echo "[.]"
        sleep 1
        echo "[.]"
        sleep 2
        read -p "[?] Enter password : " in2
        if [ $in2 -eq MY_PASSWORD ]
        then
                echo "[+] It's true"
                echo "[!] All commands saving in server"
                echo "[.]"
                sleep 1
                echo "[.]"
                /usr/bin/lshell
        else
                echo "[-] It's not true"
                exit
        fi
####################################################
else
        echo "[-] It's not true, bye"
        exit
fi

توجه داشته باشید که در قسمت MY_PASSWORD باید پسوردی عددی که در نظر دارید را وارد کنید .

در آخر پرمیشن اجرا به این اسکریپت می دهیم :

root@OSLearn:~# chmod +x /usr/bin/bash.limit

 

ساخت یوزر login :

برای ساخت یوزری که در بالا گفته شد از دستور adduser به شکل زیر استفاده می کنیم :

root@OSLearn:~# useradd -d /home/login -m -s /bin/bash.limit login

نکته : از سویچ s- برای مشخص کردن shell پیش فرض این یوزر استفاده کردیم . توجه داشته باشید که shell این یوزر را اسکریپتی که در بالا نوشتیم در نظر گرفته ایم .

نکته : از سویچ m- برای ساخت و از سویچ d- برای مشخص کردن مسیر home دایرکتوری این یوزر استفاده کردیم .

حال با استفاده از دستور passwd پسوردی مناسب و قوی برای این یوزر در نظر می گیریم :

root@OSLearn:~# passwd login

 

محدود کردن لاگین به ssh از طریق دیگر یوزر ها :

برای این منظور باید تغییراتی را در فایل کانفیگ ssh انجام دهیم . برای این منظور ابتدا فایل کانفیگ ssh را با یک ویرایشگر باز می کنیم :

root@OSLearn:~# nano /etc/ssh/sshd_config

سپس عبارت زیر را در خط آخر اضافه می کنیم :

AllowUsers login

همان طور که مشخص است تنها یوزری که اجازه دسترسی دارد , یوزر login است و طبیعتا دیگر یوزر ها مثل روت و … نمی توانند اقدام به لاگین کنند .

در آخر لازم است تا یک بار سرویس ssh راه اندازی مجدد شود . برای این منظور :

root@OSLearn:~# /etc/init.d/ssh restart

 

تست و آزمایش سناریو :

تمام ! حال نوبت به دیدن مراحل است . برای این منظور ابتدا سعی کنید اقدام به لاگین کردن در ssh از طریق یوزر هایی مثل روت و … کنید . طبیعتا با تغییراتی که انجام دادیم نمی توان با هیچ یوزری به جز یوزر login اقدام به لاگین کرد :

iman@debian:~$ ssh root@192.168.229.129

OSLearn.ir_00

برای لاگین به ssh طبق تنظیماتی که انجام دادیم باید به شکل زیر عمل کرد :

iman@debian:~$ ssh login@192.168.229.129

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

OSLearn.ir_01

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

OSLearn.ir_03

حال به shell محدوی که برای این یوزر در نظر گرفته ایم وارد می شوید . توجه داشته باشید که با تغییراتی که انجام دادیم , تنها می توان از دستور su استفاده کرد و در صورتی که دو از دستورات ممنوعه استفاده کنید ارتباط با سرور قطع می شود .

OSLearn.ir_04

حال کافیست به شکل زیر به یوزر خودمون سویچ کنیم :

login:~$ su - root

OSLearn.ir_05

لازم به ذکر است که تمامی روش های گفته شده تنها درصدی در بالا بردن امنیت کمک می کنند و توقع ایجاد امنیتی 100٪ بی جا است .

موفق و موید باشید

 

منبع : او اس لرن دات آی آر | http://OSLearn.ir

نویسنده : E2MA3N

از این مطلب راضی هستید ؟ می خواهید به سایت کمک کنید ؟ رضایت خودتون رو با دونیت به ما اعلام کنید . برای دونیت روی خرید کلیک کنید . با تشکر



برچسب ها : , , , , , , , , ,

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

به اين صفحه امتياز دهيد