stefankittel
Goto Top

Windows Freigabe als Write mit Read-Only realisieren?

Hallo,

sorry für diese Frage, aber es ist doch schon Freitag oder face-smile

Kann man einer nativen Windows-Freigabe eines Windows Servers (egal welche Version) es so realisieren, dass man Dateien schreiben und lesen kann, aber alle lösch und Änderungszugriffe nur virtuell ausgeführt werden?

Also quasi "SMB immutable" oder Schattenkopie in "Sofort bei Aktion" und nicht Zeitgesteuert?

Genauer
Datei test1.txt schreiben
/aktuell/test1.txt

Datei test1.txt lesen
/aktuell/test1.txt

Datei test1.txt überschreiben/ändern mit neuem Inhalt
/aktuell/test1.txt (neuer Inhalt)
/archiv/240301121448_test1.txt (alter Inhalt)

Datei test1.txt löschen
/archiv/240301121448_test1.txt (alter Inhalt1)
/archiv/240301121555_test1.txt (alter Inhalt2)


Oder mit Linux Simba.
Es muss kein AD oder ähnliches unterstützen. Einfach eine aktuelle SMB-Freigabe.

Danke

Stefan

Content-ID: 93113346824

Url: https://administrator.de/forum/windows-freigabe-als-write-mit-read-only-realisieren-93113346824.html

Ausgedruckt am: 25.12.2024 um 15:12 Uhr

MiSt
MiSt 01.03.2024 um 12:39:54 Uhr
Goto Top
Hallo,

wie wäre es andersrum?
Datei wird erzeugt > wenn man diese öffnet und ändert und dann speichern möchte, wird man direkt aufgefordert eine neue Datei anzulegen

Wenn das eine Alternative wäre, geht das mit den Windowsserver-Berechtigungen.


Gruß
Michael
chiefteddy
chiefteddy 01.03.2024 um 12:59:14 Uhr
Goto Top
Dokumentenmanagement-System mit Versionierung wäre wohl der professionelle Weg.

Jürgen
11078840001
11078840001 01.03.2024 aktualisiert um 13:35:12 Uhr
Goto Top
StefanKittel
StefanKittel 01.03.2024 um 15:16:44 Uhr
Goto Top
Zitat von @MiSt:
wie wäre es andersrum?
Datei wird erzeugt > wenn man diese öffnet und ändert und dann speichern möchte, wird man direkt aufgefordert eine neue Datei anzulegen
Nein, es geht darum eine Kopie einer Dateibasis zu erstellen oder/und als Datensicherungsziel von Veeam Free Endpoint.
StefanKittel
StefanKittel 01.03.2024 um 15:18:34 Uhr
Goto Top
Zitat von @chiefteddy:
Dokumentenmanagement-System mit Versionierung wäre wohl der professionelle Weg.
An dem Punkt bin ich inzwischen auch gerade. Ein DMS wo man per SMB oder WebDAV hochladen darf.
Was mich zu der Frage führt wie man denn die AD-Berechtigungen hier abbilden kann und wie man gelöschte Dateien abbilden kann. Das führe ich in einer anderen Frage ab fort.

Für eine Sicherung von Veeam Free Endpoint hilft das nicht.
Hatte ich vorher auch nicth gesagt face-smile

Stefan
StefanKittel
StefanKittel 01.03.2024 um 15:19:34 Uhr
Goto Top
Zitat von @11078840001:
Der Unified Write Filter (UWF) kann sowas.
Im Prinzip ja, aber in einer leicht anderen Richtung.
Das was ich suche wäre quasi ein Filter der ein Dateisystem oberhalb eines Dateisystem abbildet.
Das führt dann doch zu weit face-smile
11078840001
11078840001 01.03.2024 aktualisiert um 16:53:19 Uhr
Goto Top
Um Dateisystemoperationen abzufangen musst du schon früh in der Pipeline des FS eingreifen denn die anderen Events wie Filesystemwatcher etc. greifen erst wenn die Datei schon verändert wurde also zu spät um die vorhandene Datei weg zusichern .

Eigenen Dateisystem-Filter schreiben wäre hier möglich, die greifen vor der eigentlichen Dateioperation.
https://learn.microsoft.com/de-de/windows-hardware/drivers/ifs/filter-ma ...

Ungetestetes Beispiel für so einen Filter
#include <fltKernel.h>
#include <dontuse.h>
#include <suppress.h>

#define BACKUP_DIRECTORY L"\\Backup" 

PFLT_FILTER gFilterHandle;

NTSTATUS CreateBackupDirectory(_In_ PFLT_INSTANCE Instance)
{
    NTSTATUS status;
    UNICODE_STRING backupDirectory;
    OBJECT_ATTRIBUTES objAttr;

    RtlInitUnicodeString(&backupDirectory, BACKUP_DIRECTORY);

    InitializeObjectAttributes(&objAttr, &backupDirectory, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);

    status = FltCreateDirectory(Instance, NULL, &objAttr);

    if (status == STATUS_OBJECT_NAME_COLLISION)
    {
        status = STATUS_SUCCESS;  // Backup directory already exists, no need to create
    }

    return status;
}

FLT_PREOP_CALLBACK_STATUS
PreOperationCallback(
    _Inout_ PFLT_CALLBACK_DATA Data,
    _In_ PCFLT_RELATED_OBJECTS FltObjects,
    _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
)
{
    UNREFERENCED_PARAMETER(FltObjects);
    UNREFERENCED_PARAMETER(CompletionContext);

    NTSTATUS status;

    if (Data->Iopb->MajorFunction == IRP_MJ_WRITE || Data->Iopb->MajorFunction == IRP_MJ_SET_INFORMATION)
    {
        PFILE_OBJECT fileObject = FltObjects->FileObject;
        PFLT_FILE_NAME_INFORMATION fileNameInfo;

        status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &fileNameInfo);

        if (NT_SUCCESS(status))
        {
            if (fileNameInfo->Name.Length > 0)
            {
                // Construct backup file path with timestamp
                UNICODE_STRING backupFileName;
                WCHAR backupFilePath[MAX_PATH];

                SYSTEMTIME systemTime;
                GetLocalTime(&systemTime);
                swprintf_s(backupFilePath, MAX_PATH, L"%ws\\%04d-%02d-%02d_%02d-%02d-%02d_%ws", BACKUP_DIRECTORY,  
                    systemTime.wYear, systemTime.wMonth, systemTime.wDay,
                    systemTime.wHour, systemTime.wMinute, systemTime.wSecond, fileNameInfo->Name.Buffer);

                RtlInitUnicodeString(&backupFileName, backupFilePath);

                // Copy file to backup directory
                status = FltCopyFile(FltObjects->Instance, fileObject, NULL, backupFileName.Buffer, TRUE, NULL, NULL);
            }

            FltReleaseFileNameInformation(fileNameInfo);
        }
    }

    return FLT_PREOP_SUCCESS_NO_CALLBACK;
}

FLT_POSTOP_CALLBACK_STATUS
PostOperationCallback(
    _Inout_ PFLT_CALLBACK_DATA Data,
    _In_ PCFLT_RELATED_OBJECTS FltObjects,
    _In_ PVOID CompletionContext,
    _In_ FLT_POST_OPERATION_FLAGS Flags
)
{
    UNREFERENCED_PARAMETER(Data);
    UNREFERENCED_PARAMETER(FltObjects);
    UNREFERENCED_PARAMETER(CompletionContext);
    UNREFERENCED_PARAMETER(Flags);

    return FLT_POSTOP_FINISHED_PROCESSING;
}

NTSTATUS
DriverEntry(
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
)
{
    UNREFERENCED_PARAMETER(RegistryPath);

    NTSTATUS status;

    // Register the filter with the filesystem
    status = FltRegisterFilter(DriverObject, &FilterRegistration, &gFilterHandle);

    if (!NT_SUCCESS(status))
    {
        return status;
    }

    // Start filtering I/O operations
    status = FltStartFiltering(gFilterHandle);

    if (!NT_SUCCESS(status))
    {
        FltUnregisterFilter(gFilterHandle);
        return status;
    }

    // Create the backup directory
    status = CreateBackupDirectory(NULL);

    if (!NT_SUCCESS(status))
    {
        FltUnregisterFilter(gFilterHandle);
        return status;
    }

    return STATUS_SUCCESS;
}

NTSTATUS
FilterUnload(
    _In_ FLT_FILTER_UNLOAD_FLAGS Flags
)
{
    UNREFERENCED_PARAMETER(Flags);

    FltUnregisterFilter(gFilterHandle);

    return STATUS_SUCCESS;
}
Crusher79
Crusher79 01.03.2024 um 16:37:01 Uhr
Goto Top
Gelöschte Dateien ist eig. simpel. Kenne es mehr von ERP Systemen. Es wird nur ein Flag DEL o.ä. gesetzt. Die Inhalten bleiben unberührt.

Bei DMS entspräche das ja eher Workflow mit Freigeben. AD ist ja egal. Die Grupppen und User werden hineingezogen und logisch im System verknüpft. Oder es gibt eine Extra AD Gruppe, die wiederum die User beinhaltet und vom System interpretiert wird. Z.B. Watchguard VPN Gruppe, wo nur AD User herangezogen werden, die in der Gruppe stehen.

Löschen ist eine Sache. Aus den Verkehr kann man Dokumente ja auch anders ziehen! Stichwort: Dokumente lenken.

QM-Systeme können sowas auch. Leider sind wir hier an einen Punkt, wo man etliche DMS reinkippen kann. Docuware hat sowas ja aucht mit drin.

Rein virtuell wäre es eher die Richtung der Lenkung von Dokumenten.


Leider nie so ganz zum Laufen gebracht. Aber angeblich kann es auch alles: https://www.limbas.com/de/

Gab ja auch mal sowas wie Access als PHP. Kleine Frameworks. Drupal ist auch eines. Symfony....

Letzteres mal reingeschmissen, da du ja am Ende auf Linux kamst.


Mich juckt immer noch Limbas. Aber kenne keinen der damit arbeitet. Aber mit so einen Famework kann man auch viele Sauereien machen.


Zu DMS: Entweder billig gemachte und kostenlose Workflows, oder man zahlt pro Workflow Geld. Da verdienen sich ja alle eine goldenen Nase.

https://pydio.com/en

Aber ist halt auch was anderes. Zumindset eine Software drüber, die die Sachen regelt. Th. kann man ja dann sagen das bei DEL nur Flag und Hide gemacht werden soll, statt die zu löschen.

Aber ich setzte vor Jahren den kosten ajaxplorer ein. Kann sein das Pydio nun mehr kann!

https://pydio.com/en/automate/use-cases/intelligent-file-management


Rumgesponne: Virtuell, Browser fähig... da wäre Pydio ein Blick wert. Habs nur überflogen grad.
Dani
Dani 03.03.2024 um 12:15:42 Uhr
Goto Top
Moin,
Also quasi "SMB immutable" oder Schattenkopie in "Sofort bei Aktion" und nicht Zeitgesteuert?
ich könnte mir eine Kombination aus System.IO.FileSystemWatcher und VSS auf Basis von PowerShell vorstellen. Ob es funktioniert, kann ich dir leider nicht sagen - keine praktische Erfahrung.


Gruß,
Dani