Udostępnij za pośrednictwem


Co to jest kontrola stanu SSH dla systemu Windows?

Kontrola stanu SSH umożliwia inspekcję i konfigurowanie stanu zabezpieczeń serwera SSH w systemie Windows Server 2025. Kontrola stanu SSH bezproblemowo integruje się z usługami ładu platformy Azure (Policy, Machine Configuration), dzięki czemu można wykonywać następujące czynności:

  • Zapewnianie zgodności ze standardami SSHD w twojej branży lub organizacji
  • Zmniejszanie obszaru ataków zdalnego zarządzania opartego na dysku SSHD
  • Zapewnianie spójnej konfiguracji sshd w całej flocie pod kątem bezpieczeństwa i produktywności

Zrzut ekranu przedstawiający listę zgodnych testów SSH

Aby ułatwić zademonstrowanie zgodności z audytorami (i pomoc w podjęciu działań w razie potrzeby), każda kontrola zgodności zawiera dowody za pośrednictwem pola Powody wskazujące, w jaki sposób określono zgodność lub niezgodność.

Możesz dostosować parametry SSHD (numer portu, dozwolone grupy itp.) lub użyć wartości domyślnych zasad.

Dokumentacja dotycząca rozpoczynania pracy

Wybieranie zachowania tylko do inspekcji i konfigurowania

Podczas przypisywania zasad kontroli stanu SSH można wybrać zachowanie tylko inspekcji (aka "Audit") lub audit-and-configure (aka "Konfigurowanie").

Definicja zasad Efekt usługi Azure Policy Uwagi na temat tego, czego można oczekiwać
Zachowanie tylko inspekcji **Audit** SSH Posture Control on Windows machines auditIfNotExists Zasady zawierają bardziej restrykcyjne ustawienia w porównaniu z wieloma popularnymi obrazami systemowymi. Na przykład odmowa dostępu do głównego protokołu SSH. W związku z tym należy spodziewać się, że nie są zgłaszane stany zgodne .
Zachowanie inspekcji i konfigurowania **Configure** SSH Posture Control on Windows machines deployIfNotExists Jak pokazano powyżej, początkowo można oczekiwać, że stany niezgodne są zgłaszane. Następnie maszyny zostaną ponownie skonfigurowane tak, aby były zgodne z zasadami, co spowoduje ostateczne stany Zgodne .

W przypadku istniejących maszyn administratorzy zazwyczaj zaczynają od zachowania tylko inspekcji w celu określenia istniejącego stanu i odnajdywania zależności, takich jak konta dozwolone dla automatyzacji systemów. Po porównaniu istniejącej floty z domyślnymi ustawieniami kontroli stanu SSH należy zdecydować, które parametry kontroli stanu SSH mają być dostosowane. Po tej analizie i planowaniu nastąpi przejście do zachowania inspekcji i konfiguracji (z bezpiecznymi rozwiązaniami wdrażania, takimi jak pierścienie).

W przypadku scenariuszy greenfield lub jednorazowych maszyn testowych możesz pominąć tę analizę i przejść bezpośrednio do zachowania inspekcji i konfigurowania, zaczynając od silnych domyślnych ustawień kontroli stanu SSH.

Ostrzeżenie

Przed skonfigurowaniem jakichkolwiek maszyn należy dobrze sprawdzić poprawność nowej konfiguracji. Możesz przypadkowo utracić dostęp do maszyn.

Przykłady przypadkowego zablokowania się:

  • Zastosowane ustawienia autoryzacji netto (kombinacja allowUsers,denyGroups itp.) nie zezwalają na wymagane identyfikatory logowania
  • Konfiguracja port dla dysku SSHD jest blokowana przez inne kontrolki w środowisku (reguły zapory hosta, reguły zapory sieciowej itp.)
    • Aby uniknąć przekraczania granic zespołu przedsiębiorstwa, kontrola stanu SSH skonfigurowała tylko sshd. Obecnie nie próbuje modyfikować reguł zapory na maszynie itp., aby pomieścić skonfigurowany port sshd. Jeśli chcesz omówić te scenariusze z nami, skontaktuj się z nami (zobacz Dodatkowe zasoby poniżej).

Zakres kontroli stanu SSH: reguły, ustawienia domyślne i dostosowywanie

