Supouse ho una directory /opt/expe
e voglio che qualsiasi utente crei file .txt su di esso. Voglio che qualsiasi utente digiti qualcosa del genere:
$ 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
Lo provo con un 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
Quindi con utente non root ho ottenuto:
$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
touch: cannot touch '/opt/expe/prueba_txt.txt': Permission denied
Posso fare qualcosa del genere. Voglio qualcosa come postgres SECURITY DEFINER
concetto.
Risposta accettata:
Non ho abbastanza familiarità con Postgres, ma vedo almeno 4 opzioni:
-
Modifica i permessi di /opt/expe con chmod per consentire a tutti gli utenti di creare file all'interno di questa directory.
-
Crea un gruppo separato per gli utenti che devono scrivere lì e modifica l'autorizzazione del gruppo /opt/expe con chmod per consentire a questo gruppo di scrivere lì.
-
Crea un gruppo separato e aggiungi la regola sudoers per consentire loro di eseguire questo script, come descritto ad esempio qui:Come può un utente montare un contenitore di file crittografato in VeraCrypt?
-
Usa la sicurezza delle etichette per un controllo dell'accesso a grana fine. Ecco una breve descrizione delle etichette di sicurezza e alcuni ulteriori collegamenti:https://unix.stackexchange.com/questions/53028/what-are-ext4-security-labels
Tieni presente che il permesso di creare/rimuovere file è una proprietà della directory e non del file stesso.