• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien unlöschbar machen

Wieder mal ein schwieriges Problem.

Ich habe eine Samba-Freigabe, die das Backup-Laufwerk für alle Windows-Kisten bildet. Die Backup-Scripte schieben brav ihre Daten da rein, leider ist aber möglich, diese auch wieder zu löschen. Das ist natürlich schlecht für ein Backup.

Die gesuchte Lösung wäre also, das auf der Freigabe Dateien und Verzeichnisse angelegt, aber nicht mehr geändert oder gar gelöscht werden können.

Meine jetzige Lösung besteht aus einem Cronjob, der einmal am Tag (oder besser gesagt, in der Nacht) den Owner der Dateien und Verzeichnisse auf root ändert, und schon kann keiner mehr darin rumrühren.

Die bessere Lösung wäre natürlich, wenn man dies in Samba bewerkstelligen könnte. Leider bin ich da bis jetzt noch nicht weiter gekommen.

Any idea?
 

Yehudi

Guru
Meines Wissens geht das nicht. Da immer der Ersteller einer Datei auch Besitzer ist, und auf diese Datei alle Rechte hat. Die Schreibrechte sind auch die Löschrechte. Damit ist das eigentlich unmöglich. Nur root darf die Benutzer ändern. Und grundsätzlich gilt:
Die Rechte auf dem Linuxrechner haben immer gegenüber Samba Vorrang.
Ich denke Deine Lösung ist die Beste, Du könntest sie noch damit verfeinern, dass Du die Zeit des cronjobs verkürzt.
 

na-cx

Hacker
Es könnte sein, dass dieses Vorhaben mit ACL's gelingen könnte.

Alternative:
Einen anderen Sicherungspfad auf dem Server anlegen und einen neuen Benutzer dazu. Nur der neue Benutzer sollte schreibende Zugriffsrechte darauf haben (und root natürlich).
Das Backupscript per Taskplaner unter dem neuen Benutzer ausführen lassen.
Natürlich sollte man diesen Benutzeraccount nicht für die normale Arbeit verwenden.
 

rolle

Guru
Eventuell könnte man auch die Backupscripte dahingehend erweitern, daß sie bei Abschluß glecih ein Script aufrufen, das die Rechte entzieht.
Du könntest auch mal mit 'force create mode' und 'force directory mode' in der smb.conf in der Freigabe rumspielen, eventuell kannst Du zwar das Anlegen der Dateien erlauben, diese werden dann aber ohne Schreibrechte angelegt.Keine Ahnung, ob das klappt, einen Versuch wäre es aber wert.
 

Yehudi

Guru
Daran hatte ich erst auch gedacht:
http://www.oreilly.de/german/freebooks/samba2ger/ch08.html#979681

aber:

http://gertranssmb3.berlios.de/output/AccessControls.html#id2539145

Weil UNIX nur die Bits „r“, „w“ und „x“ einer NT-ACL unterstützt, werden diese ignoriert, falls andere NT-Sicherheitsattribute wie Löschzugriff ausgewählt wurden, falls diese auf einem Samba-Server angewandt werden.
 

Yehudi

Guru
Es gebe noch eine Möglichkeit, die ich aber in der Praxis noch nie probiert habe, und gerade drüber gestolpert bin: Sticky-Bit.

Das "t" steht für das Sticky-Bit. Damit werden die Dateien automatisch als root-Besitzer angelegt, wenn das Verzeichnis diesem gehört, alle können alles nur das Stick-Bit verhindert, das jemand anderes als der Besitzer die
Dateien löschen kann.

In der Praxis kommt das in den tmp Verzeichnissen vor.

Code:
yehudi@linux:~> ls -ld /tmp
drwxrwxrwt  55 root root 3584 2006-06-24 10:45 /tmp
yehudi@linux:~>

Da dieses Verzeichnis root gehört, kann auch nur root löschen.

Hier ein Link zwecks der Zugriffsgeschichte:
http://www.linux-club.de/viewtopic.php?t=1957&

gib mal ein Feedback, ob es geklappt hat.
 

stka

Guru
Wenn die Dateien als root kopiert werden, dann gehören die doch dem root wenn dann wie yehudi schon sagt im Verzeichnis das t Bit gesetzt ist, erhalten alle Dateien und Unterverzeichnis auch das t-Bit. Durch das t-bit kann nur der Besitzer und der root die Einträge löschen, da root der Besitzer ist, hat sich das Problem erledigt.
Es gibt noch ein Möglichkeit und zwar kann mit "chattr" noch weitere Attribute setzen (man chattr) mit hilfe der Attribute kann ich eine Datei "unlöschbar" machen. Wenn die Datei gelöscht werden soll muss der root (denn nur der darf das Attribut verändern) das Attribut erst wieder entfernen.
 

Yehudi

Guru
Meine Idee war es ein Verzeichnis welches root gehört anzulegen, und dieses mit "t"bits zu versehen. Das wird auf alle Kindsverzeichnisse übertragen, und jeder, der dort eine Datei anlegt, ist dann nicht mehr Besitzer dieser Datei. Da wie gesagt ja geschrieben werden darf, aber nur die Dateien bedingt durch das Elternverzeichnis root als Besitzer bekommen. Im Prinzip bestätigt die Aussage von stka das ja.
Dieses Verzeichnis wird mit einem normalen Samba-User als Freigabe eingerichtet, und dieser darf nicht root sein. Bei Samba werden alle Rechte auf die Freigabe vergeben, und dann sollte das ganze funktionieren.
 

Yehudi

Guru
Ich habe die Varianten sticky bit und chattr mal durchprobiert. Das Prinzip klappt aus einem ganz einfachen Grunde nicht:

Das Verzeichnis erhällt entsprechende Rechte, und sämtliche zu dem Zeitpunkt vergebenen Dateien und Verzeichnisse erhalten die gleichen Rechte. Zu diesem Zeitpunkt kann ich auch alle Benutzer auf root ändern, aber sobald ich zu einem späteren Zeitpunkt eine neue Datei anlege, welche von einem anderen Benutzer erstellt wurde erhält sie auch die Rechte von diesem Benutzer, und bleibt auch im Besitz des Benutzers.

Um den Effekt zu erhalten, müßte automatisch sobald die Datei in das Verzeichnis gelegt wird der Benutzer zu root gewandelt werden bei sticky bit, oder bei chattr die Datei automatisch entsprechend versehen werden. Ob das ganze mit einem Programm oder Script sich umsetzen läßt, welches in dem Ordner eine neue Datei aufspürt und diese in ein oder der anderen Form umwandelt kann ich nicht sagen.
 
OP
Z

Zitronenquark

Newbie
So, es hat etwas gedauert, aber ich habe eine Lösung gefunden (fast).

Wichtig war mir, dass der normale Benutzer nicht die Backups auf dem Samba-Server löschen kann.

So geht es:
In unserem Beispiel heisst der normale Windows-Nutzer "Claudia". Dieser wird auch als User auf dem Samba-Server angelegt und er erhält ein Samba-Passwort.

Außerdem wird ein weiterer Linux-User angelegt, hier "Dumpfbacke", dieser erhält auch ein Samba-Passwort. Weiterhin erhält dieser eine eigene Gruppe.

Beide user gehören zur Gruppe users.

Die /etc/group sieht dann so aus:
Code:
users:x:100:Claudia,Dumpfbacke
Dumpfbacke:x:1001:
Die Backups kommen bei mir auf eine extra Platte (sda1) in ein Verzeichnis "backup". Es gelten folgende Zugriffsrechte:
Code:
drwxrwxr-x root users backup
Da drin gibt es einen Ordner "Claudia" (es gibt noch mehr Ordner, für jeden User einen). Zugriffsrechte sind die gleichen.

Die smb.conf sieht so aus:
Code:
[global]
	workgroup = VEREIN
	server string = Backup
	os level = 1
	preferred master = No
	local master = No
	domain master = No
	ldap ssl = no
	valid users = Claudia, Dumpfbacke
	read list = Claudia
	write list = Dumpfbacke
	hide dot files = No

[backup]
	comment = backup
	path = /sda1/backup
	read only = No
	acl check permissions = No
	create mask = 0775
	force create mode = 0775
	directory mask = 0775
	force directory mode = 0775
	case sensitive = No
	map readonly = No
Das Backup-Skript auf der Windows-Kiste startet mit:
Code:
NET USE W: /DELETE
NET USE W: \\10.0.0.3\backup hierstehtdasPasswortvonDumpfbacke /user:Dumpfbacke
Es ist mir klar, dass dies sicherheitstechnisch nicht die tollste Lösung ist, da das Passwort im Klartext im Backup-Skript steht. Wenn aber Claudia über die Netzwerkumgebung auf den Samba-Server zugreift, kann sie alles lesen, aber nichts schreiben/löschen.
 
Oben