www.IT-Visions.de-Diskussionsforen (Version 2.1)
(Diese Seite wurde noch nicht auf das neue Layout umgestellt!)


Diese Foren stehen den Lesern unserer Bücher und allen anderen registrieren Benutzern dieser Website zur Verfügung. Wir würden uns freuen, wenn viele Nutzer dieser Website hier nicht nur Fragen stellen, sondern auch die Fragen anderer Nutzer beantworten. Diese Foren sind ein ehrenamtlicher, nicht-kommerzieller, unmoderierter Community-Dienst von www.IT-Visions.de. Wenn Sie kommerzielle Unterstützung für .NET/Scripting/PowerShell suchen, schauen Sie bitte auf unser Support-Angebot und unsere Schulungsangebote für Scripting und Schulungsangebote für .NET.



NTFS Berechtigungen via ASP.NET
Autor:  Dr.MatthiasGötte
E-mail:  Antworten bitte nur in das Forum!
Datum:  09.09.2008 20:36:11
Subject:  NTFS Berechtigungen via ASP.NET
Bezug zum Buch: 
Message:  Ich schreibe geraumer zeit schon an einer ASP.NET Anwendung in der zun‰chst ein (ActiveDirectory) Benutzer (ein sch¸ler in meiner schule) erstellt wird und für diesen Benutzer anschließend ein Heimatverzeichnis mit entsprechenden Berechtigungen erstellt werden soll.
1. Berechtigungsprobleme bei der Benutzerkontenerstellung, die sich dadurch ergeben haben, dass ich natürlich im Skript keine Logindaten eines Domänenadmins eintragen will (wie im Beispielskript auf it-visions), ließen sich leider nicht durch die Einstellung der Windows-Authentifizierung im IIS für die Anwendung beheben, weil das Passwort bei Aufruf der ADSI Schnittstelle im Klartext und nicht gehashed benötigt wird (HINWEIS dazu habe ich in der Knowledgebase gefunden). Als Lösung habe ich im Moment Eingabefelder für Admin-User und Passwort in das Formular eingebaut; damit funktionierts dann. Hat jemand eine bessere einfachere Lösung parat?   

2. Das zweite, bislang ungelöste Problem, betrifft die Erstellung des Heimatverzeichnis. Vorab: In der Entwicklungsumgebung funktioniert alles prima, nur bei der Ausführung auf einem IIS scheitert sowohl die Erstellung eines Heimatverzeichnisses und das Setzen von Berechtigungen an Zugriffsbeschränkungen. Das legte zunächst die Vermutung nahe das das Problem eines ist, das durch Einträge in der web.config zu machen sind, behoben wird.
So habe ich in der web.config das "trust" level auf "FULL" gesetzt und impersonate aus "true". Aber auch das halb alles nichts. Es hagelt immer Fehlermeldungen von Typ "zugriff verweigert"!
Vielleicht liegst ja doch an den Sub-Routinen "createdirectory", "AddDirectorySecurityNET" und "AddDirectorySecurity" die ich verwende (siehe unten).
Die Sub-Routine "AddDirectorySecurity" ist der Versuch die Berechtigungen mit Hilfe der altbekannten Konsolenanwendung "XCACLS" anstatt mit .NET Funktionalität zu setzen. Das Label "lbltestacl" dient mir zur Ausgabe von Fehlerinfos auf der Webseite.

    Sub CreateDirectory(ByVal path As String)
        Try
            Dim d As DirectoryInfo
            d = New DirectoryInfo(path)
            ' --- Verzeichnis erzeugen
            d.Create()
        Catch ex As Exception
            Me.lbltestacl.Text = ex.Message
        End Try
    End Sub
    Sub AddDirectorySecurityNET(ByVal UNCPath As String, ByVal Klasse As String, ByVal Account As String, ByVal Rights As FileSystemRights)
        Try
            ' Create a new DirectoryInfoobject.
            'Dim f As New FileIOPermission(PermissionState.Unrestricted, UNCPath & "\") ' & Klasse)
            Dim dInfo As New DirectoryInfo(UNCPath & "\" & Klasse)
            ' Get a DirectorySecurity object that represents the
            ' current security settings.
            Dim dSecurity As DirectorySecurity = dInfo.GetAccessControl()
            dSecurity.ResetAccessRule(New FileSystemAccessRule(Account, Rights, AccessControlType.Allow))
            dInfo.SetAccessControl(dSecurity)
        Catch ex As Exception
            Me.lbltestacl.Text = "Catch Exeption:" & ex.Message
        End Try
    End Sub
    Sub AddDirectorySecurity(ByVal Path As String, ByVal Klasse As String, ByVal Schueler As String, ByVal Account As String, ByVal Rights As String, ByVal ClearAcl As Boolean)
        Try
            Dim p As New Process()
            If ClearAcl = True Then
               p.StartInfo.Arguments = Path & "\" & Klasse & "\" & Schueler & " /g " & Account & ":" & Rights & " /y"

            Else
               p.StartInfo.Arguments = Path & "\" & Klasse & "\" & Schueler & " /e /g " & Account & ":" & Rights
            End If
            Dim sOutput As String = ""
            Dim sError As String = ""
            p.StartInfo.FileName = "C:\xcacls.exe"
            p.StartInfo.WorkingDirectory = "C:\"
            p.StartInfo.UseShellExecute = False
            p.StartInfo.RedirectStandardOutput = True
            p.StartInfo.RedirectStandardError = True
            p.StartInfo.CreateNoWindow = False
            p.Start()
            sOutput = p.StandardOutput.ReadToEnd
            sError = p.StandardError.ReadToEnd
            p.WaitForExit()
            p.Close()

            Me.lbltestacl.Text = "Xcacls Parameter: " &            p.StartInfo.Arguments & "Output: " & sOutput & "Error: " & sError
        Catch ex As Exception
            Me.lbltestacl.Text = "Catch Exeption:" & ex.Message
        End Try
    End Sub


Antworten

  Zurück zum Forum



 .NET Framework-Programmierung -- C#, VB.NET, ASP.NET, u.a.
 NTFS Berechtigungen via ASP.NET von Dr.MatthiasGötte  am 9.9.2008 8:36:11 PM


www.IT-Visions.de - Dr. Holger Schwichtenberg / 1998-2019