OpenSSH Сървър

Отдавна се канех да направя статия и на тази тема но не ми стигаше времето. Е сега вече имам такова и да се захванем с работата. Стъпките са следните: - Инсталираме OpenSSH Server, - Активираме сървиса (OpenSSH SSH Server), правим го автоматичен и го стартираме, - Настройваме Firewall, - Създаваме потребители със съответните права върху SFTP услугата, - Тестваме локално дали работи услугата, - Пренасочваме портове за да достъпваме услугата през Интернет. Всички команди се изпълняват от името на Administrator.

Инсталиране на OpenSSH Server

Ще инсталираме OpenSSH сървъра от Apps на самата операционна система Отваряме: В зависимост кой Windows ползвате пътищата са: ● за Windows 11: Settings >> System >> Optional Features >> Add an otional feature >> View features - Появява се поле за писане (Find an avaliable optional feature) - В полето пишем - OpenSSH Server >> появява се наличен сървъра. - Маркираме го като го чекваме в квадратчето и натисаме бутона "Next". След това натискаме бутона "Add". Това ще инсталира услугата SSH Server. ● за Windows 10: Settings >> Apps >> Apps & features >> Optional features >> Add a feature - Появява се поле за писане (Find an avaliable optional feature) - В полето пишем - OpenSSH Server >> появява се наличен сървъра. - Маркираме го като го чекваме в квадратчето и натисаме бутона "Install". Това ще инсталира услугата SSH Server. В %WINDIR%\System32\OpenSSH се инсталираха бинарните файлове на OpenSSH сървъра В %ProgramData%\ssh се инсталираха кофигурационния файл sshd_config и ключа на хоста. ● за Windows 7 или Windows 8 услугата трябва да се инсталира от бинарни пакети. За целта се тегли пакета от https://github.com/PowerShell/Win32-OpenSSH/releases. В зависимост от типа процесор и бита на операционната система се тегли съответния пакет и се инсталира.

Стартиране на услугата OpenSSH Server

Отнова имаме два варианта: ● Ползване на "Power Shell" - Отваряме Powershell като Administrator и пишем:

Get-Service sshd Status Name DisplayName ------ ---- ----------- Stopped sshd OpenSSH SSH Server

Сървиса е спрян. Първо ще го направим автоматично да се стартира със стартиране на системата, а след това ще го стартираме в текущата сесия.

Set-Service sshd -StartupType Automatic Start-Service sshd

Да проверим:

Get-Service sshd | Select-Object Name,Status,StartType Name Status StartType ---- ------ --------- sshd Running Automatic

Сървиса sshd е стартиран и се зарежда автоматично след рестарт на системата.

● Ползване на графична среда

Pic01

Да направим сървиса да се стартира автоматично.

Pic02
Pic03

Да стартираме в текущата сесия сървиса.

Pic04

Крайния резултат е:

Pic05

Услугата е стартирана, но защитната стена я спира в мрежата.

Настройка на защитната стена

Отново два начина. Но за начало да проверим с инсталацията дали нещо не се е записало в защитната стена. ● Ползване на "Power Shell" Да видим какви правила имаме по име.

Get-NetFirewallRule | select DisplayGroup | more

Ще изпиши много правиле, но някъде по-средата има нашето правило. Ако пък не Ви се търси във всичко това можете конкретно да проверите:

Get-NetFirewallRule | select DisplayGroup | Select-String 'OpenSSH' @{DisplayGroup=OpenSSH Server}

Правилото съществува. Да проверим самото правило.

Get-NetFirewallRule -DisplayGroup 'OpenSSH Server' Name : OpenSSH-Server-In-TCP DisplayName : OpenSSH SSH Server (sshd) Description : Inbound rule for OpenSSH SSH Server (sshd) DisplayGroup : OpenSSH Server Group : OpenSSH Server Enabled : True Profile : Private Platform : {} Direction : Inbound Action : Allow EdgeTraversalPolicy : Block LooseSourceMapping : False LocalOnlyMapping : False Owner : PrimaryStatus : OK Status : The rule was parsed successfully from the store. (65536) EnforcementStatus : NotApplicable PolicyStoreSource : PersistentStore PolicyStoreSourceType : Local RemoteDynamicKeywordAddresses : {} PolicyAppId : PackageFamilyName :

Правилото го има но се отнася за профила дефиниран като Private. Обаче не се знае на какъв работим! Вариантите са Domain, Private и Public. Ако не знаете какъв профил ползвате то активирайте го за всички.

Set-NetFirewallRule -DisplayGroup 'OpenSSH Server' -Profile Public,Domain,Private

