Angenommen, ich habe ein Verzeichnis /opt/expe
und ich möchte, dass jeder Benutzer .txt-Dateien darauf erstellt. Ich möchte, dass jeder Benutzer so etwas eingibt:
$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
$ ls -cal /opt/expe
total 12
drwxr-xr-x 2 root root 4096 Jul 29 19:27 .
drwxr-xr-x 6 root root 4096 Jul 29 19:14 ..
-rwsr-sr-t 1 root root 65 Jul 29 19:29 create_file.sh
-rw-r--r-- 1 user1 root 0 Jul 29 19:27 my_txt_file.txt
Ich versuche das mit einem Sudoer
$ whoami
user_sudoer
$ cat /opt/expe/create_file.sh
touch /opt/expe/$file_name.txt
chown $USER /opt/expe/$file_name.txt
$ chmod a+x /opt/expe/create_file.sh
$ chmod a+t /opt/expe/create_file.sh
$ chmod a+s /opt/expe/create_file.sh
$ chmod a+X /opt/expe/create_file.sh
Dann habe ich mit einem Nicht-Root-Benutzer Folgendes erhalten:
$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
touch: cannot touch '/opt/expe/prueba_txt.txt': Permission denied
Kann ich sowas machen. Ich möchte so etwas wie postgres SECURITY DEFINER
Konzept.
Akzeptierte Antwort:
Ich kenne mich mit Postgres nicht genug aus, aber ich sehe mindestens 4 Optionen:
-
Ändern Sie die Berechtigungen von /opt/expe mit chmod, damit alle Benutzer Dateien in diesem Verzeichnis erstellen können.
-
Erstellen Sie eine separate Gruppe für die Benutzer, die dort schreiben müssen, und ändern Sie die /opt/expe-Gruppenberechtigung mit chmod, um dieser Gruppe zu erlauben, dort zu schreiben.
-
Erstellen Sie eine separate Gruppe und fügen Sie eine sudoers-Regel hinzu, damit sie dieses Skript ausführen können, wie beispielsweise hier beschrieben:Wie kann der Benutzer einen verschlüsselten Dateicontainer in VeraCrypt einhängen?
-
Verwenden Sie Etikettensicherheit für eine feinkörnige Zugriffskontrolle. Hier ist eine kurze Beschreibung der Sicherheitsetiketten und einige weiterführende Links:https://unix.stackexchange.com/questions/53028/what-are-ext4-security-labels
Bitte beachten Sie, dass die Berechtigung zum Erstellen/Entfernen von Dateien eine Eigenschaft des Verzeichnisses und nicht der Datei selbst ist.