W poniższej tabeli wymieniono elementy, które można przeprowadzić inspekcję lub skonfigurować za pomocą kontroli stanu protokołu SSH. Każdy z nich jest znany jako reguła.

Większość reguł może mieć wartości niestandardowe, za pośrednictwem parametrów przypisania zasad w celu przeprowadzenia inspekcji lub skonfigurowania i inspekcji. Jeśli na przykład standardem w organizacji jest użycie portu 1111 (zamiast 22) dla dysku sshd, należy ustawić odpowiedni parametr w przypisaniu zasad. Te parametry mają identyfikatory, które znajdują się w poniższej tabeli. Zazwyczaj krótka nazwa parametru jest używana programowo (na przykład z az policy assignment create --params ...), podczas gdy dłuższa nazwa wyświetlana parametru jest używana w przepływach pracy witryny Azure Portal.

Podczas dostosowywania wartości należy zapewnić wartości zgodne z plikiem sshd. Na przykład allowGroups pobiera rozdzielaną spacją listę wzorców nazw grup. Aby uzyskać informacje, zobacz stronę sshd_config man. Dokumentacja sshd_config jest również przydatna do zrozumienia innych zachowań dysku SSHD, takich jak sposób przecinania list dozwolonych i odmowy .

Uwaga / Notatka

Aby zachować układ tabeli, niektóre wartości komórek zostały przeniesione do przypisów dolnych poniżej tabeli.

Nazwa reguły Wartość domyślna Nazwa parametru Nazwa wyświetlana parametru
Upewnij się, że dozwolone grupy dla protokołu SSH są skonfigurowane <przypis 1> AllowGroups Dozwolone grupy
Upewnij się, że są skonfigurowani dozwoloni użytkownicy na potrzeby dostępu SSH "" AllowUsers Dozwoloni użytkownicy
Upewnij się, że skonfigurowano metodę uwierzytelniania dla protokołu SSH jakikolwiek AuthenticationMethods Metody uwierzytelniania
Upewnij się, że grupy odmowy dla protokołu SSH są skonfigurowane "" DenyGroups Odrzucone grupy
Upewnij się, że nieskonfigurowani użytkownicy protokołu SSH "" DenyUsers Odmowa użytkowników
Upewnij się, że kod obiektu używany podczas rejestrowania komunikatów dla protokołu SSH jest skonfigurowany LOCAL0 SyslogFacility System rejestrowania
Upewnij się, że skonfigurowano protokół SSH MaxAuthTries 6 MaxAuthTries Maksymalna liczba prób uwierzytelniania
Upewnij się, że skonfigurowano klucz hosta SSH <przypis 2> HostKey Klucz hosta
Upewnij się, że skonfigurowano autoryzowany plik klucza dla protokołu SSH <przypis 3> AuthorizedKeysFile Autoryzowany plik klucza
Upewnij się, że skonfigurowano protokół GSSApiAuthentication dla protokołu SSH fałszywy GSSAPIAuthentication Uwierzytelnianie GSSAPI
Upewnij się, że baner ostrzegawczy SSH jest skonfigurowany <przypis 4> Banner Baner
Upewnij się, że dla protokołu SSH są używane odpowiednie szyfry aes128-ctr,aes192-ctr,aes256-ctr Ciphers Dozwolone szyfry
Upewnij się, że są używane tylko zatwierdzone algorytmy MAC hmac-sha2-256 MACs Algorytmy MAC
Upewnij się, że skonfigurowano element ClientAliveCountMax protokołu SSH 0 ClientAliveCountMax Liczba komunikatów żywcem klienta
Upewnij się, że port SSH jest skonfigurowany 22 Port Port
Upewnij się, że skonfigurowano protokół SSH LoginGraceTime 60 LoginGraceTime Czas prolongaty logowania
Upewnij się, że skonfigurowano protokół SSH ClientAliveInterval 3600 ClientAliveInterval Interwał aktywności klienta
Upewnij się, że skonfigurowano element PermitEmptyPasswords protokołu SSH fałszywy PermitEmptyPasswords Uprawnienie pustego hasła

