Ich kann sudo (über die sudoers-Datei) so konfigurieren, dass ein Benutzer die Befehle chown
und chmod
für eine beliebige Datei oder ein beliebiges Verzeichnis im System ausführen kann. Ich möchte jedoch nur einem Benutzer die Berechtigung erteilen, diese Befehle für Dateien auszuführen, die sich unterhalb des /var/www/html
Verzeichnisses befinden.
Wie kann ich privilegierte Befehle so einschränken, dass der Benutzer sie nur in einem vorgegebenen Verzeichnis ausführen kann?
Beispiel: Mit dem folgenden Befehl werden 777 Berechtigungen für die index.html
Datei erteilt .
sudo chmod 777 /var/www/html/index.html
Jetzt möchte ich zwei Aktionen ausführen
Schränken Sie
sudo
so ein, dass der Benutzer nurchmod
undchown
von innen ausführen kann/var/www/html
Der Benutzer darf diese Befehle nicht an anderer Stelle im System ausführen (z. B. können die Befehle nicht in
/var/www
oder ausgeführt werden/var/ftp
).
www-data
Gruppe , die die Notwendigkeit zur Beseitigungchmod
/chown
alles?chown
. Abgesehen davon sehe ich keinen Grund, warumchmod
als root ausgeführt werden muss.Antworten:
Was Sie fragen, ist schwierig, wenn nicht unmöglich. Selbst wenn Sie die Anwendung von
chown
undchmod
auf Dateien in einem bestimmten Verzeichnis beschränken würden, könnte jemand einen symbolischen Link übergeben und so Dateien an jeder beliebigen Stelle beeinflussen.Glücklicherweise ist es sehr wahrscheinlich, dass das, was Sie versuchen, nicht die richtige Lösung für Ihr eigentliches Problem ist, und es gibt eine andere Methode, die funktioniert.
Normalerweise werden Benutzer, die zusätzliche Berechtigungen zum Erstellen und Ändern von Dateien benötigen
/var/www
, einer Gruppe hinzugefügt (häufigwww-data
oder Sie haben möglicherweise unterschiedliche Gruppen für verschiedene Teile der Site). Sie können die Verzeichnisse group owner und setgid verwenden: Damitchgrp www-data /var/www/html; chmod g+ws /var/www/html
kann jeder in derwww-data
Gruppe in das/var/www/html
Verzeichnis schreiben , und die in diesem Verzeichnis erstellten Dateien gehören derwww-data
Gruppe anstelle der primären Gruppe des Benutzers, der die Datei erstellt hat. Dies ist jedoch nicht sehr flexibel.Was Sie wahrscheinlich tun sollten, ist Zugriffssteuerungslisten für Dateien unter einzurichten
/var/www
. Stellen Sie zunächst sicher, dass ACLs aktiviert sind: Das Dateisystem, das aktiviert/var/www
ist, muss mit deracl
Option bereitgestellt werden. Weitere Informationen hierzu finden Sie unter Alle neuen Dateien in einem Verzeichnis für eine Gruppe zugänglich machen . Installieren Sie auch die ACL-Dienstprogramme (getfacl
undsetfacl
). Geben Sie/var/www/html
dann den Benutzern, die sie haben sollen , zusätzliche Berechtigungen für den Baum unter . Sie können Benutzer-ACLs festlegen, aber es ist oft einfacher, Benutzer, die die gleichen Rechte für einen Teil des Dateisystems haben sollen, in eine Gruppe aufzunehmen und ACLs für diese Gruppe festzulegen. Wenn die Benutzer in der Gruppehtml-writers
beispielsweise Lese- und Schreibzugriff auf den Baum haben sollen, gehen Sie wie folgt vor/var/www/html
:quelle
Sie können den Befehl, der von "myuser" verwendet werden soll, mit allen Argumenten in der
/etc/sudoers
Datei einschränken, indem Sie den folgenden Befehl eingebenvisudo
:Aktivieren Sie die Protokollierung für jeden Vorgang, indem Sie Folgendes hinzufügen:
Beispielausgabe:
Wenn Sie sudo verwenden, sollte die Voraussetzung sein, dass "myuser" eine vertrauenswürdige Person ist. Seien Sie vorsichtig mit Dateiberechtigungen. Es gibt keine einfache Möglichkeit, einen böswilligen sudo-Benutzer daran zu hindern, eine Datei von einer externen Ressource aus zu verknüpfen und zu ändern.
quelle
su - prashant
odersu prashant
?sudo /bin/chmod 666 /var/www/html/../../../etc/passwd
Und wenn Sie das irgendwie in Ordnung bringen,ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
Es gibt eine relativ einfache Möglichkeit, dies zu tun, indem Sie ein Bash-Skript (oder eine Shell Ihrer Wahl) erstellen, um die an einer bestimmten Datei oder einem bestimmten Verzeichnis vorgenommenen Änderungen einzuschränken.
In Ihrem Beispiel würde das so aussehen:
Dann würden Sie die sudoers-Datei ändern, damit www-data / usr / local / bin / mychmod ausführen kann.
Beachten Sie jedoch, dass das Zulassen von Benutzereingaben (z. B. das Ändern der Datei oder des Verzeichnisses in diesem Bereich durch einen Benutzer) äußerst gefährlich ist und Sie wissen müssen, wie Sie Injektionsangriffe herausfiltern können, wenn Sie etwas Ähnliches tun möchten Das. Ein Angreifer kann auf diese Weise problemlos einen Befehl als root ausführen, wodurch die Sicherheit Ihres Systems beeinträchtigt wird.
quelle