Ubuntu/Debian: Eigene Rootzertifikate importieren und vertrauen

Um Zertifikatsfehler bei eigenen CAs zu beseitigen muss man das Root CA Zertifikat dem Zertifikatsstore des Betriebssystems bekannt machen.

Das Root CA Zertifikat muss im Ordner /usr/share/ca-certificates abgelegt werden mit der Endung .crt (nicht .pem). Man sollte einen passenden und aussagekräfigen Namen für die Datei vergeben. Bei Ubuntu sind zusätzlich die Zertifikate in verschiedene Unterordner einsortiert. Wenn es mehrere sind kann man auch noch einen eigenen Ordner erstellen.

root@foobar:/usr/share/ca-certificates# ls -la
insgesamt 52
drwxr-xr-x  11 root root  4096 2011-07-29 12:29 .
drwxr-xr-x 101 root root  4096 2011-07-28 11:10 ..
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 brasil.gov.br
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 cacert.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 debconf.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 gouv.fr
drwxr-xr-x   2 root root 12288 2011-07-28 10:16 mozilla
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 signet.pl
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 spi-inc.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 telesec.de

Nach dem Ablegen des Zertifikats muss man dieses noch installieren. Dazu ist das Kommando „dpkg-reconfigure ca-certificates“ auszuführen. Es öffnet sich ein Menü, hier ist sicherheitshalber „Fragen“ auszuwählen.

 ┌──────────────────────────────┤ ca-certificates configuration ├───────────────────────────────┐
 │ Dieses Paket kann neue Zertifikate von CAs (Zertifizierungsstellen) installieren, wenn ein   │
 │ Upgrade durchgeführt wird. Sie sollten solche neuen CA-Zertifikate vielleicht prüfen und     │
 │ nur Zertifikate auswählen, denen Sie vertrauen.                                              │
 │                                                                                              │
 │  - Ja    : neuen CA-Zertifikaten wird vertraut und sie werden installiert;                   │
 │  - Nein  : neue CA-Zertifikate werden standardmäßig nicht installiert;                       │
 │  - Fragen: fragt bei jedem neuen CA-Zertifikat nach.                                         │
 │                                                                                              │
 │ Neuen Zertifikaten von Zertifizierungsstellen vertrauen?                                     │
 │                                                                                              │
 │                                            Ja                                                │
 │                                            Nein                                              │
 │                                            Fragen                                            │
 │                                                                                              │
 │                                                                                              │
 │                                            <Ok>                                              │
 │                                                                                              │
 └──────────────────────────────────────────────────────────────────────────────────────────────┘

Im nächsten Screen muss das zu installierende Zertifikat markiert werden.

 

┌──────────────────────────────┤ ca-certificates configuration ├──────────────────────────────┐
│ Dieses Paket installiert gebräuchliche Zertifikate von CAs (Zertifizierungsstellen) unter   │
│ /usr/share/ca-certificates.                                                                 │
│                                                                                             │
│ Bitte wählen Sie die Zertifizierungsstellen aus, denen Sie vertrauen, damit deren           │
│ Zertifikate in /etc/ssl/certs installiert werden. Sie werden in eine einzige Datei          │
│ /etc/ssl/certs/ca-certificates.crt zusammengestellt.                                        │
│                                                                                             │
│ Zu aktivierende Zertifikate:                                                                │
│                                                                                             │
│    [*] brasil.gov.br/brasil.gov.br.crt                                                  ↑   │
│    [*] cacert.org/cacert.org.crt                                                        ▮   │
│    [*] debconf.org/ca.crt                                                               ▒   │
│    [*] gouv.fr/cert_igca_dsa.crt                                                        ▒   │
│    [*] gouv.fr/cert_igca_rsa.crt                                                        ▒   │
│    [ ] eigene-root-ca/root-ca.crt                                                       ▒   │
│    [*] mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt                            ▒   │
│    [*] mozilla/AddTrust_External_Root.crt                                               ↓   │
│                                                                                             │
│                                                                                             │
│                                           <Ok>                                              │
│                                                                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

