آموزش معرفی و بررسی

نحوه فعال کردن SFTP بدون دسترسی Shell در اوبونتو 20.04

معرفی

SFTP مخفف SSH File Transfer Protocol است و راهی مطمئن برای انتقال فایلها بین ماشینها با استفاده از اتصال SSH رمزگذاری شده است. اگرچه از نظر نام مشابه است ، این پروتکل متفاوت از FTP (پروتکل انتقال فایل) است ، اما SFTP به طور گسترده توسط سرویس گیرندگان FTP مدرن پشتیبانی می شود.

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

در این آموزش ، شما SSH daemon را تنظیم می کنید تا دسترسی SFTP را به یک فهرست بدون دسترسی SSH به ازای هر کاربر محدود کند.

برای پیگیری این آموزش ، باید به سرور اوبونتو 20.04 دسترسی داشته باشید. این سرور باید دارای یک کاربر غیر root با امتیازات sudo و همچنین فایروال فعال باشد.

پیش نیازها

برای پیگیری این آموزش ، باید به سرور اوبونتو 20.04 دسترسی داشته باشید. این سرور باید دارای یک کاربر غیر root با امتیازات sudo و همچنین فایروال فعال باشد. برای کمک به تنظیم این ، راهنمای راه اندازی سرور اولیه ما برای اوبونتو 20.04 را دنبال کنید.

مرحله 1 – ایجاد یک کاربر جدید

ابتدا ، یک کاربر جدید ایجاد کنید که فقط اجازه انتقال فایل به سرور را دارد. در اینجا ، ما از نام کاربری sammyfiles استفاده می کنیم ، اما شما می توانید از هر نام کاربری که دوست دارید استفاده کنید:

sudo adduser sammyfiles

از شما خواسته می شود که یک رمز عبور برای حساب ایجاد کنید ، و سپس اطلاعاتی در مورد کاربر وارد کنید. اطلاعات کاربر اختیاری است ، بنابراین می توانید ENTER را فشار دهید تا آن فیلدها خالی بمانند.

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

مرحله 2 – ایجاد یک دایرکتوری برای انتقال فایل

برای محدود کردن دسترسی SFTP به یک دایرکتوری ، ابتدا باید مطمئن شوید که دایرکتوری با الزامات مجوزهای سرور SSH مطابقت دارد ، که بسیار خاص هستند.

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

روشهای مختلفی برای حل این مشکل مالکیت وجود دارد. در این آموزش ، شما از/var/sftp/uploads به عنوان پوشه بارگذاری هدف استفاده می کنید . /var/sftp متعلق به root است و توسط سایر کاربران قابل نوشتن نخواهد بود. زیر شاخه/var/sftp/uploads متعلق به sammyfiles است ، به طوری که کاربر می تواند فایل ها را در آن بارگذاری کند.

ابتدا دایرکتوری ها را ایجاد کنید:

sudo mkdir -p /var/sftp/uploads

 /var /sftp را روی root تنظیم کنید:

sudo chown root:root /var/sftp

به همان دایرکتوری مجوز نوشتن root بدهید و به سایر کاربران فقط حق خواندن و اجرا را بدهید:

sudo chmod 755 /var/sftp

مالکیت فهرست بارگذاری ها را به کاربری که به تازگی ایجاد کرده اید تغییر دهید. دستور زیر مجدداً از مثال کاربر و گروه sammyfiles استفاده می کند ، بنابراین اگر نام کاربری دیگر را ایجاد کردید ، این مورد را تغییر دهید:

sudo chown sammyfiles:sammyfiles /var/sftp/uploads

اکنون که ساختار دایرکتوری برقرار است ، می توانید خود سرور SSH را پیکربندی کنید.

مرحله 3 – محدود کردن دسترسی به یک دایرکتوری

در این مرحله ، پیکربندی سرور SSH را تغییر می دهید تا دسترسی ترمینال برای sammyfiles ممنوع شود ، اما اجازه انتقال فایل را می دهد.

فایل پیکربندی سرور SSH را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید:

sudo nano /etc/ssh/sshd_config

به پایین فایل بروید و قطعه پیکربندی زیر را اضافه کنید:

/etc/ssh/sshd_config
Match User sammyfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

