دلیل های زیادی برای محدود کردن دسترسی ssh یک کاربر به دایرکتوری خاص وجود دارد، مخصوصا روی سرورهای وب اما بارزترین دلیل امنیت یک سیستم است. به منظور محدود کردن کاربران ssh به یک دایرکتوری خاص ما میتوانیم از مکانیزم chroot استفاده کنیم.
تغییر root (یا chroot) در سیستم های شبیه UNIX مانند Linux به معنای جدا کردن عملیات کاربر خاص از بقیه سیستم لینوکسی، تغییر ظاهر دایرکتوری root برای پروسس در حال اجرای کاربر جاری و زیر پروسس آن (Child Process) به همراه دایرکتوری root جدید که chrooted jail نامیده میشود، میباشد.
در این مطلب ما به شما نحوه محدود کردن دسترسی ssh یک کاربر را به یک دایرکتوری مورد نظر در لینوکس نشان خواهیم داد. دقت کنید که ما تمامی دستورات را با یوزر root اجرا میکنیم، و در صورتی که شما با کاربر معمولی در سیستم تان login هستید میتوانید دستورات را با sudo استفاده کنید.
مرحله 1 : ایجاد SSH Chroot Jail
1 - کار را با ایجاد chroot jail با استفاده از دستور mkdir همانند زیر شروع میکنیم.
2 - سپس فایل های مورد نیاز را مشخص کرده، بر اساس صفحه man دستور sshd_config گزینه ChrootDirectory نام مسیر دایرکتوری chroot بعد از احراض هویت کاربر، را مشخص میکند. دایرکتوری باید شامل فایل ها و فولدر های مورد نیاز برای ساپورت یک session کاربر باشد.
برای یک session تعاملی (interactive session) حداقل به یک shell، عموما sh و node های اصلی /dev همانند دیوایس های null, zero, stdin, stdout, stderr, و tty نیاز است،
3 - اکنون فایل های /dev را همانند زیر با استفاده از دستور mknod ایجاد میکنیم. در دستور زیر آپشن -m برای مشخص کردن بیت های پرمیژن فایل، c به معنای character file و دو عدد بعد اعداد minor و major هستند که فایل ها به آنها مربوط میشود.
4 - بعد از آن پرمیژن های مناسب را روی chroot jail تعریف میکنیم. دقت کنید که chroot jail و زیر دایرکتوری و فایل ها تحت آن باید متعلق به کاربر root باشد و توسط هیچ یوزر یا گروه معمولی دیگری قابل write نباشد.
مرحله 2 : ایجاد Shell تعاملی برای SSH Chroot Jail
5 - ابتدا دایرکتوری bin را ایجاد کنید و سپس فایل های /bin/bash را درون دایرکتوری bin همانند زیر copy کنید.
6 - اکنون library های (libs) مشترک مورد نیاز bash را تشخیص و همانند زیر آنها را به دایرکتوری lib کپی کنید.
مرحله 3 : ایجاد و کانفیگ کاربر SSH
7 - اکنون یوزر ssh را با دستور useradd ایجاد کنید و یک پسورد امن برای کاربر تعریف کنید.
8 - دایرکتوری تنظیمات کلی chroot jail را ایجاد کنید که مسیر آن /home/maryam/etc میباشد و فایل های آپدیت شده مربوط به اکانت (/etc/passwd و /etc/group) را در این دایرکتوری همانند زیر کپی کنید.
نکته : هر باری که شما کاربرهای بیشتری برای ssh به سیستم اضافه میکنید شما نیاز دارید که فایل های اکانت آپدیت شده را در دایرکتوری /home/maryam/etc کپی کنید.
مرحله 4 : کانفیگ SSH برای استفاده از Chroot Jail
9 - اکنون فایل sshd_config را باز کنید.
و خط های زیر را در فایل اضافه یا تغییر دهید.
فایل را ذخیره و از آن خارج شوید و سرویس sshd را restart کنید.
مرحله 5 : تست کردن SSH با Chroot Jail
10 - در اینجا تست میکنیم که آیا تنظیمات chroot jail همانند انتظار کار میکند یا خیر.
از تصویر بالا ما میتوانیم که مشاهده کنیم که کاربر ssh در chroot jail حبص شده است و نمیتواند هر گونه دستور خارجی را همانند ls - date - uname و غیره را اجرا کند.
یوزر تنها میتواند bash و دستورات درونی bash همانند pwd، history، echo و غیره را همانند تصویر زیر اجرا کند.
مرحله 6 : ایجاد دایرکتوری Home کاربر SSH و اضافه کردن دستورات لینوکسی
11 - از مرحله قبل میتوانید متوجه شوید که کاربر در دایرکتوری root حبس شده، ما میتوانیم یک دایرکتوری home برای کاربر ssh شبیه به زیر ایجاد کنیم. (این دایرکتوری ها برای تمام کاربران بعدی هم ایجاد کنید)
12 - سپس دستوراتی همانند ls, date, mkdir در دایرکتوری bin نصب کنید.
13 - سپس library های مشترک برای دستورات بالا را بررسی و به پوشه library های chroot jail انتقال دهید.
مرحله 7 : تست کردن SFTP با Chroot Jail
14 - اکنون یک تست نهایی با استفاده از SFTP انجام میدهیم، بررسی میکنیم که آیا دستوراتی که اخیرا نصب کردیم به درستی کار میکند یا خیر.
خطوط زیر را درون فایل /etc/ssh/sshd_config اضافه میکنیم :
فایل را ذخیره و از آن خارج شوید. سپس سرویس SSHD را restart کنید.
15 - اکنون با استفاده از SSH تست کنید، شما error زیر را دریافت خواهید کرد.
این بار با استفاده از SFTP و همانند زیر امتحان کنید.
همچنین پیشنهاد میشود مطالعه کنید :
محدود کردن کاربر SFTP به دایرکتوری Home توسط chroot jail (به زودی)
در این پست ما به شما نحوه محدود کردن یک کاربر SSH به دایرکتوری مورد نظر (Chroot Jail) در لینوکس را نشان دادیم. اگر درباره موضوع بالا هر مشکلی برخوردید در همینجا مطرح کنید.
تغییر root (یا chroot) در سیستم های شبیه UNIX مانند Linux به معنای جدا کردن عملیات کاربر خاص از بقیه سیستم لینوکسی، تغییر ظاهر دایرکتوری root برای پروسس در حال اجرای کاربر جاری و زیر پروسس آن (Child Process) به همراه دایرکتوری root جدید که chrooted jail نامیده میشود، میباشد.
در این مطلب ما به شما نحوه محدود کردن دسترسی ssh یک کاربر را به یک دایرکتوری مورد نظر در لینوکس نشان خواهیم داد. دقت کنید که ما تمامی دستورات را با یوزر root اجرا میکنیم، و در صورتی که شما با کاربر معمولی در سیستم تان login هستید میتوانید دستورات را با sudo استفاده کنید.
مرحله 1 : ایجاد SSH Chroot Jail
1 - کار را با ایجاد chroot jail با استفاده از دستور mkdir همانند زیر شروع میکنیم.
کد PHP:
mkdir -p /home/maryam
2 - سپس فایل های مورد نیاز را مشخص کرده، بر اساس صفحه man دستور sshd_config گزینه ChrootDirectory نام مسیر دایرکتوری chroot بعد از احراض هویت کاربر، را مشخص میکند. دایرکتوری باید شامل فایل ها و فولدر های مورد نیاز برای ساپورت یک session کاربر باشد.
برای یک session تعاملی (interactive session) حداقل به یک shell، عموما sh و node های اصلی /dev همانند دیوایس های null, zero, stdin, stdout, stderr, و tty نیاز است،
کد PHP:
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
3 - اکنون فایل های /dev را همانند زیر با استفاده از دستور mknod ایجاد میکنیم. در دستور زیر آپشن -m برای مشخص کردن بیت های پرمیژن فایل، c به معنای character file و دو عدد بعد اعداد minor و major هستند که فایل ها به آنها مربوط میشود.
کد PHP:
# mkdir -p /home/maryam/dev/
# cd /home/maryam/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
4 - بعد از آن پرمیژن های مناسب را روی chroot jail تعریف میکنیم. دقت کنید که chroot jail و زیر دایرکتوری و فایل ها تحت آن باید متعلق به کاربر root باشد و توسط هیچ یوزر یا گروه معمولی دیگری قابل write نباشد.
کد PHP:
# chown root:root /home/maryam
# chmod 0755 /home/maryam
# ls -ld /home/maryam
drwxr-xr-x 3 root root 4096 Jun 12 17:54 /home/maryam/
مرحله 2 : ایجاد Shell تعاملی برای SSH Chroot Jail
5 - ابتدا دایرکتوری bin را ایجاد کنید و سپس فایل های /bin/bash را درون دایرکتوری bin همانند زیر copy کنید.
کد PHP:
# mkdir -p /home/maryam/bin
# cp -v /bin/bash /home/maryam/bin/
6 - اکنون library های (libs) مشترک مورد نیاز bash را تشخیص و همانند زیر آنها را به دایرکتوری lib کپی کنید.
کد PHP:
# ldd /bin/bash
# mkdir -p /home/maryam/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/maryam/lib64/
مرحله 3 : ایجاد و کانفیگ کاربر SSH
7 - اکنون یوزر ssh را با دستور useradd ایجاد کنید و یک پسورد امن برای کاربر تعریف کنید.
کد PHP:
# useradd mina
# passwd mina
کد PHP:
# mkdir /home/maryam/etc
# cp -vf /etc/{passwd,group} /home/maryam/etc/
‘/etc/passwd’ -> ‘/home/maryam/etc/passwd’
‘/etc/group’ -> ‘/home/maryam/etc/group’
مرحله 4 : کانفیگ SSH برای استفاده از Chroot Jail
9 - اکنون فایل sshd_config را باز کنید.
کد PHP:
# vi /etc/ssh/sshd_config
و خط های زیر را در فایل اضافه یا تغییر دهید.
کد PHP:
#define username to apply chroot jail to
Match User mina
#specify chroot jail
ChrootDirectory /home/maryam
فایل را ذخیره و از آن خارج شوید و سرویس sshd را restart کنید.
کد PHP:
# systemctl restart sshd
OR
# service sshd restart
مرحله 5 : تست کردن SSH با Chroot Jail
10 - در اینجا تست میکنیم که آیا تنظیمات chroot jail همانند انتظار کار میکند یا خیر.
کد PHP:
# ssh mina@192.168.10.246
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
از تصویر بالا ما میتوانیم که مشاهده کنیم که کاربر ssh در chroot jail حبص شده است و نمیتواند هر گونه دستور خارجی را همانند ls - date - uname و غیره را اجرا کند.
یوزر تنها میتواند bash و دستورات درونی bash همانند pwd، history، echo و غیره را همانند تصویر زیر اجرا کند.
کد PHP:
# ssh tecmint@172.17.107.15
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
مرحله 6 : ایجاد دایرکتوری Home کاربر SSH و اضافه کردن دستورات لینوکسی
11 - از مرحله قبل میتوانید متوجه شوید که کاربر در دایرکتوری root حبس شده، ما میتوانیم یک دایرکتوری home برای کاربر ssh شبیه به زیر ایجاد کنیم. (این دایرکتوری ها برای تمام کاربران بعدی هم ایجاد کنید)
کد PHP:
# mkdir -p /home/maryam/home/mina
# chown -R mina:mina /home/maryam/home/mina/
# chmod -R 0700 /home/maryam/home/mina/
12 - سپس دستوراتی همانند ls, date, mkdir در دایرکتوری bin نصب کنید.
کد PHP:
# cp -v /bin/ls /home/maryam/bin/
# cp -v /bin/date /home/maryam/bin/
# cp -v /bin/mkdir /home/maryam/bin/
13 - سپس library های مشترک برای دستورات بالا را بررسی و به پوشه library های chroot jail انتقال دهید.
کد PHP:
# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/maryam/lib64/
مرحله 7 : تست کردن SFTP با Chroot Jail
14 - اکنون یک تست نهایی با استفاده از SFTP انجام میدهیم، بررسی میکنیم که آیا دستوراتی که اخیرا نصب کردیم به درستی کار میکند یا خیر.
خطوط زیر را درون فایل /etc/ssh/sshd_config اضافه میکنیم :
کد PHP:
#Enable sftp to chrooted jail
ForceCommand internal-sftp
کد PHP:
# systemctl restart sshd
OR
# service sshd restart
15 - اکنون با استفاده از SSH تست کنید، شما error زیر را دریافت خواهید کرد.
کد PHP:
# ssh mina@172.17.107.15
mina@172.17.107.15's password:
This service allows sftp connections only.
Connection to 172.17.107.15 closed.
کد PHP:
# sftp mina@172.17.107.15
همچنین پیشنهاد میشود مطالعه کنید :
محدود کردن کاربر SFTP به دایرکتوری Home توسط chroot jail (به زودی)
در این پست ما به شما نحوه محدود کردن یک کاربر SSH به دایرکتوری مورد نظر (Chroot Jail) در لینوکس را نشان دادیم. اگر درباره موضوع بالا هر مشکلی برخوردید در همینجا مطرح کنید.