یوزر No Login در لینوکس ? (دسترسی امن پورت‌فروارد)

سناریویی در نظر بگیرید که دولوپر ما میخواد به دیتابیس دسترسی داشته باشه چه راه حلی پیشنهاد میدین؟

1. پورت دیتابیس رو روی هاست باز کنیم

(که این راه حل اصلا منطقی نیست و بسیار از نظر امنیتی پر ریسکه حتی اگه پسورد براش ست کنید یا پورت دیفالت رو عوض کنید)

2. کلید پابلیک از دولوپر بگیریم و روی روت سرور قرار بدیم

(از روش اول خیلی بهتره ولی بازم با دسترسی ssh ممکنه به اشتباه دستوری روی سرور اجرا بشه و سیستمی از کار بیوفته)

3. تعریف یوزر No Login

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

/etc/passwd

که داخلش خط هایی با ساختار زیر نوشته شده

username:password:UID:GID:GECOS:home_directory:login_shell

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

/etc/shadow

منتقل شد و جای خالی اون با x پر میشه!

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

/bin/bash
/bin/sh

اما یه دیفالت شل که خیلی هم تکرار شده هست با مسیر:

/usr/sbin/nologin

اگه manual شو چک کنیم نوشته:

$man nologin
The nologin command displays a message that an account is not available and exits non-zero.

https://github.com/util-linux/util-linux/blob/master/login-utils/nologin.c

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

حالا ببینیم چطور میشه یه یوزر no login تعریف کرد

sudo useradd -d /home/nologin -s /usr/sbin/nologin -m nologin
echo "key" >> /home/nologin/.ssh/authorized_keys

با دستور useradd (در مورد adduser تحقیق کنید) خیلی راحت بدون اضافه کاری میتونید یه یوزر جدید تعریف کنید با فلگ s بهش شل دیفالت رو پاس بدین حواستون باشه مقدار username رو تغییر بدین

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


ssh -NL LOCAL_PORT:LOCAL_IP:DESTINATION_PORT USER@SSH_SERVER

شما چه راه حلی برای این مسئله داشتین؟

تامام./