Mittwoch, 26. September 2012

Geplante Aufgabe als SYSTEM ausführen - Fehler 0x80070534

Die CSE "Scheduled Tasks"

Die Group Policy CSE "Scheduled Tasks" bietet eine einfache Möglichkeit
Aufgaben per Richtlinie zu konfigurieren.





Die Tasks können entweder per Benutzerkonfiguration oder Computerkonfiguration erstellt werden.

Benutzt man die User-Config, so lässt sich die Aufgabe zum Beispiel als angemeldeter Benutzer ausführen.


Es können die Variablen "%LogonDomain%\%LogonUser%" benutzt werden.




Kennwort speichern?

Anders schaut es bei der Computerkonfiguration aus.
Hier muss explizit ein Benutzer angegeben werden:




Es kann ein lokaler Benutzer oder ein Domänenbenutzer verwendet werden.



Verteilt man "Geplante Aufgaben" per Group Policy Preferences,
so möchte man in der Regel jedoch nicht das Passwort in der Group Policy speichern. 



Die Begründung liefert unter anderem dieser Technet Blog:
To obscure the password from casual users, it is not stored as clear text in the XML source code of the preference item. However, the password is not secured. Because the password is stored in SYSVOL, all authenticated users have read access to it. Additionally, it can be read by the client in transit if the user has the necessary permissions.

Because passwords in preference items are not secured, we recommend that you carefully consider the security ramifications when deciding whether to store passwords in preference items. If you choose to use this feature, we recommend that you consider creating dedicated accounts for use with it and that you do not store administrative passwords in preference items.

quelle:
http://blogs.technet.com/b/grouppolicy/archive/2009/04/22/passwords-in-group-policy-preferences-updated.aspx


Welchen Account benutzen?

Welchen Account könnte man also benutzen, der ausreichend Rechte auf dem Computer hat, jedoch es nicht erfordert ein Passwort zu speichern?

Die Antwort:
SYSTEM


OK, nichts leichter als das.
Per Object-Picker auswählen und gut ist es!?





Eingetragen wird anschließend "BUILTIN\SYSTEM" im UI des
GPP Items.


Wie verhält sich der Client?

Gleich vorneweg, der Task wird niemals am Client erzeugt werden.
Aktiviert man das Tracing der CSE, so erhält man folgenden Fehler:

[ hr = 0x80070534 "Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt." ]


Der Benutzer "BUILTIN\SYSTEM" kann also nicht zugeordnet werden.


Nächster Versuch, manuelles eingeben des Benutzers "SYSTEM":




Das Policy Item lässt sich speichern.
Am Client schlägt allerdings der gleiche Fehler auf, 0x80070534.


Wie verhält es sich, wenn der Task manuell angelegt wird?

Aufgaben werden im XML Format bereitgestellt.
Wenn wir manuell einen Task erzeugen, kann dieser als XML Datei exportiert werden.


<Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
 </Principals>


Der User "SYSTEM" (genau genommen ist dies gar kein User, aber egal),
wird also mit seiner SID "S-1-5-18" eingetragen.


Schaut man sich allerdings das XML File der Policy an, wird er mit diesem Wert
hinzugefügt:

runAs="BUILTIN\SYSTEM"
Der Client kann dies nicht umsetzen und quittiert dies mit dem genannten Fehler.

Erzeugt man die Policy mit der SID, wird sie am Client übernommen.
Der Client übersetzt sogar die SID zum User "SYSTEM".




Fazit:

Sollen Tasks als Local System ausgeführt werden, so muss die SID als Benutzername verwendet werden.

Hier noch eine Liste der "Well-known security identifiers"

http://support.microsoft.com/kb/243330/en-us



6 Kommentare:

  1. Danke für die Anleitung! Aber scheinbar ist es ab Win8(.1) anders. Bei der Verwendung der SID kommt: "0x8007052e Der Benutzername oder das Kennwort ist falsch." ... Hast Du "Zufällig" dafür schon was gefunden?
    Gruß Thomas

    AntwortenLöschen
  2. Hallo,

    habe es gerade unter Windows 8.1 ausprobiert. Funktioniert ohne Probleme.
    Kannst du einmal deine XML Datei exportieren?
    Dazu einfach im Gruppenrichtlinienverwaltungs-Editor den Task per Drag & Drop auf den Desktop ziehen. Dort wird dann eine XML Datei erzeugt.

    AntwortenLöschen
  3. Wie realisiere ich dann den Zugriff der Aufgabe auf Netzwerkressourcen? Ich möchte, dass sich dann ein Script Daten aus dem Netzwerk zieht, dafür fehlt dann aber die Berechtigung für den Lesezugriff, korrekt?

    Danke!

    AntwortenLöschen
    Antworten
    1. Hey, wenn dir das noch hilft: deine Netzwerkressource sollte so konfiguriert werden, dass der Client der darauf zugreift, die Rechte besitzt, nicht der User. Beim Ausführen z. b. beim Startup bei ner GPO ist das ja das Gleiche. Also einfach gucken, dass das Computerkonto zugriffsberechtigt ist, oder besser die Gruppe Domänencomputer lesend zugreifen darf. Das sollte sicherheitstechnisch auch kein Problem sein :)

      Löschen
  4. Geil, auch viele Jahre später noch sehr hilfreich. Hatte mir schon die Zähne daraun ausgebissen. Endlich funktioniert es ��

    Danke!

    AntwortenLöschen