Das ganze mit OK bestätigen, das Zertifikat wird installiert.

Postfix: Mail-Relay mit SMTP-Auth via Submission/TLS für ausgehende Mails

Ein Server soll als Relayhost (oder in der Windowswelt auch Smarthost gennant) dienen. Wer keine feste IP Adresse mit passenden DNS Reverse Eintrag hat wird schlechte Chancen haben das ein richtig konfigurierter Mailserver die Mails annehmen wird. Die Lösung ist die Mails an einen anderen Relayhost oder Mailserver zu schicken und dieser stellt dann die Mails zu. Manchmal bieten die Provider selbst Relayhosts an in vielen Fällen bleibt nichts anderes übrig als das ganze über ein Postfach zu versenden. Einige Provider bieten das Anliefern von Mails nur noch über Submission (TCP/587) und TLS verschlüsselt an. Ist mir persönlich auch lieber …

Beispielszenario

Provider: example.net

Mailaccount: user1@example.net Password: example%1

Mailserver: mail.example.net

Submission (TCP/587) und TLS sind notwendig.

 Lösung

„/etc/postfix/main.cf“ ergänzen mit:

relayhost = mail.example.net:submission
smtp_use_tls=yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
smtp_sasl_security_options = noanonymous, noplaintext
smtp_sasl_tls_security_options = noanonymous

/etc/postfix/smtp_auth (Map-Datei, muss initialisiert werden!!!)

mail.example.net:submission               user1@example.net:example%1

Folgende Kommandos sind noch auszuführen:

postmap /etc/postfix/smtp_auth

durchführen um die Datei zu mappen.

/etc/init.d/postfix restart

durchführen um die Änderungen zu aktivieren.

Massenhafte Änderungen von Datei und Verzeichnis Rechten unter Linux

Ich habe gerade das Tool OpenTimeTool auf einem Server installiert. Im Paket sind alle Dateien und Verzeichnisse mit 777 Rechten vorhanden. Man sollte wenn die Kiste im Internet steht die Berechtungungen schon ein wenig restriktiver vergeben. Normalerweise haben Dateien auf einem Webserver eine 644 Maske und Verzeichnisse eine 755 Maske.

foo@bar:/var/www/bar/opentimetool/test# ls -la
insgesamt 2404
drwxr-xr-x  7 root   root      4096 2011-07-21 15:10 .
drwxr-xr-x  8 foo    foo       4096 2011-07-21 15:10 ..
-rwxrwxrwx  1 root   root      9513 2011-04-18 22:12 CHANGELOG
drwxrwxrwx  3 root   root      4096 2011-04-18 22:25 classes
-rwxrwxrwx  1 root   root      1371 2008-10-21 21:20 config-local.php.dist
-rwxrwxrwx  1 root   root      8179 2011-04-18 22:12 config.php
-rwxrwxrwx  1 root   root      3642 2011-01-05 00:10 db_upgrade.php
drwxrwxrwx  3 root   root      4096 2011-04-18 22:25 docs
drwxrwxrwx  9 root   root      4096 2011-04-18 22:25 htdocs
drwxrwxrwx 15 root   root      4096 2011-04-18 22:25 includes
-rwxrwxrwx  1 root   root      1546 2008-03-18 15:45 index.php
-rwxrwxrwx  1 root   root     22871 2011-01-05 00:10 init.php
-rwxrwxrwx  1 root   root      2983 2008-09-22 18:51 INSTALL
-rwxrwxrwx  1 root   root      2403 2008-09-22 18:51 INSTALL.de
-rwxrwxrwx  1 root   root     18009 2008-03-18 15:45 LICENSE
-rwxrwxrwx  1 root   root        17 2008-03-18 15:45 media
-rwxrwxrwx  1 root   root       856 2008-03-18 15:45 messages.php
-rwxrwxrwx  1 root   root       717 2008-10-21 21:20 mobile_access.README
drwxrwxrwx  2 root   root      4096 2011-04-18 22:25 mobile_login
-rwxrwxrwx  1 root   root     63312 2010-09-09 10:24 mysql.sql
-rw-r--r--  1 root   root   2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz
-rwxrwxrwx  1 root   root       214 2008-03-18 15:45 phpinfo.php
-rwxrwxrwx  1 root   root       676 2008-03-18 15:45 README
-rwxrwxrwx  1 root   root       915 2008-03-18 15:45 SafeMode.README
-rwxrwxrwx  1 root   root       709 2008-03-24 21:18 Suhosin-README.txt
-rwxrwxrwx  1 root   root     10215 2008-03-18 15:45 TODO
-rwxrwxrwx  1 root   root     10761 2010-02-09 09:59 translate_de.sql
-rwxrwxrwx  1 root   root      9243 2010-02-09 09:59 translate_en.sql
-rwxrwxrwx  1 root   root       982 2010-02-09 09:59 update.README

