Отдавна се канех да направя статия и на тази тема но не ми стигаше времето. Е сега вече имам такова и да се захванем с работата. Стъпките са следните: - Инсталираме OpenSSH Server, - Активираме сървиса (OpenSSH SSH Server), правим го автоматичен и го стартираме, - Настройваме Firewall, - Създаваме потребители със съответните права върху SFTP услугата, - Тестваме локално дали работи услугата, - Пренасочваме портове за да достъпваме услугата през Интернет. Всички команди се изпълняват от името на Administrator.
Ще инсталираме 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. В зависимост от типа процесор и бита на операционната система се тегли съответния пакет и се инсталира.
Отнова имаме два варианта: ● Ползване на "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 е стартиран и се зарежда автоматично след рестарт на системата.
● Ползване на графична среда
Да направим сървиса да се стартира автоматично.
Да стартираме в текущата сесия сървиса.
Крайния резултат е:
Услугата е стартирана, но защитната стена я спира в мрежата.
Отново два начина. Но за начало да проверим с инсталацията дали нещо не се е записало в защитната стена. ● Ползване на "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)'
● Ползване на графична среда Ако пък ползвате графична среда то правилото трябва да изглежда така:
Самата услуга работи, но кой има право да работи с нея и какви ресурси да се достъпват, ще трябва да се опишат допълнително.
Добрата практика е потребителя който ще достъпва ресурсите на 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 папката в която се логва е домашната му папка но има достъп до всички папки на компютъра. Освен това удостоверяването му не е с име и парола а с публичния ключ.