در اینجا هر دستورالعمل انجام می دهد:

  • Match User به سرور SSH می گوید دستورات زیر را فقط برای کاربر مشخص شده اعمال کند. در اینجا ، sammyfiles را مشخص می کنیم. مجدداً ، مطمئن شوید که این نام را در صورت متفاوت با نام کاربر خود به روز کنید.
  • ForceCommand داخلی-sftp سرور SSH را مجبور می کند تا سرور SFTP را هنگام ورود اجرا کند و دسترسی به پوسته را ممنوع می کند.
  • PasswordAuthentication بله اجازه احراز هویت رمز عبور را برای این کاربر می دهد.
  • ChrootDirectory/var/sftp/تضمین می کند که کاربر اجازه دسترسی به هر چیزی فراتر از فهرست/var/sftp را نخواهد داشت.
  • AllowAgentForwarding شماره ، AllowTcpForwarding شماره. و X11Forwarding به ترتیب حمل و نقل پورت ، تونل زنی و حمل و نقل X11 را برای این کاربر غیرفعال نمی کند.

این مجموعه دستورات ، با Match User شروع می شود ، می تواند برای کاربران مختلف نیز کپی و تکرار شود. مطمئن شوید که نام کاربری را در خط Match User بر این اساس تغییر دهید.

پس از افزودن این خطوط ، فایل را ذخیره و ببندید. اگر از نانو استفاده می کنید ، می توانید این کار را با فشار دادن CTRL + X و سپس Y و سپس ENTER انجام دهید.

برای اعمال تغییرات پیکربندی ، سرویس را راه اندازی مجدد کنید:

sudo systemctl restart sshd

شما اکنون سرور SSH را طوری پیکربندی کرده اید که دسترسی به انتقال فایل را فقط برای sammyfiles محدود کند. آخرین مرحله آزمایش پیکربندی برای اطمینان از عملکرد مناسب آن است.

مرحله 4 – تأیید پیکربندی

اجازه دهید اطمینان حاصل کنیم که کاربر جدید sammyfiles ما فقط می تواند فایل ها را منتقل کند. همانطور که قبلاً ذکر شد ، SFTP برای انتقال فایل بین ماشین ها استفاده می شود. می توانید با آزمایش انتقال بین دستگاه محلی و سرور خود ، این کار را تأیید کنید.

ابتدا سعی کنید به عنوان کاربری که در مرحله 1 ایجاد کرده اید وارد سرور خود شوید زیرا به دلیل تنظیماتی که به فایل پیکربندی SSH اضافه کرده اید ، این امکان پذیر نخواهد بود:

ssh sammyfiles@your_server_ip

قبل از بازگشت به درخواست اولیه ، پیام زیر را دریافت خواهید کرد:

OutputThis service allows sftp connections only.
Connection to your_server_ip closed.

این بدان معناست که فایل sammyfiles دیگر نمی تواند با استفاده از SSH به پوسته سرور دسترسی پیدا کند.

در مرحله بعد ، بررسی کنید که آیا کاربر می تواند با موفقیت به SFTP برای انتقال فایل دسترسی پیدا کند:

sftp sammyfiles@your_server_ip

به جای پیغام خطا، این دستور یک پیام ورود موفق با یک اعلان تعاملی ایجاد می کند:

Output

OutputConnected to your_server_ip
sftp>

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

sftp>ls

با این کار پوشه بارگذاری هایی که در مرحله قبل ایجاد شده بود نشان داده می شود و شما را به دستور sftp> بر می گرداند:

Output
uploads

برای تأیید اینکه کاربر واقعاً به این فهرست محدود شده است و نمی تواند به هیچ دایرکتوری قبل از آن دسترسی داشته باشد ، می توانید دایرکتوری را به فهرست قبلی تغییر دهید:

sftp>cd ..

این دستور خطایی نمی دهد اما محتویات فهرست را مانند قبل بدون هیچ تغییری لیست می کند و ثابت می کند که کاربر قادر به تغییر در فهرست اصلی نبوده است.

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

نتیجه

شما یک کاربر را فقط برای دسترسی به SFTP به یک دایرکتوری روی سرور بدون دسترسی کامل به پوسته محدود کرده اید. در حالی که این آموزش فقط از یک دایرکتوری و یک کاربر برای اختصار استفاده می کند ، می توانید این مثال را به چندین کاربر و چندین دایرکتوری بسط دهید.

سرور SSH طرح های پیکربندی پیچیده تری را امکان پذیر می کند ، از جمله محدود کردن دسترسی به گروه ها یا چندین کاربر به طور همزمان ، یا حتی دسترسی محدود به برخی آدرس های IP.

 


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/