SecureString

Windows_PowerShell_iconscenariusz użycia

używanie SecureStringów w PS jest poniekąd wymuszone – w taki sposób przechowywane są hasła, np. w credentialsach:

PS C:\_ScriptZ> $cred=Get-Credential

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential
PS C:\_ScriptZ> $cred|gm


   TypeName: System.Management.Automation.PSCredential

Name                 MemberType Definition
----                 ---------- ----------
Equals               Method     bool Equals(System.Object obj)
GetHashCode          Method     int GetHashCode()
GetNetworkCredential Method     System.Net.NetworkCredential GetNetworkCredential()
GetObjectData        Method     void GetObjectData(System.Runtime.Serialization.SerializationInfo info,
GetType              Method     type GetType()
ToString             Method     string ToString()
Password             Property   securestring Password {get;}
UserName             Property   string UserName {get;}

SecureString przydaje się do przechowywania haseł, używanych w skryptach – np. skrypt do automatycznego podpięcia licencji office365, który wymaga podania credsów użytkownika z uprawnieniami co najmniej 'User Manager’. można hasło zapisać w pliq jako SS a potem wewnątrz skryptu je odczytać i użyć do złożenia credsów:

PS C:\_ScritpZ>ConvertTo-SecureString -String '<HASLO>' -AsPlainText -Force|ConvertFrom-SecureString|out-file c:\_scriptz\pa.ss

PS C:\_ScriptZ> cat .\pa.ss
01000000d08c9ddf0115d1118c7a00c04fc297eb010000006e58e62b318004439a915f2500cbb1c20000000002000000000003660000c0000000100
00000de193527adebd1535b4b243a2dda67de0000000004800000a000000010000000c6781a7fe77fce164d1fcaa0fc68c30f10000000210bc43ae2
3f49acfb0eae607c0b48341400000043264bf254fc25798b847e94d9ea7ea678051bb2

PS C:\_ScritpZ>$ssPassword=Get-Content c:\_scriptz\pa.ss|ConvertTo-SecureString

PS C:\_ScritpZ>$oCreds=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "usermanager@w-files.onmicrosoft.com",$ssPassword

bezpieczeństwo SS

rodzą się natychmiast pytania o bezpieczeństwo SecureString – czy takie hasło da się odszyfrować i jak łatwo? hasło jest szyfrowane kluczem, który generowany jest na podstawie hasła użytkownika, a masterkey jest przechowywany na komputerze lokalnym. odpowiedzialne jest za to DPAPI – tutaj znajdziecie więcej informacji. klucz jest przechowywany w $env:USERPROFILE\Application Data\Microsoft\Protect\<GUID>. w efekcie

  • plik jest nie do odczytania na innej maszynie
  • plik jest nie do odczytania przez innego użytkownika

czyli nic da 'wykradzenie’ pliq lub użycie go w kontexcie innego użytkownika.

są potencjalnie metody potrafiące złamać klucz [np. hawkeye inject], ale nie znalazłem praktycznego opisu i na pewno nie są to metody na poziomie script kiddie. można zatem uznać, że jest to świetne narzędzie dla skryptów, które wymagają podania hasła.

addendum

na koniec – jak  odczytać hasło zapisane jako SS? podam dwie metody – dla devów i dla opsów (;

dla devów:

PS C:\_ScriptZ> $ss=cat .\pa.ss|ConvertTo-SecureString
PS C:\_ScriptZ> [System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($ss))
<HASLO>

dla opsów:

po zbudowaniu obiektu credential z wcześniejszego przykładu, mamy zmienną $creds

PS C:\_ScriptZ> $creds.GetNetworkCredential().password
<HASLO>

eN.

port ping

repairjak szybko sprawdzić czy dostępna jest już konkretna usługa/aplikacja na hoście? najlepiej sprawdzić czy port jest otwarty. można użyć telnetu ale jeśli czekamy na usługę i chcemy wykonywać testy co jakiś czas, aż do sqtq – będzie to bardzo denerwujące, ponieważ telnet jest bardzo siermiężny.

lepiej jest pingować port – co można uzyskać np, przy pomocy psping z sysinternalsowych narzędzi.

PS C:\Program Files\Sysinternals> .\psping.exe 192.168.1.4:3389

PsPing v2.01 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 192.168.1.4:3389:
5 iterations (warmup 1) connecting test:
Connecting to 192.168.1.4:3389 (warmup): 67.36ms
Connecting to 192.168.1.4:3389: 56.57ms
Connecting to 192.168.1.4:3389: 41.25ms
Connecting to 192.168.1.4:3389: 51.04ms
Connecting to 192.168.1.4:3389: 41.95ms

TCP connect statistics for 192.168.1.4:3389:
Sent = 4, Received = 4, Lost = 0 (0% loss),
Minimum = 41.25ms, Maximum = 56.57ms, Average = 47.70ms

eN.

NoDrive for business

driveflagowy produkt chmurowy do pracy grupowej – przestrzeń plików OneDrive… rozwiązanie na rynq – od wielu lat. powstał z usługi groove, którą pamiętam jeszcze z 2oo7. korzystał z niej chyba tylko eMeS (; potem przerodził się w SkyDrive, a za chwilę w OneDrive, ze względu na roszczenia do nazwy przez brytyjską stację. została nazwa klienta – groove.exe.

OneDrive został zintegrowany z w8, i za chwilę doczekał się nowej, szaleńczej nazwy – OneDrive for Business New Generation Sync Client. sam akronim mógłby być wyrazem – ODfBNGSC [ O_o’ ] . literek jak w podręczniq do nauki alfabetu, a co potrafi ten klient? ponoć charaktryzuje się 'większą wydajnościa i stabilnością’.

w końcu opublikowano oficjalną roadmapę dla klienta NGSC opisującą jakie to mega-ficzery pojawią się w najbliższym update, dostępnym w ciągu najbliższych 2tyg. ale.. ale najważniejszy zapowiedziany jest dopiero na jesień!

SharePoint Document Library Sync—We’re adding SharePoint Online document library sync, starting with a preview in the third quarter of 2016, with general release by the end of 2016.
na tą chwilę aby korzystać z biblioteki współdzielonej, konieczne jest skorzystanie ze starego klienta groove. tutaj jest kilka dziwnych scenariuszy – niby klient załączony jest do office 2o16… ale czasem nie jest. nie chce mi się dochodzić kiedy i jak to działa, bo strawiłem godziny na reinstalację wszystkiego kilqkrotnie. komponent instalujący ’OneDrive for Business for office 2o13’ zajmuje 1GB a co więcej – wydaje się, że nowy office 2k16 nie jest z nim kompatybilny w efekcie czego jedynym sposobem jest otwieranie dokumentów via przeglądarka Web. tak mi paraliżowało to pracę że finalnie przeinstaowałem cały system [LoL – jak w 9o’], bez instalacji dodatkowego komponentu wskazanego w linq. i to jest właśnie największa bolączka wszystkich dotychczasowych wersji tego klienta: brak możliwości debugowania i reperacji.
nie ma również na ten temat w zapowiedziach – ani debugowania, ani logowania, ani reperacji błędów synchronizacji. być może przestanie to być takie krytyczne, jeśli klient zacznie w końcu działać porządnie, ale obecnie sytuacja jest żenująca. w przeważającej ilości przypadqw, jedynym sposobem naprawy problemów synchronizacji jest jej wyłączenie i powtórne włączenie, co wiąże się założeniem kolejnego katalogu i powtórnej, pełnej synchronizacji. w przypadq jeśli biblioteka ma kilka-kilkanaście GB to nie jest zabieg miły ani przyjemy. podobnie sama instalacja potrafi tak namotać, że nie wystarczy nawet przeinstalowanie pojedynczych komponentów.
pozostaje być cierpliwym i do końca roku przecierpieć i liczyć na to, że ODfBNGSC będzie w końcu działał jak należy, bo  wpływ na efektywność pracy w obecnej postaci, jest olbrzymi /:
eN.

zdrada z SSO do chmury

Simple-Cloud-Iconscenariusz: aplikacje office365 + ADFS. wdrożona integracja.

realizacja SSO: da się skonfigurować całe rozwiązanie tak, żeby z dowolnej przeglądarki mieć logowanie SSO – automatyczne przekazanie tokena, bez konieczności podawania hasła. wymaga to trochę gimnastyki, ale da się zmusić zarówno Edge, Chrome oraz FF. innych nie testowałem, ale nie widzę powodów, dla których by nie miało działać.

linki może kiedyś w innym wpisie a tymczasem coś, o czym rzadziej się mówi – czyli zdrady z tym związane.

  1. SSO – czyżby? nie tak do końca. ze względu na przekierowania i obsługę domeny, trzeba wpisać przynajmniej nazwę użytkownika. owszem – jeśli z rozwiązania się korzysta, to nazwa jest zapamiętana i wystarczy kliknąć. jeśli użytkownik posiada konto w o365 o takiej samej nazwie jak liveID to dochodzi ekran wyboru work account\live id.
    tylko IE da się zmusić do tego, żeby w pełni automatycznie przekazywał token logowania – choć nie jestem pewien czy nie ma tu też jakiegoś scenariusza z wyjątkiem.
  2. kiedy skonfigurowany jest pełny automat, to dla osób posiadających kilka kont – np. konto administracyjne, jest pewna zdrada: choćby na ekranie logowania w ADFS po stronie chmury wpisać konto administracyjne, po przekierowaniu na lokalnego ADFS pobrany już zostanie token z lokalnej sesji i zostaniemy zalogowani na konto użytkownika, w którego kontekście właśnie pracujemy. w praktyce oznacza to, że dla osób z dostępem administracyjnym, są dwie metody:
    1. maszyna wirtualna poza domeną/inny login
    2. konfiguracja SSO tylko dla wybranych przeglądarek tak, żeby mieć jakiś wybór do logowania innym kontem

niby oczywiste ale … spodziewałem się że wystarczy pornomode. ale również w trybie private token jest automatycznie pobierany i przekazywany. ot taka ciekawostka.

eN.

dopełnienie zerami

Windows_PowerShell_iconprzykładowy scenariusz: mamy notację nazewniczą serwerów ze stałym prefixem 'server’ oraz jego kolejny numer – liczba z dopełnieniem zerami do trzech znaków. np. server001, server002[…],server011[…],server12o[…]

problem: jak skryptem łatwo wygenerować takie nazwy?

rozwiązanie: i na to oczywiście jest skrót/automat w PS (: potrafi to funkcja 'toString’ – wystarczy jako parametr podać ilość zer odpowiadająca dopełnieniu.

PS> 1..200|%{ 'server'+$_.toString("000") }
server001
server002
[...]
server011
server012
[...]
server099
server100
[...]

eN.