Ich sichere Server auf einem Sicherungsserver. Jeder Server, der gesichert wird, hat ein eigenes Konto auf dem Sicherungsserver, und die Dateien werden synchronisiert. Es ist wichtig, dass die Berechtigungen intakt bleiben (mit rsync -p), um die Wiederherstellung zu vereinfachen.
Ich versuche ein Skript zu erstellen, das die Dateien lesen und Statistiken erstellen kann. Ich mag es nicht, dass dieses Skript unter dem Root-Benutzer ausgeführt wird, und es ist auch unmöglich, es für jeden Backup-Benutzer auszuführen, da das Skript alle Dateien von allen Benutzern lesen kann. Dies führt jedoch zu einem Problem, wenn eine Datei beispielsweise chmodded 600 ist. Ich möchte keine Berechtigungen berühren, aber ein anderer Benutzer außer root und der Eigentümer können sie nicht lesen.
Ein bestimmter Benutzer ohne Rootberechtigung sollte in der Lage sein, alle Dateien in einem Verzeichnis oder einer Partition zu lesen, unabhängig von den Berechtigungsstufen (und der Eigentümer der Dateien sollte keine Möglichkeit haben, dies zu verhindern). Gibt es einen Weg, dies zu erreichen? Ich verwende FreeBSD mit einem ZFS-Volume.
quelle
Antworten:
Verwenden Sie
sudo
.Wenn Ihre
sudoers
Datei einen genauen und spezifischen Befehl enthält, muss der Befehl genau so aufgerufen werden, wie er in der Datei aufgeführt ist. Andernfallssudoers
wird er abgelehnt.Z.B:
In diesem Beispiel kann der Benutzer
backup
den Befehl genau wie gezeigt ausführen:Wenn sie
sudo rsync...
anstelle dessudo /usr/bin/rsync
Befehls aufrufen, schlägt dies fehl oder wenn die Flags oder Pfade unterschiedlich sind, schlägt der Befehl fehl.Wenn Sie dies in einem Skript tun, möchten Sie die kennwortlose Verwendung dieser Befehle aktivieren:
Weitere Informationen finden Sie in der
sudoers(5)
Manpage unterCmnd_list
.quelle
pfexec
. Aber da Sie auf BSD sind,sudo
müssen Sie tun.Sie können eine
suid
Version schreibencat
, die nur von Ihrem Sicherungsbenutzer ausführbar ist (machen Sie eine Gruppe exklusiv für den Sicherungsbenutzer und machen Sie die ausführbare Datei nur für diese Gruppe lesbar). Auf diese Weisecat
können Sie nur Dateien in dem Verzeichnis lesen, an dem Sie interessiert sind. (Sie möchten wahrscheinlich symbolische Links nicht zulassen und auf Tricks wie achten/dir/../otherdir/
.)Dann kann Ihr Skript diese ausführbare Datei verwenden, um Dateien ohne Root-Rechte zu lesen.
quelle
WARNUNG: Wie Stephane in den Kommentaren unten ausgeführt hat, können die Eigentümer der Dateien die ACL weiterhin widerrufen.
Wenn Sie Root-Zugriff auf den Computer haben, können Sie dies mit ACLs tun :
Dadurch erhalten
USERNAME
Sie Lesezugriff auf alle Dateien und Verzeichnisse unter/path/to/directory
.quelle
Bindfs ist ein FUSE- Dateisystem, das Ansichten eines Verzeichnisbaums mit unterschiedlichen Berechtigungen und Besitzverhältnissen bereitstellt. Es gibt keinen Port für FreeBSD, aber Sie können aus dem Quellcode kompilieren.
Um dem Benutzer
backupper
(und nur diesem Benutzer) eine Ansicht zu geben,/some/files
wo alle Dateien lesbar sind, hängen Sie eine weltweit lesbare Ansicht von/some/files
in ein privates Verzeichnis von einbackupper
.quelle
ZFS verfügt hierfür über einige Mechanismen.
Einer der Mechanismen ist noch in Arbeit und noch nicht implementiert, ermöglicht jedoch das Mounten eines Datasets mit einer 'Eigentümer'-Überschreibung. In diesem Fall können Sie einen Snapshot klonen, ihn mit dem für den Sicherungsbenutzer überschriebenen Eigentümer bereitstellen, ihn sichern und dann den Klon zerstören. Der Nachteil ist, dass Sie nicht den tatsächlichen Besitz der Dateien sichern.
Die beste Lösung sind wahrscheinlich die ACLs im ZFS-nfsv4-Stil
quelle
Ich habe zwei Ideen, wie dieses Problem mit FreeBSD-spezifischen Technologien gelöst werden kann, obwohl ich es auch nicht ausprobiert habe:
Verwenden Sie Capsicum. Dies ist meine bevorzugte Methode. Da es kürzlich auf Linux portiert wurde, sollte es auch dort funktionieren. Es würde so gehen:
Verwenden Sie die obligatorische Zugriffskontrolle. Dies funktioniert unter Linux AFAIK nicht und ist schwieriger einzurichten. Es würde so gehen:
ugidfw Betreff hinzufügen uid root jailid BACKUP_JAIL_ID mode rsx
quelle