Mit den Linuxboardmitteln kann man sich viel Arbeit sparen. Mit „find“ kann ich einen Parameter -type mitgeben wo ich entweder Dateien (f = Files) oder Verzeichnisse (d = Directory) als Ergebnis zurückgeben lassen kann. Mit dem Parameter -exec kann ich anschließend direkt ein Kommando ausführen und das gefundene als Parameter ({}) mitgeben.

find /var/www/bar/opentimetool/test -type f -exec chmod 644 {} \;
find /var/www/bar/opentimetool/test -type d -exec chmod 755 {} \;

Zuletzt sollte man noch den Benutzer und die Gruppe richtig setzen.

chown www-data:www-data -R /var/www/bar/opentimetool/test

Das Resultat sieht dann wie folgt aus:

foo@bar:/var/www/opentimetool/test# ls -la
insgesamt 2404
drwxr-xr-x  7 www-data www-data    4096 2011-07-21 15:10 .
drwxr-xr-x  8 foo      foo         4096 2011-07-21 15:10 ..
-rw-r--r--  1 www-data www-data    9513 2011-04-18 22:12 CHANGELOG
drwxr-xr-x  3 www-data www-data    4096 2011-04-18 22:25 classes
-rw-r--r--  1 www-data www-data    1371 2008-10-21 21:20 config-local.php.dist
-rw-r--r--  1 www-data www-data    8179 2011-04-18 22:12 config.php
-rw-r--r--  1 www-data www-data    3642 2011-01-05 00:10 db_upgrade.php
drwxr-xr-x  3 www-data www-data    4096 2011-04-18 22:25 docs
drwxr-xr-x  9 www-data www-data    4096 2011-04-18 22:25 htdocs
drwxr-xr-x 15 www-data www-data    4096 2011-04-18 22:25 includes
-rw-r--r--  1 www-data www-data    1546 2008-03-18 15:45 index.php
-rw-r--r--  1 www-data www-data   22871 2011-01-05 00:10 init.php
-rw-r--r--  1 www-data www-data    2983 2008-09-22 18:51 INSTALL
-rw-r--r--  1 www-data www-data    2403 2008-09-22 18:51 INSTALL.de
-rw-r--r--  1 www-data www-data   18009 2008-03-18 15:45 LICENSE
-rw-r--r--  1 www-data www-data      17 2008-03-18 15:45 media
-rw-r--r--  1 www-data www-data     856 2008-03-18 15:45 messages.php
-rw-r--r--  1 www-data www-data     717 2008-10-21 21:20 mobile_access.README
drwxr-xr-x  2 www-data www-data    4096 2011-04-18 22:25 mobile_login
-rw-r--r--  1 www-data www-data   63312 2010-09-09 10:24 mysql.sql
-rw-r--r--  1 www-data www-data 2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz
-rw-r--r--  1 www-data www-data     214 2008-03-18 15:45 phpinfo.php
-rw-r--r--  1 www-data www-data     676 2008-03-18 15:45 README
-rw-r--r--  1 www-data www-data     915 2008-03-18 15:45 SafeMode.README
-rw-r--r--  1 www-data www-data     709 2008-03-24 21:18 Suhosin-README.txt
-rw-r--r--  1 www-data www-data   10215 2008-03-18 15:45 TODO
-rw-r--r--  1 www-data www-data   10761 2010-02-09 09:59 translate_de.sql
-rw-r--r--  1 www-data www-data    9243 2010-02-09 09:59 translate_en.sql
-rw-r--r--  1 www-data www-data     982 2010-02-09 09:59 update.README

socat: Pfiffiges Tool zum Mappen von IPv6 auf IPv4 Adressen

Wer gerade vor dem Problem steht alle Dienste auf seinen Linux Maschinen IPv4/IPv6 Dualstack fähig zu machen, der ist froh wenn er so ein Tool wie socat findet.

Es sind zwar die meisten Linux Dienste bereits Dualstack fähig aber es gibt vereinzelt noch Dienste wo keine regelmäßige bis keine Pflege der Software stattfindet.

socat ist quasi ein IPv6 -> IPv4 Relay. Das Paket ist im Packet Repository von Debian / Ubuntu verfügbar.

Beschreibung von socat aus der README des Pakets:

socat is a relay for bidirectional data transfer between two independent data
channels. Each of these data channels may be a file, pipe, device (serial line
etc. or a pseudo terminal), a socket (UNIX, IP4, IP6 - raw, UDP, TCP), an
SSL socket, proxy CONNECT connection, a file descriptor (stdin etc.), the GNU
line editor (readline), a program, or a combination of two of these.
These modes include generation of "listening" sockets, named pipes, and pseudo
terminals.

socat can be used, e.g., as TCP port forwarder (one-shot or daemon), as an
external socksifier, for attacking weak firewalls, as a shell interface to UNIX
sockets, IP6 relay, for redirecting TCP oriented programs to a serial line, to
logically connect serial lines on different computers, or to establish a
relatively secure environment (su and chroot) for running client or server
shell scripts with network connections.

Many options are available to refine socats behaviour:
terminal parameters, open() options, file permissions, file and process owners,
basic socket options like bind address, advanced socket options like IP source
routing, linger, TTL, TOS (type of service), or TCP performance tuning.

More capabilities, like daemon mode with forking, client address check,
"tail -f" mode, some stream data processing (line terminator conversion),
choosing sockets, pipes, or ptys for interprocess communication, debug and
trace options, logging to syslog, stderr or file, and last but not least
precise error messages make it a versatile tool for many different purposes.

In fact, many of these features already exist in specialized tools; but until
now, there does not seem to exists another tool that provides such a generic,
flexible, simple and almost comprehensive (UNIX) byte stream connector.

Das Tool kann noch wesentlich mehr, Infos findet man auf der Webseite des Programmierers http://www.dest-unreach.org/socat/.

Ich habe das für meinen alten SKS Keyserver verwendet, der noch kein IPv6 beherrscht. Ich lasse das ganze in einzelnen Screens laufen.

screen -dmS socat1 socat TCP6-LISTEN:11370,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11370
screen -dmS socat2 socat TCP6-LISTEN:11371,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371
screen -dmS socat3 socat TCP6-LISTEN:80,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371

Damit das ganze auch noch einen Neustart überlebt kann man es noch in die /etc/rc.local vor dem „exit 0“ einfügen.

Managed Service Accounts (MSA) für Services unter Windows 2008 R2

Unter Windows 2008 R2 gibt es sog. Managed Service Accounts. Diese Accounts sind für Dienste / Services gedacht. Vorteil dieser Accounts ist, das diese keine festen Passwörter mehr benötigen. Früher wurde für einen Service ein Account mit einem festen Passwort angelegt das nicht abläuft. Mit dieser neuen Funktion ist das nicht mehr notwendig da der Server selbständig in der Lage ein neues Passwort zu vergeben wenn es ausläuft.

Für die Erstellung von MSA´s benötigt man die PowerShell im Adminmodus.

Benötigt wird das Modul ActiveDirectory.