За накрая едно правило в съкратен вид за съдържанието на OpenSSH Server.

Get-NetFirewallRule -DisplayGroup 'OpenSSH Server' -Direction Inbound | Select-Object -Property DisplayName,Profiles,Enabled,Action DisplayName Profiles Enabled Action ----------- -------- ------- ------- OpenSSH SSH Server (sshd) 7 True Allow

По същата логика можете да проверите правилото за споделяне

Get-NetFirewallRule | select DisplayGroup | Select-String 'Sharing' Get-NetFirewallRule -DisplayGroup 'File and Printer Sharing' -Direction Inbound | Select-Object -Property DisplayName,Profiles,Enabled,Action DisplayName Profiles Enabled Action ----------- -------- ------- ------ File and Printer Sharing (Spooler Service - RPC-EPMAP) 1 False Allow File and Printer Sharing (Spooler Service - RPC) 1 False Allow File and Printer Sharing (NB-Session-In) 1 False Allow File and Printer Sharing (Spooler Service - RPC) 4 True Allow File and Printer Sharing (NB-Datagram-In) 1 False Allow File and Printer Sharing (NB-Name-In) 4 True Allow File and Printer Sharing (Spooler Service - RPC-EPMAP) 4 True Allow File and Printer Sharing (NB-Name-In) 1 False Allow File and Printer Sharing (NB-Session-In) 4 True Allow File and Printer Sharing (Echo Request - ICMPv4-In) 4 True Allow File and Printer Sharing (SMB-In) 4 True Allow File and Printer Sharing (SMB-In) 1 False Allow File and Printer Sharing (Echo Request - ICMPv6-In) 4 True Allow File and Printer Sharing (Echo Request - ICMPv6-In) 1 False Allow File and Printer Sharing (NB-Datagram-In) 4 True Allow File and Printer Sharing (Echo Request - ICMPv4-In) 1 False Allow File and Printer Sharing (LLMNR-UDP-In) 4 True Allow File and Printer Sharing (LLMNR-UDP-In) 3 False Allow File and Printer Sharing (NB-Datagram-In) 2 False Allow File and Printer Sharing (Echo Request - ICMPv6-In) 2 False Allow File and Printer Sharing (SMB-In) 2 False Allow File and Printer Sharing (Echo Request - ICMPv4-In) 2 False Allow File and Printer Sharing (NB-Session-In) 2 False Allow File and Printer Sharing (Spooler Service - RPC-EPMAP) 2 False Allow File and Printer Sharing (NB-Name-In) 2 False Allow File and Printer Sharing (Spooler Service - RPC) 2 False Allow

Обърнете внимание на Profiles. Съдържанието му е 1, 2 3, 4. А в предния пример беше 7. Числото се изгражда по следния начин: Domain = 1 Private = 2 Public = 4 Profiles = Domain + Private + Public Това беше лирическо отклонение. Продължаваме!

Get-NetFirewallRule -DisplayName 'OpenSSH SSH Server (sshd)' Show-NetFirewallRule | Select-String OpenSSH Get-NetFirewallRule -Direction Inbound | Select-Object -Property DisplayName,Profiles,Enabled Get-NetFirewallRule -DisplayName 'OpenSSH SSH Server (sshd)'

● Ползване на графична среда Ако пък ползвате графична среда то правилото трябва да изглежда така:

Pic06

Pic07

Самата услуга работи, но кой има право да работи с нея и какви ресурси да се достъпват, ще трябва да се опишат допълнително.

Потребители за OpenSSH Server

Добрата практика е потребителя който ще достъпва ресурсите на OpenSSH сървъра да не е потребителя с който работите на машината. Това е лоша практика и позволява лесно да се хакне машината. Отваряме конфигурационния файл на OpenSSH сървъра

notepad %ProgramData%\ssh\sshd_config #Match User anoncvs # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server Match User CCCP ChrootDirectory "E:/Arhive" X11Forwarding no AllowTcpForwarding no PermitTTY no ForceCommand internal-sftp PasswordAuthentication no PubkeyAuthentication yes Match User Tachko ChrootDirectory "E:/Arhive" X11Forwarding no AllowTcpForwarding no PermitTTY no ForceCommand internal-sftp PasswordAuthentication yes PubkeyAuthentication no Match Group administrators AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Горе са показани два варианта на достъп с определени потребители с определен начин на удостоверение. Когато се логнеш с Tachko то основната папка до която имаш достъп е E:\Arhive. Tachko е потребител с права на Users. За CCCP, който е Administrator папката в която се логва е домашната му папка но има достъп до всички папки на компютъра. Освен това удостоверяването му не е с име и парола а с публичния ключ.