Przypisy dolne tabeli:

  1. administrators "openssh users"

  2. __PROGRAMDATA__/ssh/ssh_host_ecdsa_key

  3. %programdata%/ssh/administrators_authorized_keys

  4. #######################################################################/r/n/r/nAuthorized access only!/r/n/r/nIf you are not authorized to access or use this system, disconnect now!/r/n/r/n#######################################################################/r/n

    1. Uwaga: ta opcja jest wyświetlana dla użytkowników końcowych jako:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Dodatkowe parametry zasad (inne niż sshd)

Te dodatkowe parametry zasad są dostępne podczas przypisywania zasad. Mają one wpływ na zachowanie przypisywania usługi Azure Policy, a nie ustawienia sshd na maszynach.

Nazwa Opis Wartość domyślna
Dołączanie serwerów połączonych z usługą Arc Wybierając tę opcję, zgadzasz się na naliczanie miesięcznych opłat za połączoną maszynę z usługą Arc. FAŁSZYWY
Efekt Włączanie lub wyłączanie wykonywania tych zasad <Zależy od wyboru zachowania tylko inspekcja a zachowanie inspekcji i konfigurowania>

Definicje zasad? Przypisania zasad? Przypisania gościa? Konfiguracja maszyny? Jak to wszystko pasuje do siebie?

Aby rozpocząć pracę z kontrolą stanu SSH, podstawową akcją jest utworzenie przypisania zasad. Przypisanie zasad łączy definicję zasad (np. "Przeprowadź inspekcję kontroli stanu SSH dla maszyn z systemem Windows") do zakresu (np. "my_factory_3_resource_group").

Podczas korzystania z systemu napotkasz dodatkowe typy zasobów i terminologię, jak podsumowano w poniższej sekcji.

diagram przedstawiający sposób, w jaki przypisanie zasad łączy maszyny z usługą Konfiguracji maszyny za pośrednictwem przypisań gościa

Opis
Definicja zasad W usłudze Policy dane abstrakcyjne opisujące klaster dostępnych zachowań inspekcji i/lub konfiguracji. Na przykład "Przeprowadź inspekcję kontroli stanu SSH na maszynach z systemem Windows".
Przypisanie zasad Łączy abstrakcyjną definicję zasad z konkretnym zakresem, takim jak grupa zasobów. Przypisanie zasad może zawierać parametry i inne właściwości specyficzne dla tego przypisania.
Konfiguracja maszyny Usługa platformy Azure i agentry, które obsługują inspekcję i konfigurowanie ustawień na poziomie systemu operacyjnego.
Przypisanie gościa Zasób, który działa jako trzykierunkowe połączenie między przypisaniem zasad, maszyną i usługą Machine Configuration. Zasady tworzą i monitorują zasoby przypisania gościa zgodnie z potrzebami.
Aby uzyskać więcej informacji na temat terminologii "guest" a "machine", zobacz Dlaczego widzę terminy "Konfiguracja gościa" i "Automanage" w miejscach?
Maszyna Maszyna z obsługą usługi Arc lub maszyna wirtualna platformy Azure.

Informacje o zgodności (implementacje serwera SSH itp.)

Kontrola stanu SSH jest przeznaczona dla głównego nurtu ogólnego przeznaczenia scenariusza systemu Windows Server pojedynczego długotrwałego wystąpienia serwera SSH:

  • którego cykl życia jest zarządzany przez system inicjowania, taki jak Service Control Manager
  • którego zachowanie podlega sshd_config plikowi zgodnemu z zachowaniem dysku sshd protokołu OpenSSH
  • których efektywna konfiguracja/stan są ujawniane przez sshd -T dane wyjściowe, zgodne z zachowaniem dysku sshd protokołu OpenSSH

W przypadku wszystkich obsługiwanych systemów operacyjnych (zobacz poniżej) jest to domyślny przypadek użycia serwera SSH.

W zasadzie maszyna może mieć dowolną liczbę wystąpień serwera SSH uruchomionych z różnym okresem istnienia, na podstawie dowolnej liczby baz kodu i biorąc ich konfigurację z dowolnej liczby miejsc (plików konfiguracji, argumentów wiersza polecenia, parametrów czasu kompilacji itp.). Takie przypadki są obecnie poza zakresem kontroli stanu SSH. Jeśli interesuje Cię taka sytuacja w przyszłości, skontaktuj się z nami , aby omówić.

Kontrola stanu SSH jest przeznaczona do użycia na maszynach z systemem Windows Server 2025 obsługiwanych przez usługę Azure Policy i konfigurację maszyny —

Zgodność z dowolną konkretną maszyną w czasie wykonywania nie może być gwarantowana, ponieważ administratorzy systemu i konstruktorzy obrazów mogą usuwać składniki z systemu operacyjnego, tworzyć systemy plików tylko do odczytu itp.

Zgodność z dyrektywami sshd_config Include

Kontrola stanu SSH próbuje uwzględnić i użyć Include dyrektyw w sshd_config w następujący sposób:

  • W przypadku akcji inspekcji/odczytu: polegaj na -T sshd, aby odzwierciedlić konfigurację sieci z perspektywy sshd — biorąc pod uwagę wszystkie dołączania.
  • W przypadku akcji konfigurowania/zapisu:
    • Połącz nowy plik specyficzny dla kontrolki stanu SSH z sshd_config (jako dołączanie). Następnie umieść wszystkie operacje zapisu w połączonym pliku kontroli stanu SSH. Zwiększa to higienę systemu i możliwość śledzenia zmian systemu.

Zgodność z dyrektywami sshd_config Match

Kontrola stanu SSH jest przeznaczona do inspekcji i konfigurowania zachowania podstawowego dysku SSHD. Nie podejmuje próby interakcji z blokami warunkowymi Match (jeśli istnieją), które mogą stosować różne konfiguracje sshd do określonych populacji.

Zgodność z wieloma wartościami sshd_config

Kontrola stanu SSH nie obsługuje użycia wielu wartości reguły "port", tj. ustawiania reguły "port" na 22 i 33. Ta reguła powinna być skonfigurowana przy użyciu jednej wartości, aby zapewnić odpowiednią funkcjonalność i zgodność dla scenariuszy inspekcji i konfigurowania. Inne reguły, takie jak zezwalanie/odrzucanie użytkowników i szyfrów, mogą mieć wiele wartości, o ile są one dodawane w jednym wierszu.

Przykład:

  • Istniejący plik sshd_config zawiera wiersz "port:22" i inny wiersz "port:33".
  • Zasady inspekcji SSH służą do inspekcji oczekiwanej wartości portu 33.
  • Wynik: Inspekcja może przejść lub zakończyć się nieprzewidywalnie.
  • Zalecenie: nie używaj tej funkcji w takich scenariuszach.

Jak programowo wykonywać zapytania dotyczące wyników?

Za pomocą zapytań usługi Azure Resource Graph (ARG) można zintegrować dane przypisania i stanu z własnymi przepływami pracy. Te przykłady używają Search-AzGraph programu PowerShell do wykonywania zapytania ARG, ale program PowerShell nie jest wymagany. Usługi ARG można używać z wielu punktów wejścia, w tym witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, wywołań REST itp.

  1. Na największej wysokości podsumowania można uzyskać liczniki maszyn na zasobnik stanu zgodności. Przykład:

    $machineCountsQuery = @'
    // SSH machine counts by compliance status
    guestconfigurationresources
    | where name contains "SecureShell"
    | extend complianceStatus = tostring(properties.complianceStatus)
    | summarize machineCount = count() by complianceStatus
    '@
    
    Search-AzGraph -Query $machineCountsQuery
    
    <#
    Sample output from an environment with two machines:
    
    complianceStatus machineCount
    ---------------- ------------
    Pending                     1
    Compliant                   1
    #>
    
  2. Aby przejść do szczegółów w taki sposób, aby zobaczyć ogólny stan zgodności według maszyny, możesz użyć następujących elementów:

    $machinePerRowQuery = @'
    // SSH machine level compliance
    guestconfigurationresources
    | where name contains "SecureShell"
    | project 
     machine = split(properties.targetResourceId,'/')[-1],
     complianceStatus = properties.complianceStatus,
     lastComplianceStatusChecked = properties.lastComplianceStatusChecked
    '@
    
    Search-AzGraph -Query $machinePerRowQuery
    
    <#
    Sample output:
    
    machine     complianceStatus lastComplianceStatusChecked
    -------     ---------------- ---------------------------
    sshdemovm01 Compliant        2/15/2024 11:07:21 PM
    sshdemovm02 Pending          1/1/0001 12:00:00 AM
    #>
    
  3. Aby przejść do szczegółów ustawień po ustawieniu, możesz użyć następujących elementów:

    $settingPerRowQuery = @'
    // SSH rule level detail
    GuestConfigurationResources
    | where name contains "SecureShell"
    | project report = properties.latestAssignmentReport,
     machine = split(properties.targetResourceId,'/')[-1],
     lastComplianceStatusChecked=properties.lastComplianceStatusChecked
    | mv-expand report.resources
    | project machine,
     rule = report_resources.resourceId,
     ruleComplianceStatus = report_resources.complianceStatus,
     ruleComplianceReason = report_resources.reasons[0].phrase,
     lastComplianceStatusChecked
    '@
    
    Search-AzGraph $settingPerRowQuery
    
    <#
    Sample output:
    
    machine     rule                                                  ruleComplianceStatus     ruleComplianceReason
    -------     ---------------                                                  ------               ------
    sshdemovm01 Ensure that the allowed groups for SSH are configured            true            ["administrators","openssh users"] contains the expected values: ["administrators","openssh users"]
    sshdemovm01 Ensure that appropriate ciphers are used for SSH                 true            ["aes128-ctr","aes192-ctr","aes256-ctr"] contains the expected values: ["aes128-ctr","aes192-ctr","aes256-ctr"]
    sshdemovm01 Ensure that the authorized key file for SSH is configured        true            "%programdata%/ssh/administrators_authorized_keys" is equal to "%programdata%/ssh/administrators_authorized_keys"
    sshdemovm01 Ensure that the SSH ClientAliveInterval is configured            true            3600 is equal to 3600
    sshdemovm01 Ensure that the SSH PermitEmptyPasswords is configured           true            false is equal to false
    sshdemovm01 Ensure that the SSH port is configured                           true            22 is equal to 22
    sshdemovm01 Ensure that the SSH MaxAuthTries is configured                   true            6 is equal to 6
    sshdemovm01 Ensure that only approved MAC algorithms are used                true            ["hmac-sha2-256"] contains the expected values: ["hmac-sha2-256"]
    sshdemovm01 Ensure that the SSH HostKey is configured                        true            "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" is equal to "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key"
    sshdemovm01 Ensure that the SSH LoginGraceTime is configured                 true            60 is equal to 60
    #>
    

Dlaczego terminy "Konfiguracja gościa" i "Automanage" są widoczne w miejscach?

Usługa Konfiguracja maszyny jest również znana jako Konfiguracja gościa i jako Konfiguracja maszyny automatycznej. Te nazwy mogą wystąpić podczas interakcji z usługami i dokumentacją. Przykład:

  • W przykładach zapytań usługi Azure Resource Graph w tym artykule tabela danych nosi nazwę guestconfigurationresources.
  • W witrynie Azure Portal przydatny widok do obserwowania wyników nosi nazwę "Przypisania gościa".
  • W witrynie Azure Portal podczas stosowania odpowiedniego rozszerzenia maszyny wirtualnej w celu włączenia konfiguracji maszyny tytuł rozszerzenia to "Automanage Machine Configuration".

Na potrzeby kontroli stanu SSH nie ma znaczącego rozróżnienia między "gościem" i "maszyną". Maszyny z obsługą usługi Arc i maszyny wirtualne platformy Azure kwalifikują się.

Jakie są identyfikatory wbudowanych definicji zasad?

W niektórych przypadkach, takich jak tworzenie przypisań zasad za pomocą interfejsu wiersza polecenia platformy Azure, może być przydatne lub konieczne odwołanie się do definicji zasad według identyfikatora, a nie nazwy wyświetlanej.

nazwa wyświetlana id

| Inspekcja kontroli stanu SSH na maszynach z systemem Windows | ... | | Konfigurowanie kontroli stanu protokołu SSH na maszynach z systemem Windows | ... |

  • Aby uzyskać pomoc techniczną dotyczącą problemów itp., skontaktuj się z pomocą techniczną firmy Microsoft
  • Aby przekazać opinię, omówić żądania funkcji itp.: linux_sec_config_mgmt@service.microsoft.com