import-module activedirectory
New-ADServiceAccount -name msa1
New-ADServiceAccount -name msa2 -AccountPassword (ConvertTo-SecureString -AsPlainText 1q2w3e4r%T -Force)
Add-ADComputerServiceAccount -Identity romulus -ServiceAccount msa1
Add-ADComputerServiceAccount -Identity romulus -ServiceAccount msa2

New-ADServiceAccount legt einen neuen MSA an. Falls man für eine Dienstinstallation ein Passwort benötigt kann man mit dem Zusatz -AccountPasswort (siehe MSA2) ein Startpasswort definieren. Nach Ablauf der Passwortgültigtkeit wird dann ebenfalls ein neues gesetzt. Mit Add-ADComputerServiceAccount wird festgelegt für welche Maschine der Serviceaccount ist.

Auf der Maschine wo der ServiceAccount benötigt wird muss dieser noch Installiert werden.

Import-Module ActiveDirectory
Install-ADServiceAccount -Identity msa1
Install-ADServiceAccount -Identity msa2

Mit dem Kommando Install-ADServiceAccount wird der Maschine der ServiceAccount bekannt gemacht. Ab diesen Moment weiß die Maschine das sie für diesen Account auch die Passwörter wechseln muss wenn es soweit ist.

 Wie werden die MSA`s verwendet?

Zum Testen habe ich einfach schnell 2 Dienste über die Kommandozeile angelegt.

Wichtig sind die Leerzeichen nach dem Istgleich.

sc create Dienst1 type= own binpath= c:\dienst1.exe
sc create Dienst2 type= own binpath= c:\dienst2.exe

Jetzt benötigen wir die services.msc Managementkonsole, dort tauchen jetzt auch unsere 2 neuen Dienste auf.

Einen der Testdienste mit Doppelklick öffnen und in den Reiter „Logon“ gehen. Hier „This Account“ auswählen und auf „Browse“ gehen. In das Suchfeld msa1 oder msa2 eingeben und suchen. Das ganze mit OK bestätigen.

Der Account wird als msa1$ oder msa2$ angezeigt. Passwort kann man irgendwas eingeben, um das Passwort kümmert sich Windows selbst. Alles mit OK bestätigen.

Noch ein kleines „Nice to know“

Es gibt die Möglichkeit ACLs für Dienste selbst zu vergeben, d.H. nicht nur für Dienste die unter einem User laufen sondern auch für Dienste die im LOCAL SYSTEM laufen. Hier kann man den Diensten Rechte nehemen oder geben.

Als Location muss die Maschine selbst angegeben werden, in dem Fall „ROMULUS“. Im Suchfeld muss der entsprechende Dienst mit dem Prefix „nt service\“ eingegeben werden, also „nt service\dienst1“. Ohne das Prefix findet Windows den Dienst nicht!

Auf einen Dienst können alle ACLs die auf einen User anwendbar sind ebenfalls angewendet werden.

Die PowerShell

Dieser Artikel ist nur ein kleiner Überblick der mächtigen PowerShell. Die PowerShell wurde von Microsoft entwickelt um administrative Aufgaben effizienter erledigen zu können und um eine zentrale, einheitliche Schnittstelle zu bieten. Für viele neue Microsoft Produkte ist die PowerShell unabdingbar (z.B. Microsoft Exchange 2010).

Allgemeines

Die PowerShell besteht aus kleinen Einheiten die sich Cmdlets nennen. Die Kommandos sind alle nach dem Schema Verb-Substantiv aufgebaut, z.B. get-help. Groß-/Kleinschreibung spielt keine Rolle. Für bestimmte Kommandos und Cmdlets gibt es Aliase.

 

Wichtige Kommandos

 

Kommando/Cmdlet Beschreibung
get-help Zeigt die Hilfe an
get-help <Kommando/Cmdlet> Zeigt die Hilfe zu einem Kommando/Cmdlet an
get-variable Zeigt alle gesetzten Variablen an
get-alias Zeit alle gesetzten Aliase an
get-module -ListAvailable Zeigt vorhandene Module an
import-module <modulname> Importiert das Modul in die aktuelle Sitzung (z.B. import-module activedirectory)
get-command Zeigt die verfügbaren Kommandos / Cmdlets an
sort-object Sortieren einer Datenmenge
select-object Einen bestimmten Bereich selektieren (z.B. select-object -First 3)
export-csv Datenmenge in CSV exportieren
get-psdrive Zeigt PowerShell Laufwerke an
invoke-command Kommandos Remote auf anderen Server ausführen
enable-psremoting Aktiviert Remote Power Shell
new-pssession Baut eine Verbindung zu einem Remote Power Shell Server auf
enter-pssession Geht in die Remote Verbindung rein
exit-pssession Verlässt die Remote Session
get-credential Frägt über einen Popup Anmeldeinformationen ab wenn man nicht die Sitzungsanmeldeinformationen verwenden will
get-aduser <username> Frägt aus dem AD Informationen über einen User ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
get-adobject <filter> Frägt ein Objekt aus dem AD ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
get-adcomputer <computer> Frägt aus dem AD Computerinformationen ab (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)
set-adaccountpassword Setzt Passwort für einen User (Nur Verfügbar wenn das ActiveDirectory Modul geladen ist.)

Vergleichs- und Verknüpfungsoperatoren

 

Operator Beschreibung
-eq (equal) gleich
-ne (not equal) nicht gleich
-gt (greater than) größer als
-lt (less than) kleiner als
-ge (greater equal) größer gleich
-le (less equal) kleiner gleich
-like wie .z.B. „a*“
-notlike nicht wie z.B. „a*“
-match „^ABC“ (Regex)
-AND und
-OR oder
-NOT nicht

Beispiel: get-service

get-service gibt den Status der Prozesse zurück.

Will man jetzt z.B. nur Dienste sehen die sich im Status „Running“ befinden so kann man das Ergebnis an ein anderes Kommando pipen.

get-service | where-object {$_.status -eq "running"}

Das Resultat:

Alternativ für where-object gibt es einen Alias der „?“ heißt. Also wäre auch folgender Befehl möglich:

get-service | ? {$_.status -eq "running"}

Das ganze lässt sich mit einem Verbindungsoperator noch erweitern:

get-service | ? {($_.name -like "A*") -AND ($_.status -like "run*")}

Als Resultat bekommen wir alle Prozesse die mit A…. beginnen und laufen.

Jetzt können wir uns noch alle Prozesse mit A ausgeben lassen und diese absteigend sortieren.

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending

Die Ausgabe können wir jetzt noch auf 3 Resultate beschränken:

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending | select-object -First 3

Das können wir jetzt noch in eine CSV Datei exportieren:

get-service | ? {$_.name -like "a*"} | sort-object displayname -Descending | select-object -First 3 | export-csv -path export.csv

Inhalt export.csv:

#TYPE System.ServiceProcess.ServiceController
"Name","RequiredServices","CanPauseAndContinue","CanShutdown","CanStop","DisplayName","DependentServices","MachineName","ServiceName","ServicesDependedOn","ServiceHandle","Status","ServiceType","Site","Container"
"AudioEndpointBuilder","System.ServiceProcess.ServiceController[]","False","False","True","Windows Audio Endpoint Builder","System.ServiceProcess.ServiceController[]",".","AudioEndpointBuilder","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Running","Win32ShareProcess",,
"AudioSrv","System.ServiceProcess.ServiceController[]","False","False","True","Windows Audio","System.ServiceProcess.ServiceController[]",".","AudioSrv","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Running","Win32ShareProcess",,
"AppMgmt","System.ServiceProcess.ServiceController[]","False","False","False","Application Management","System.ServiceProcess.ServiceController[]",".","AppMgmt","System.ServiceProcess.ServiceController[]","SafeServiceHandle","Stopped","Win32ShareProcess",,

PowerShell Drives

In der PowerShell kann man auf verschiedene Daten über das Filesystem zugreifen. Darunter sind unter anderem der Certificate Store und die Registry.

 

get-psdrive
cd HKLM:
cd .\SOFTWARE
dir

Remote PowerShell

In der PowerShell ist es möglich einen RemoteAccess zu aktivieren. Einmal aktiviert bleibt er auch aktiviert, er lässt sich aber wieder abschalten. Der PowerShell Remote Service läuft auf 2 TCP Ports. TCP/5985 ohne SSL und TCP/5986 mit SSL.

Aktivieren der Remote Shell:

enable-psremoting

Die beide Abfragen mit „Y“ bestätigen, eine automatische Firewallregel wird installiert.

Es gibt 2 Möglichkeiten mit der Remote PowerShell zu arbeiten.

1. Wir können ein Kommandosatz übermitteln und das Ergebnis verarbeiten

invoke-command -computername romulus.thoma.local -scriptblock {get-service}

2. Wir können uns eine vollständige Remote Shell öffnen

new-pssession -computername romulus

Nach dem Verbindungsaufbau muss man in die Session einsteigen

enter-pssession 1

Am Beginn der Zeile steht jetzt der Hostname der Remotemaschine. Um die Remotemaschine zu verlassen benötigt man folgendes Kommando:

exit-pssession

Die Sessions verschwinden nach 15 Minuten von alleine, wer nicht warten will kann mit

remove-pssession 1

die Session löschen.

Mit anderen Credentials Remote anmelden

Es gibt 2 verschiedene Möglichkeiten Credentials mitzugeben.

1. Im Script

Windows benötigt gehashte Passwörter für die Anmeldung.

$secpasswd = Convert-To-SecureString "1q2w3e4r%T" -AsPlainText -Force
$username="max"
$mycreds = new-object system.management.automation.pscredential ($username, $secpasswd)
invoke-command -credential $mycreds -computername romulus.thoma.local -scriptblock {get-service}

2. Per Popup

$mycreds = get-credential
invoke-command -credential $mycreds -computername romulus.thoma.local -scriptblock {get-service}

Windows 2008 R2 Server Active Directory Papierkorb aktivieren und verwenden

In der aktuellen Windows 2008 R2 Server Version gibt es die Möglichkeit das gelöschte AD Objekte in einem Papierkorb aufbewahrt werden. Das gab es zwar schon früher, allerdings werden bei dem AD Papierkorb alle Werte erhalten incl. Passwort. Dies war bei der vorhergehenden Lösung nicht der Fall. Der AD Papierkorb setzt voraus das der Forrest Funcional Level „Windows 2008 R2“ ist. Ist die Domäne auf Windows 2003 aufgebaut und wurde zu 2008 R2 migriert werden die Objekte im Papierkorb für 60 Tage gespeichert. Ist die Domäne direkt mit Windows 2008 / 2008 R2 aufgebaut werden die Objekte für 180 Tage gespeichert. Der Wert lässt sich auch ändern.

Wichtig! Die AD Papierkorbfunktion gibt es nur unter Windows 2008 R2 Server.

Um den AD Papierkorb zu aktivieren muss auf dem Schema-Master in einer administrativen Power Shell folgender Befehl ausgeführt werden.

Wer ist der Schema-Master? Dies lässt sich mit netdom ermitteln:

C:\>netdom query fsmo

Falls keine Remote Powershell aktiviert ist muss man sich via RDP verbinden oder sich direkt an die Maschine begeben.

In der PowerShell muss das Modul ActiveDirectory nachgeladen werden. Der DN muss angepasst werden auf die entsprechende Domäne genauso wie das Target.

PS C:\>import-module activedirectory
PS C:\>enable-adoptionalfeature -identity "cn=recycle bin feature,cn=optional features,cn=directory service,cn=windows nt,cn=services,cn=configuration,dc=thoma,dc=local" -scope forestorconfigurationset -target "thoma.local"

ACHTUNG! Das Feature lässt sich nicht mehr abschalten. Anschließend mit „Y“ bestätigen.

 Wie kann man den AD Papierkorb verwenden ?

Ich habe zum Test den User dummy1 gelöscht. Der User befindet sich jetzt in diesem Papierkorb.

Mit einer administrativen PowerShell können wir den User suchen.

PS C:\>import-module activedirectory
PS C:\>get-adobject -filter {name -like "*dummy1*"} -includedeletedobject

Will man diesen User jetzt wiederherstellen so muss man folgenden Befehl verwenden:

PS C:\>get-adobject -filter {name -like "*dummy1*"} -includedeletedobject | restore-adobject

Ruft man jetzt erneut den „get-adobject -filter {name -like „*dummy1*“} -includedeletedobject“ Befehl auf sieht man das der User nichtmehr das Flag „Deleted“ besitzt und wieder seinen orginalen DN hat.

Windows 2008 Active Directory Snapshot erstellen und mounten

Windows 2008 / 2008 R2 Server bietet ein cooles Feature um regelmäßig und schnell das Active Directory zu sichern. Die Sicherung kann im Betrieb erfolgen. Für den Snapshot wird der Volume Shadow Service verwendet.

Zum Anlegen des Snapshots wird das mitgelieferte Tool ntdsutil verwendet.

Wichtig! Das Tool benötigt Admin Rechte. cmd Box mit Adminrechten starten!

Mit dem Kommando

ntdsutil "ac i ntds" "sn" "cr" "q" "q"

verbindet sich das Tool zum Active Directory und startet das Anlegen des Snapshots.

Die bereits erstellten Snapshots kann man sich mit

ntdsutil "sn" "l a" "q" "q"

anzeigen lassen.

 

Um einen Snapshot zu verwenden muss er gemountet werden. Das Mounten erfolgt mit dem Kommando:

ntdsutil "sn" "l a" "mo 10" "q" "q"

10 gibt die Version an die sich auf die Nummer aus der Liste der Snapshots bezieht.

 

Nach dem Mounten ist der Snapshot unter C:\$SNAP_201107141124_VOLUMEC$\ verfügbar. Der Name ist abhängig vom Snapshot.

Aus dem Snapshot können wir jetzt das gesicherte Active Directory parallel starten. Hierzu muss man in den Ordner C:\$SNAP_201107141124_VOLUMEC$\Windows\NTDS\ wechseln. Der Ordner kann abweichen je nachdem wo man die AD Informationen abgelegt hat.

Mit dem Tool dsamain lässt sich die Kopie parallel starten.

Dem Tool dsamain werden 2 Parameter beim Start mitgegeben. Dem Parameter dbpath geben wir unser Active Directory aus dem Snapshot mit. Mit dem Parameter ldapport geben wir noch einen freien Port mit auf den wir uns dann mit einem LDAP Explorer oder mit der dsa.msc verbinden können. Per Default wird das AD aus dem Snapshot im Read Only Modus gestartet.

dsamain -dbpath ntds.dit -ldapport 6500

Jetzt können wir uns mit der dsa.msc auf das gemountete AD verbinden.

Um unser Snapshot AD sehen zu können müssen wir uns lokal auf Port 6500 verbinden.

Hiezu auf die Domäne einen Rechtsklick und „Change Domain Controller“ auswählen.

In diesem Fenster muss bei <Type a Directory Server name[:port] here> localhost:6500 eingetragen werden.

Das ganze mit Ok bestätigen.

Wir sind jetzt mit dem Snapshot AD verbunden und können alles ansehen. Öffnet man ein Objekt stellt man fest das die Objekte, wie oben bereits erwähnt, Read Only sind.

Natürlich kann man auf dieses gemountete AD auch mit anderen Tools wie ldifde, csvde, usw. arbeiten.

Nach der Arbeit sollte man den Snapshot noch unmounten.

Der Unmount kann mit dem folgenden Befehl durchgeführt werden. Hier ist wieder die richtige Index ID einzugeben.

ntdsutil "sn" "l a" "un 10" "q" "q"