Deutsch
Forum

DIE DATEI GEHÖRT MIR!

 
Hallo Profaner...

Ich habe vor, mich demnächst mal etwas mäher mit der NT/NTFS File-Security zu beschäftigen - anzeigen und ändern von Eigentümern und son Zeug zum Beispiel. Hat jemand so etwas schon mal gemacht (mit Security Descriptors gearbeitet) oder gibt es Interesse an dem Thema?
 
11.04.2005  
 



Nun auf Linux ist alles ja zum Glück über bashscripz realisierbar - da isses alles net so kompliziert - aber irgendwie sicherer.

Interessant wäre z.B. wie eine auf einem Client-Laufende-Software sich als Benutzer auf dem Server anmelden kann (vorrausgesetzt Username+Passwort vorhanden!) um Dateien je nach Rechtevergebung auf dem Server zu behandeln.

Salve.
 
12.04.2005  
 



Moin IF...

Sich irgendwo als anderer User anzumelden (und sei es nur mit einem einzelnen Prozess), dürfte eigentlich kein Problem sein (siehe API Library). Leider habe ich kein privates Netzwerk und kann deshalb dazu nichts entwickeln - allerhöchstens mitdenken. Die Domain (Computername) muss übrigens auch noch bekannt sein. Das ändern des Security Descriptors ist dann aber gar nicht mehr notwendig - und gerade das möchte ich ja. Ich möchte Files und Registry-Keys nur für bestimmte User und Gruppen freigeben oder den Eigentümer auf (einen evtl. geänderten) Loginnamen anpassen.

Viele Installer scheitern bei Usern mit eingeschränkten Rechten, weil diese bei der Installation eines Programmes nicht die Zugriffsrechte für die Files des installierten Programmes anpassen.
Installiert ein Admin für einen User mit eingeschränkten Rechten ein Programm, funktioniert dieses dann evtl. nicht richtig, weil Files nicht gelesen oder geschrieben werden können - ein Problem, an das kaum ein Programmierer denkt.

Der Zugriff auf den Security Descriptor scheint auch unter Windows nicht so kompliziert zu sein - ist wesentlich besser dokumentiert als die Aktivierung von Privilegien und die LSA - und beides ist bereits in Profan umgesetzt.

Trotzdem scheint es kaum oder gar keine Quelltexte in irgendeiner Programmiersprache über das Ändern von Security Descriptors zu geben - das stört mich etwas und das will ich ändern...

´
 
12.04.2005  
 



Du möchtest also einen set|getFileOwner erstellen - um vor einem fopen ein getFileOwner==actualOwner abprüfen zu können?

Wäre sehr interessant...

Salve.
 
12.04.2005  
 



Hallo IF...

Ja, genau. Nur das ich mit dieser Aufgabe eigentlich nicht viel zu tun habe - das übernimmt das Betriebssystem für mich, vorausgesetzt es gibt eine NTFS formatierte Patition (bei XP eigentlich schon fast Standard).

In der Registry funktioniert das auf die gleiche Weise. Auch hier können Keys gegen Fremdzugriff geschützt werden. Bei einigen Systemkeys unter HKEY_LOCAL_MACHINE ist es standardmäßig so, daß eigentlich nur Admins darauf zugreifen können.

Wie gesagt - wäre das für Files gelöst, könnte man das für alle anderen Bereiche des Betriebsystems auch anwenden. Da ich hier nur bedinngt über NTFS Partitionen verfüge, bräuchte ich evtl. ein bis zwei Leute, die etwas enger mit mir zusammenarbeiten und 2000 oder XP mit NTFS haben. Oberflächliche Kenntnisse, wie diese Betriebssysteme funktionieren, sollte man schon mitbringen.

Die Delphianer haben etwas ähnliches versucht - ist da scheinbar wohl kläglich in die Hose gegangen. Ich denke mal, wir kriegen das geregelt.
 
12.04.2005  
 



Du weißt doch - wenns was zu testen gibt...

Salve.
 
12.04.2005  
 




CB
Hallo, Andreas!

Bin gerne auch dabei. XP - 2000 - NT, auch im Netzwerk.
Tät mich auch interessieren!

Ciao, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
12.04.2005  
 



Hallo ihr beiden...

Bestens - sobald ich wieder voll an meinen Internet-PC kann, gehts genau hier los. Das kann noch bis zu 14 Tagen dauern, deshalb etwas Geduld.

Ich habe vor, ähnlich wie bei der LSA-API und dem Aktivieren von Privilegien, hier sehr tief in das Herz jedes Windows NT-basieten Betriebssystems zu blicken.

Wenn dabei etwas vernünftiges herauskommt, wird das Ergebnis nicht nur für Files gelten, sondern auf alle Bereiche eines NT-basierten Systems zutreffen, die mit ACCESS_MASK Flags arbeiten - die Registry unter anderem, um nur ein Beispiel von vielen zu nennen.

Ich freue mich schon auf die Zusammenarbeit mit euch und hoffe, daß ihr mir auch etwas auf die Sprünge helfen könnt, wenns bei mir haken sollten...
 
13.04.2005  
 



Hallo ihr beiden (und dem Rest ebenso)...

OK, jetzt fangen wir mal ganz langsam und einfach an:

Zuerst hole ich mir den Security Descriptor - also noch nichts besonderes.

Welche Rückmeldungen gibts - was zeigt die Ausgabebox an - ist irgendetwas unschlüssig?
KompilierenMarkierenSeparieren
Windowstyle 31
Windowtitle "File Security"
Window 0,0-640,440
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken" Öffnet Einstellprozess.
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" Stellt Privilegien ein.
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
Def @GetVolumeInformation(8) !"KERNEL32","GetVolumeInformationA"
Declare Filename$,Fehler&,SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,Needed#
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

    IF @LONG(LFLAGS#,0) | $8 = @LONG(LFLAGS#,0)

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    Long NewState#,0=1 Nur ein Privileg soll geändert werden
    Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
    LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#)
    ADDSTRING "Rückgabe von OpenProcessToken="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    STRING Privileg#,0="SeSecurityPrivilege"
    LET Fehler&=@LookupPrivilegeValue(System$,Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM SECURITY_INFORMATION#,4
    DIM PSECURITY_DESCRIPTOR#,1024
    DIM Needed#,4
    LONG SECURITY_INFORMATION#,0=$1 | $2 | $4
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,1024,Needed#)
    ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    @CloseHandle(@LONG(Token#,0))
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose SECURITY_INFORMATION#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    @Listbox$("API Rückgaben",1)

Endif

While 0=0

    Waitinput

Wend


Fragen zu irgendwelchen Sachen? Gibt es irgendo 997 Fehlermeldungen? Kann sich das jemand erklären???
 
23.04.2005  
 




Rolf
Koch
Hi AH
hab einfach mal ne *.txt Datei gewählt.

bei mir kommt nach LookupPrivilegeValue=1
der Wert 997.
Erklären kann ich dies aber nicht, da ich keinen Schimmer davon habe

Rolf
 
23.04.2005  
 



Hey Rolf...

Scheint aber trotzdem zu funktionieren => Rückmeldung ist ja 1. Wie siehts mit den anderen Rückmeldungen aus?

Ziel der Kiste = Ich will bei der Installation eines Programms festlegen können, welche User in welcher Art und Weise Zugriff auf die installierten Dateien haben.
Normalerweise wird der Zugriff von übergeordneter Stelle vererbt. Das kann bei eingeschränkten Rechten zu ganz erheblichen Problemen führen...
 
23.04.2005  
 




Rolf
Koch
Also sieht bei mir so aus:
KompilierenMarkierenSeparieren
Und da ich zu faul bin alles abzutippen, was in der Liste steht, habe ich Deinen Code ein bisschen um Arbeitselemente erweitert
KompilierenMarkierenSeparieren
Windowstyle 31
Windowtitle "File Security"
Window 0,0-640,440
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken" Öffnet Einstellprozess.
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" Stellt Privilegien ein.
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
Def @GetVolumeInformation(8) !"KERNEL32","GetVolumeInformationA"
Declare Filename$,Fehler&,SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,Needed#
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DECLARE LISTBOX&,TOCLIP&,TOCLIP$
LISTBOX&=CREATELISTBOX(%HWND,"",5,5,500,300)
TOCLIP&=CREATEBUTTON(%HWND,"CLIPBOARD",5,320,120,18)
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

    IF @LONG(LFLAGS#,0) | $8 = @LONG(LFLAGS#,0)

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    Long NewState#,0=1 Nur ein Privileg soll geändert werden
    Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
    LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#)
    ADDSTRING "Rückgabe von OpenProcessToken="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    STRING Privileg#,0="SeSecurityPrivilege"
    LET Fehler&=@LookupPrivilegeValue(System$,Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM SECURITY_INFORMATION#,4
    DIM PSECURITY_DESCRIPTOR#,1024
    DIM Needed#,4
    LONG SECURITY_INFORMATION#,0=$1 | $2 | $4
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,1024,Needed#)
    ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    @CloseHandle(@LONG(Token#,0))
    MOVELISTTOLIST(LISTBOX&)
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose SECURITY_INFORMATION#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#

Endif

While 0=0

    Waitinput

    IF GETFOCUS(TOCLIP&)

        CLEARCLIP
        CLEAR TOCLIP$
        TOCLIP$=GETSTRING$(LISTBOX&,0)

        WHILELOOP GETCOUNT(LISTBOX&)

            TOCLIP$=TOCLIP$+CHR$(10)+GETSTRING$(LISTBOX&,&LOOP)

        WEND

        PUTCLIP TOCLIP$

    ENDIF

Wend


Rolf
 
23.04.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.765 Betrachtungen

Unbenanntvor 0 min.
JR04.11.2014
Tommy30.01.2014
Andreas Koch05.09.2013
Stephie03.09.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie