SFTP (پروتکل انتقال فایل SSH)، یک پروتکل انتقال فایل بصورت امن بین دو سیستم است. این پروتکل برروی پروتکل SSH اجرا شده و از همان پورت 22 استفاده می‌نماید.

ممکن است شما نیاز داشته باشید که کاربری بتواند به فایل‌های سرور شما دسترسی داشته باشد، اما اجازه اجرای دستور بر روی سرور را به او ندهید!

در این آموزش، نحوه ایجاد یک کاربر با مجوز دسترسی SFTP only (بدون دسترسی ssh) در سیستم‌های CentOS 8 و RedHat 8  شرح داده می‌شود.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه استفاده از دستور SFTP لینوکس برای انتقال فایل ها


در اینجا، فرض بر این است که کاربر می‌تواند تنها با SFTP به سرور متصل شود و اجازه دسترسی به دایرکتوری مشخص شده را دارد. اما او نمی‌تواند با SSH وارد سرور شود. برای ایجاد حساب کاربری sftp only برروی CentOS 8  و RHEL 8، آموزش زیر را دنبال کنید.

 

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

برای دسترسی sftp، ابتدا یک حساب کاربری ایجاد کنید. در اینجا، یک کاربر با نام sftpuser بدون مجوز دسترسی shell ایجاد کرده و یک رمز عبور قوی نیز برای آن کاربر تنظیم می‌نماییم.

$ sudo adduser --shell /bin/false sftpuser
$ sudo passwd sftpuser
Changing password for user sftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

در دستور بالا، قسمت

--shell /bin/false

سیستم عامل را وادار می کند به کاربر فوق دسترسی اجرایی ندهد!

 

مرحله 2: ایجاد دایرکتوری

اکنون، یک ساختار دایرکتوری ایجاد کنید که توسط کاربر sftp قابل دسترسی باشد. در اینجا، دسترسی کاربر ایجاد شده را تنها به این دایرکتوری محدود می‌نماییم. بنابراین کاربر نمی‌تواند به فایل‌های داخل دایرکتوری‌های دیگر دسترسی داشته باشد.

$ sudo mkdir -p /var/sftp/files

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

$ sudo chown sftpuser:sftpuser /var/sftp/files

شما باید مالک و مالک گروه var/sftp را برروی root تنظیم نمایید. کاربر root دسترسی خواندن و نوشتن را برروی آن دارد. اعضای گروه و سایر حساب‌ها نیز تنها مجوزهای خواندن و اجرای آن را دارند.

$ sudo chown root:root /var/sftp
$ sudo chmod 755 /var/sftp

 

مرحله 3: پیکربندی SSH برای SFTP

همانطور که می‌دانیم، SFTP برروی پروتکل SSH اجرا می‌شود؛ بنابراین، ما باید این مورد را در فایل پیکربندی تنظیم نماییم. بدین منظور، فایل پیکربندی SSH را در یک ویرایشگر متن ویرایش کنید.

$ sudo vim /etc/ssh/sshd_config

و در انتهای فایل، تنظیمات زیر را اضافه نمایید.

Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no

تنظیمات را ذخیره کرده و سرویس SSH را مجدداً راه‌اندازی نمایید تا تغییرات اعمال شود.

$ sudo systemctl restart sshd.service

اکنون، سیستم شما آماده پذیرش اتصال sftp only برای حساب ایجاد شده می‌باشد.

بیایید اتصال sftp را تست کرده و همچنین اطمینان حاصل نمایید که کاربر مجوز دسترسی SSH را ندارد.

 

مرحله 4: امتحان اتصال SFTP

در اینجا از FileZilla، برای اتصال به SFTP از سیستم ویندوز استفاده شده است. اما، کاربران لینوکس نیز می‌توانند از Filezilla برای اتصال استفاده کنند.

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

$ sftp sftpuser@sftp.tecadmin.net
Connecting to sftp.tecadmin.net...
sftpuser@sftp.tecadmin.net's password:
sftp>

 

اتصال با FileZilla:

 

این حساب برای اتصال SFTP only تنظیم شده است. بنابراین اگر کاربری سعی کند، از طریق SSH متصل شود، بلافاصله پس از تأیید اعتبار، اتصال او قطع شده و پیام زیر را دریافت می‌کند:

$ ssh sftpuser@sftp.tecadmin.net
sftpuser@sftp.tecadmin.net's password:
This service allows sftp connections only.
Connection to sftp.tecadmin.net closed.

پیام فوق (این سرویس فقط به اتصالات sftp اجازه می‌دهد) نشان می‌دهد که کاربر تنها دسترسی sftp را دارد و نمی‌تواند از طریق SSH به سرور متصل شود.

 

 

منبع:

tecadmin