Italia
Foro

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 - Mostra 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 circa 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+Password vorhanden!) um File 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), potrebbe 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 per bestimmte User und Gruppen freigeben oder den Eigentümer auf (einen evtl. modificato) Loginnamen anpassen.

Viele Installer scheitern bei Usern mit eingeschränkten Rechten, weil diese bei der Installation eines Programmi nicht die Zugriffsrechte per die Files des installierten Programmi anpassen.
Installiert ein Admin per 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 Fonte in irgendeiner Programmiersprache circa 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 per 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 per Files gelöst, potuto man das per alle anderen Bereiche des Betriebsystems auch anwenden. Da ich hier nur bedinngt circa 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 per 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 può, 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 File 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 File 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 File |*.*|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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.967 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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