chrooted jail و محدود کردن یک کاربر ssh

من می‌خواهم به یک کاربر یک حساب SSH بدهم اما او را نمی‌شناسم و اطمینان کافی ندارم. چطور می‌توانم وی را به یک دایرکتوری خاص محدود کنم؟ چیزی مثل دایرکتوری /home/httpd/$USERNAME. چطور می‌توانم یک ssh chroot jail بر روی لینوکس نصب کنم؟ اگر شما هم پرسشی مشابه دارید پس ادامه این راهنما را بخوانید.

به ChrootDirectory directive سلام کنید
در بخشی از راهنمای sshd_config می‌خوانیم
ChrootDirectory باید شامل فایل‌های ضروری و دایرکتوری‌هایی باشد تا از نشست کاربر پشتیبانی کند. برای داشتن یک نشست فعال حداقل نیاز به یک پوسته، معمولا sh(1)، گره‌های پایه /dev مانند: null(4)، zero(4)، stdin(4)، stdout(4)، stderr(4)، arandom(4) و tty(4) هستیم. برای نشست انتقال فایل با استفاده از «sftp» پیکربندی‌های اضافه محیطی نیاز نمی‌باشد، البته این در صورتی است که از sftp در فرآیند استفاده شده باشد. با این حال نشست‌هایی که از logging استفاده می‌کنند، به جای chroot directory به /dev/log نیاز دارند.

پس از راه اندازی SSH chroot jail آن چیزی که کاربر می‌تواند ببیند یا اجرا کند محدود می‌شود. ادامه این راهنما نحوه ایجاد یک chrooted jail را برای OpenSSH بر روی یک سرور اوبونتو یا دبیان آموزش می‌دهد و بر روی دبیان نسخه ۸.۱ آزمایش شده است.

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

debian-8-version
گام اول. به عنوان کاربر ریشه وارد سیستم شوید (در توزیع‌های مختلف کاربر ریشه با نام root شناخته می‌شود) یکی از  دو دستور زیر را وارد کنید.

گام دوم. chroot jail را بسازید، jail همان قفس است که دسترسی کاربر در آن محدود می‌شود.
من در نظر دارم تا کاربر ssh را به دایرکتوری /home.jails/ محدود کنم، برای این کار به صورت زیر عمل می‌کنم:

بر اساس راهنمای sshd به فایل‌های زیر نیز نیاز است:

خروجی این دستور به صورت زیر است:

برای ایجاد گره /dev مورد نیاز از دستور mknod به صورت زیر استفاده کنید.

گام سوم. دسترسی‌ها را تنظیم کنید.
دستور زیر را وارد کنید تا دایرکتوری $D مربوط به chroot و تمام محتویاتش به مالکیت کاربر ریشه دربیاید و توسط هر گروه یا کاربر دیگری جز کاربر ریشه قابل نوشتن نباشد.

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

در آخر خروجی‌ها مانند زیر خواهند بود.

گام چهارم. پوسته bash را در $D نصب کنید.
با استفاده از دستور زیر دایرکتوری bin را در مسیر $D ایجاد کنید.

یک رونوشت از /bin/bash در دایرکتوری $D/bin/ ایجاد کنید.

خروجی این دستور به صورت زیر است.

حالا نوبت به ایجاد یک رونوشت از کتابخانه‌های مورد نیاز اشتراکی در دایرکتوری $D است. دستور زیر بشکلی است تا موارد مورد نیاز bash را پیدا کند.

 

بعد از انجام خروجی مانند زیر ایجاد می‌شود.

فایل‌های هایلایت شده را یکی یکی با استفاده از دستور cp کپی کنید.

خروجی این کار مشابه زیر است.

اکنون نوبت به ایجاد رونوشتی از /liv64/ld-linux-x86-64.so.2 در دایرکتوری /lib64 است.

 

خروجی این دستور نیز به صورت زیر است.

در پایان این گام از تمام فایل‌های /lib/x86_64-linux-gnu/libnss_files* به صورت زیر یک رونوشت تهیه کنید.

گام پنجم. افزودن کاربر به سیستم
علاوه بر تمام موارد قبلی نیاز است تا یک رونوشت از فایل‌های /etc/passwd و /etc/group در دایرکتوری $D/etc/ ایجاد کنید. پس به صورت زیر عمل کنید.

در اینجا من دو کاربر با نام‌های tom و jerry ایجاد می‌کنم

خروجی این مورد شبیه به خطوط زیر است.

adduser-outputs
اکنون نوبت به ایجاد یک رونوشت از فایل‌های بروز‌شده /etc/{passwd,group} در دایرکتوری $D/etc/ است

خروجی این کار به صورت زیر است.

هشدار: اگر هرگونه تغییری در کاربر و رمزعبور موجود در فایل /etc/passswd دادید، مجددا فایل /etc/{passwd,group} را با اجرای دو دستور زیر باز رونوشت کنید.

گام ششم. پیکربندی sshd
برای این موضوع فایل /etc/ssh/sshd_config را با ویرایشگر مورد علاقه خود ویرایش کنید. من اینجا از vim استفاده کرده‌ام، کافی است vim را با نام ویرایشگر خود جایگزین کنید.

 

خطوط زیر را به انتهای فایل باز شده اضافه کنید:

 

گام هفتم. سرویس sshd را ری استارت کنید.
برای این کار در دبیان ۸ به صورت زیر عمل می‌شود

و در دبیان ۷ به این صورت

گام هشتم. آزمایش کنید
برای آزمایش کار کرد از ssh به صورت زیر استفاده کنید

نمونه‌ای از خروجی به صورت زیر است

گام نهم. دستورات دیگر را نصب کنید
اکنون کاربر tom قادر به وارد شدن به سیستم است اما امکان اجرای دستوراتی مانند ls یا date را ندارد. در این حالت کاربر تنها به /bin/bash محدود شده است و اگر نیاز به دستورات دیگری دارد باید آن‌ها را در دایرکتوری /home/jails نصب کنید، درست مثل زیر:

پس از دستور آخر ویرایشگر vi باز شده و شما باید در خطوط دیده شده به دنبال کلمه BASE باشید و آن را به صورت زیر تغییر بدهید.

تغیرات را ذخیره کنید و خارج شوید. حالا /bin/ls را در @D/bin/ نصب کنید.

دایرکتوری‌های $D/home/tom و $D/home/jerry را با استفاده از دستورات زیر بسازید

 

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

 

نمونه‌ای از خروجی

 

شاید تمایل داشته باشید تا وب سرور کاربر (DocumentRoot) را به دایرکتوری /home/jails نگاشت کنید، بنابراین اگر بخواهیم بگوییم که /home/httpd/tom_web همان DocumentRoot برای کاربر tom است، بشکل زیر عمل می‌کنیم.

 

منبع

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *