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

با این حال ، گزینه های بیشتری در رابطه با پیکربندی Demon SSH وجود دارد که می تواند برای افزایش امنیت ، مدیریت اتصالات کاربر و غیره مفید باشد. ما در مورد برخی از گزینه های موجود در اختیار شما بحث خواهیم کرد تا کنترل دقیق تری روی دسترسی SSH داشته باشید. .
ما این مفاهیم را به طور نمونه از Ubuntu 12.04 VPS استفاده خواهیم کرد ، اما هر توزیع مدرن لینوکس باید به روشی مشابه عمل کند.
کاوش در فایل پیکربندی SSHD
منبع اصلی پیکربندی مربوط به Demon SSH در فایل / etc / ssh / sshd_config است. توجه داشته باشید که این با فایل ssh_config متفاوت است ، که پیش فرض سمت مشتری را مشخص می کند.
اکنون فایل را با امتیازات ادمین باز کنید:
sudo nano /etc/ssh/sshd_config

شما یک فایل با ویژگی های کاملاً متفاوت را مشاهده خواهید کرد و خوشبختانه (بسته به توزیع خود) نظرهای زیادی را نیز مشاهده میکنید. در حالی که اکثر توزیع ها کار نسبتاً خوبی برای ایجاد پیش فرض های عاقلانه انجام می دهند ، همچنان جای بهبود و سفارشی سازی وجود دارد.
بیایید به برخی از گزینه هایی که قبلاً در فایل ما در اوبونتو 12.04 تنظیم شده اند بپردازیم:
پورت ها و پروتکل ها
پورت 22: پورتی را که Daemon SSH به دنبال اتصال در آن است ، مشخص می کند. به طور پیش فرض ، اکثر مشتری ها و سرورها در درگاه 22 کار می کنند ، اما تغییر دادن آن به درگاه متفاوت می تواند به طور بالقوه میزان تلاش ورود به سیستم توسط SSH توسط کاربران مخرب را کاهش دهد.
پروتکل 2: SSH از طریق دو نسخه پروتکل بوده است. مگر اینکه به طور خاص نیاز به پشتیبانی مشتریانی داشته باشید که فقط می توانند در پروتکل 1 کار کنند ، توصیه می شود این موارد را رها کنید.
کلیدها و جدایی
HostKey / etc / ssh / ssh_host…: این خطوط کلیدهای هاست را برای سرور مشخص می کنند. از این کلیدها برای شناسایی سرور برای اتصال مشتری استفاده می شود. اگر مشتری قبلاً با سرور ارتباط برقرار کرده باشد ، می تواند از این کلید برای اعتبار سنجی اتصال جدید استفاده کند.
UsePrivilegeSeparation yes: این گزینه به SSH اجازه می دهد تا فرآیندهای کودک را افزایش دهد که فقط امتیازات لازم را برای انجام وظایف خود دارند. این یک ویژگی ایمنی برای جداسازی فرایندها در صورت بهره برداری امنیتی است.
KeyRegenerationInterval and ServerKeyBits: این گزینه ها روی کلید سرور تولید شده برای پروتکل SSH 1 تأثیر می گذارند. اگر خواستار اتصال کانکشن های خود به پروتکل 2 هستید ، لازم نیست که نگران این موضوع باشید.

ورود به سیستم و محدودیت ها
SyslogFacility and LogLevel : این گزینه ها نحوه ورود به سیستم را مشخص می کنند. گزینه اول مربوط به کد تسهیلات برای پیام های logging است و گزینه دوم سطح ورود به سیستم یا میزان جزئیات را می گوید.
LoginGraceTime 120: تعداد ثانیه هایی است که سرور قبل از جدا شدن از مشتری در صورت عدم ورود موفق به سیستم ، منتظر می ماند.
PermitRootLogin yes: این گزینه امکان SSH را با استفاده از حساب root امکان پذیر یا رد می کند. از آنجا که حساب روت یکی از مواردی است که حمله کننده می داند در دستگاه سرور وجود دارد و از آنجا که دسترسی نامحدود به دستگاه را فراهم می کند ، اغلب یک حساب کاربری بسیار هدفمند است. وقتی یک حساب کاربری معمولی را با امتیازات sudo پیکربندی کردید تنظیم این گزینه روی حالت “خیر” توصیه می شود.
StrictModes yes: این به SSH می گوید که از پرونده های پیکربندی سطح کاربر که مجوزهای صحیحی ندارند، چشم پوشی کند. اگر کاربر پرونده های پیکربندی خود را به صورت جهانی قابل خواندن قرار دهد ، پیامدهای امنیتی خواهد داشت. تا زمانی که این مشکل برطرف شود، بهتر است دسترسی برداشته باشد.
IgnoreRhosts and RhostsRSAAuthentication : این گزینه ها مشخص می کند که آیا احراز هویت به سبک rhost پذیرفته خواهد شد یا خیر. این دستور پروتکل 1 است که در مورد پروتکل 2 صدق نمی کند.
HostbasedAuthentication no: این نسخه پروتکل 2 از مورد فوق است. در اصل، اجازه می دهد تا احراز هویت بر اساس میزبان مشتری در حال اتصال انجام شود. معمولاً فقط برای محیط های ایزوله قابل قبول است ، زیرا امکان جعل اطلاعات منبع وجود دارد. شما می توانید اطلاعات میزبان را در یک فایل /etc/ssh/shosts.equiv یا فایل /etc/hosts.equiv مشخص کنید. این خارج از محدوده این راهنما میباشد.
PermitEmptyPasswords no: این گزینه دسترسی SSH را برای حساب هایی که رمز عبور ندارند در هنگام تأیید رمز عبور محدود می کند. این می تواند یک خطر امنیتی بزرگ باشد و تقریباً هرگز نباید آن را تغییر دهید.
ChallengeResponseAuthentication: این خط یک نوع تأیید پاسخ-چالش را فعال یا غیرفعال می کند که می توان از طریق PAM پیکربندی کرد. این بحث خارج از محدوده این راهنما است.

نمایش
X11Forwarding yes: این گزینه به شما امکان می دهد تا واسط های گرافیکی X11کاربر را برای برنامه های روی سرور به دستگاه مشتری منتقل کنید. این بدان معنی است که می توانید یک برنامه گرافیکی را روی یک سرور شروع کنید، و با آن در سیستم مشتری تعامل داشته باشید. مشتری باید یک سیستم X در دسترس داشته باشد. می توانید این موارد را در OS X نصب کنید و هر لینوکس دسکتاپی این قابلیت را دارد.
X11DisplayOffset 10: این یک آفست برای شماره نمایشگر sshd برای ارسال X11 است. این افست اجازه می دهد تا SSH باعث ایجاد پنجره های X11 شود تا از درگیری با سرور X موجود جلوگیری کند.
PrintMotd no: این گزینه مشخص می کند که Daemon SSH نباید پیام فایل روز را بخواند و نمایش دهد. این گاهی اوقات توسط خود shell خوانده می شود ، بنابراین ممکن است شما نیاز به تغییر پرونده های ترجیحی shell خود نیز داشته باشید.
PrintLastLog yes: این به Daemon SSH می گوید تا اطلاعات آخرین باری که وارد سیستم شدید را چاپ کند.

اتصال و محیط
TCPKeepAlive yes: مشخص می کند که آیا پیام های نگهدارنده TCP به دستگاه مشتری ارسال می شوند. این می تواند به سرور در هنگام بروز مشکل و قطع اتصال کمک کند. اگر این گزینه غیرفعال باشد ، در صورت بروز مشکل در شبکه ، اتصالات از بین نمی روند ، که می تواند خوب باشد ، اما همچنین بدان معنی است که ارتباط کاربران می تواند از هم قطع شود و همچنان به قفل کردن منابع ادامه دهند.
AcceptEnv LANG LC_ *: این گزینه به شما امکان می دهد متغیرهای محیطی خاصی را از دستگاه مشتری قبول کنید. در این مثال خاص ، ما متغیرهای زبان را می پذیریم ، که می تواند به بخش shell کمک کند که به درستی برای مشتری نمایش داده شود.
Subsystem sftp /usr/lib/openssh/sftp-serve: زیر سیستم های خارجی را که می توان با SSH استفاده کرد پیکربندی می کند. در این مثال سرور SFTP و مسیر اجرای آن مشخص شده است.
UsePAM yes: این مشخص می کند که PAM (ماژول های تأیید قابل اتصال) برای کمک به تأیید اعتبار کاربران در دسترس خواهد بود.
این امر به گزینه های پیش فرض فعال شده دستگاه Ubuntu 12.04 ما احتیاج دارد. در مرحله بعدی، بگذارید درباره برخی گزینه های دیگر صحبت کنیم که ممکن است برای تنظیم یا تغییر برای شما مفید باشد.
سایر گزینه های SSHD
چندین گزینه دیگر وجود دارد که می توانیم برای Daemon SSH خود تعیین کنیم. برخی از این موارد ممکن است فوراً برای شما مفید باشد ، در حالی که برخی دیگر فقط در شرایط خاص می توانند مفید باشند. ما در اینجا به همه موارد نمی پردازیم ، اما برخی از موارد مفید را مرور خواهیم کرد.
فیلتر کاربری و گروهی
برخی گزینه ها به شما امکان می دهند دقیقاً کنترل کنید که کاربران از چه طریق امکان ورود به سیستم از طریق SSH را دارند. این گزینه ها باید به صورت انحصاری در نظر گرفته شوند. به عنوان مثال ، گزینه AllowUsers به ​​این معنی است که از دسترسی سایر کاربران جلوگیری می شود.
AllowGroups: این گزینه به شما امکان می دهد نام گروه ها را روی سرور مشخص کنید. فقط کاربرانی که عضو یکی از این گروه ها هستند ، می توانند وارد سیستم شوند. این یک لیست سفید از گروه هایی ایجاد می کند که باید دسترسی داشته باشند.
AllowUsers: مشابه گزینه فوق است ، اما کاربران خاصی را که مجاز به ورود به سیستم هستند مشخص می کند. هر کاربر که در این لیست نباشد قادر به ورود به سیستم نخواهد بود. و به عنوان یک لیست سفید کاربری کار می کند.
DenyGroups: این گزینه یک لیست سیاه از گروههایی را ایجاد می کند که نباید اجازه ورود به سیستم را داشته باشند. کاربرانی که به این گروه ها تعلق دارند ، اجازه دسترسی ندارند.
DenyUsers: این یک لیست سیاه برای کاربران است. به طور خاص مشخص می کند که به کدام یک از کاربران امکان ورود به سیستم از طریق SSH داده نمی شود.
علاوه بر این ، برخی از گزینه های محدود کننده دیگر نیز در دسترس هستند. اینها را می توان در رابطه با هر یک از گزینه های فوق استفاده کرد:
Match: این گزینه امکان کنترل بسیار دقیق تر بر روی افرادی را دارد که تحت چه شرایطی می توانند تأیید کنند. این مجموعه گزینه های متفاوتی را مشخص می کند که هنگام اتصال یک کاربر یا گروه خاص باید از آنها استفاده شود. ما بعداً با جزئیات بیشتری در مورد این موضوع بحث خواهیم کرد.
RevokenKeys: این به شما امکان می دهد لیستی از کلیدهای عمومی ابطال شده را مشخص کنید. این کار از ورود کلیدهای ذکر شده برای ورود به سیستم جلوگیری می کند.
گزینه های متفرقه
گزینه هایی وجود دارد که می توانیم از آنها استفاده کنیم تا پیکربندی کنیم چه ترافیک شبکه ای را Daemon SSH به آن توجه خواهد کرد:
AddressFamily: این گزینه مشخص می کند که چه نوع آدرس هایی را انتخاب می کنید که اتصالات آن ها را بپذیرید. به طور پیش فرض ، مقدار “هر” است ، اما می توانید “inet” را برای آدرسهای IPv4 یا “inet6” را برای آدرسهای IPv6 قرار دهید.
ListenAddress: این گزینه به شما امکان می دهد تا به Daemon SSH بگویید که در یک آدرس و پورت خاص گوش کند. Daemon به طور پیش فرض تمام آدرسهایی را که برای این دستگاه پیکربندی شده است گوش می دهد.
انواع دیگر گزینه هایی که در دسترس هستند عبارتند از مواردی که برای تنظیم تأیید هویت مبتنی بر گواهینامه ، گزینه های محدود کننده اتصال مانند ClientAliveCountMax و ClientAliveInterval و گزینه هایی مانند ChrootDirectory استفاده می شود ، که می تواند برای قفل کردن ورود به سیستم کاربر به یک فضای خاص و محیط از پیش تنظیم شده Chroot استفاده شود. .
محدود کردن ورود به سیستم کاربر
ما در بالا به برخی از ابزارهایی که شما باید دسترسی کاربران و گروه ها را محدود کنید ، اشاره کردیم. بیایید کمی با جزئیات بیشتر بحث کنیم.
ابتدایی ترین دستور برای استفاده از این موارد چیزی شبیه به زیر است:
AllowUsers demouser fakeuser madeupuser

همانطور که مشاهده می کنید، ما می توانیم کاربرهای مختلفی را از هم جدا کنیم که در هر یک از این دستورالعمل ها قرار دارند.
ما همچنین می توانیم از wild cards استفاده کرده و ورودی ها را نفی کنیم. به عنوان مثال ، اگر می خواستیم به همه کاربرها به جز “جان” اجازه ورود به سیستم بدهیم ، می توانیم چیزی شبیه به این را امتحان کنیم:
AllowUsers * !john
این نمونه خاص احتمالاً با خط DenyUsers بهتر بیان می شود:

DenyUsers john
ما همچنین می توانیم از علامت ? برای مطابقت دقیق با یک حرف استفاده کنیم، به عنوان مثال میتوانیم از دستور زیر استفاده کنیم:

AllowUsers ?im

این کار اجازه می دهد تا از حساب هایی مانند “tim” ، “jim” یا “vim” وارد شوید.
با این حال ما می توانیم مشخص تر شویم. در هر دو مشخصات کاربر ، می توانیم از فرم کاربر user@hostname استفاده کنیم تا ورود به مکانهای منبع خاص مشتری محدود شود. به عنوان مثال ، شما می توانید چیزی مانند دستور زیر را تایپ کنید:
AllowUsers demouser@host1.com fakeuser

این کار باعث می شود “fakeuser” از هرجای دیگری وارد سیستم شود ، اما فقط به “demouser” اجازه می دهد تا از یک هاست مشخص وارد شود.
ما همچنین می توانیم دسترسی را به صورت میزبان به میزبان در خارج از فایل sshd_config از طریق بسته های TCP محدود کنیم. این از طریق فایل های /etc/hosts.allow و /etc/hosts.deny پیکربندی میشود.
به عنوان مثال ، ما می توانیم دسترسی را به طور خاص بر اساس ترافیک SSH با اضافه کردن خط هایی مانند زیر به فایل hosts.allow محدود کنیم:
sshd: .example.com

با فرض اینکه ما در فایل hosts.deny یک خط همراه داریم که به صورت زیر است:
sshd: ALL
این کار ورود به سیستم را فقط برای افرادی که از example.com یا یک زیر دامنه وارد می شوند محدود می کند.
استفاده از گزینه های مطابقت برای اضافه کردن استثنائات
ما می توانیم با استفاده از گزینه های “match” گزینه های خود را حتی بیشتر کنترل کنیم. گزینه های مطابقت با مشخص کردن الگوی معیاری کار میکنند که تصمیم می گیرند که گزینه های زیر استفاده خواهد شد یا خیر.
ما یک مطابقت را با استفاده از گزینه Match و سپس مشخص کردن جفت های معیاری با ارزش کلیدی شروع می کنیم. کلیدهای موجود “کاربر” ، “گروه” ، “میزبان” و “آدرس” هستند. ما می توانیم معیارها را با فاصله جدا کنیم و الگوها (user1، user2) را با کاما از هم جدا کنیم. ما همچنین می توانیم از wild cards و خنثی سازی استفاده کنیم:
Match User !demouser,!fakeuser Group sshusers Host *.example.com

خط بالا فقط در صورتی مطابقت دارد که کاربر demouser یا fakeuser نباشد ، در صورتی که کاربر عضو گروه sshusers باشد و در صورت اتصال آن از example.com یا یک زیر دامنه استفاده کند.
معیارهای “آدرس” می توانند از نماد net Cask CIDR استفاده کنند.
گزینه هایی که از مشخصات مطابقت پیروی می کنند بصورت مشروط اعمال می شوند. دامنه این گزینه های شرطی تا پایان پرونده یا مشخصات مطابقت بعدی است. به همین دلیل توصیه می شود مقادیر پیش فرض خود را در بالای فایل قرار دهید و استثنائات خود را در انتهای آن قرار دهید.

به دلیل این بلوک شرطی ، گزینه های موجود تحت مطابقت اغلب بیان میکنند که فقط در انطباق فوق اعمال می شوند. به عنوان مثال ، شرط فوق می تواند بلوکی مانند این تحت آن داشته باشد:
Match User !demouser,!fakeuser Group sshusers Host *.example.com
AuthorizedKeysFile /sshusers/keys/%u
PasswordAuthentication yes
X11Forwarding
X11DisplayOffset 15

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

برای دیدن لیست گزینه های موجود ، بخش “مطابقت” را جستجو کنید.
نتیجه
همانطور که مشاهده می کنید ، می توانید مقادیر زیادی را در سمت سرور SSH تنظیم کنید که در توانایی کاربران برای ورود به سیستم و کیفیت تجربه آنها تأثیر می گذارد. اطمینان حاصل کنید که تغییرات خود را قبل از اجرای مقیاس گسترده با دقت آزمایش کنید تا خطاها را پیدا کنید و اطمینان حاصل کنید که محدودیت های شما به طور تصادفی روی تعداد کمی از کاربران یا تعداد خیلی زیادی تأثیر نمگذارد.
آشنایی با فایل / etc / ssh / sshd_config اولین قدم بزرگ در جهت درک چگونگی کنترل دقیق دسترسی به سرور شماست. و یک مهارت مهم برای هر مدیر سیستم لینوکس میباشد.