Supongamos que tengo un directorio /opt/expe
y quiero que cualquier usuario cree archivos .txt en él. Quiero que cualquier usuario escriba algo como esto:
$ 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
Intento esto 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
Luego, con un usuario no root, obtuve:
$ whoami
user1
$ export $file_name=my_txt_file
$ /opt/expe/create_file.sh
touch: cannot touch '/opt/expe/prueba_txt.txt': Permission denied
¿Puedo hacer algo como esto? Quiero algo como postgres SECURITY DEFINER
concepto.
Respuesta aceptada:
No estoy lo suficientemente familiarizado con Postgres, pero veo al menos 4 opciones:
-
Cambie los permisos de /opt/expe con chmod para permitir que todos los usuarios creen archivos dentro de este directorio.
-
Cree un grupo separado para los usuarios que necesitan escribir allí y cambie el permiso de grupo /opt/expe con chmod para permitir que este grupo escriba allí.
-
Cree un grupo separado y agregue la regla sudoers para permitirles ejecutar este script como se describe, por ejemplo, aquí:¿Cómo puede el usuario montar un contenedor de archivos cifrados en VeraCrypt?
-
Utilice la seguridad de etiquetas para un control de acceso detallado. Aquí hay una breve descripción de las etiquetas de seguridad y algunos enlaces adicionales:https://unix.stackexchange.com/questions/53028/what-are-ext4-security-labels
Tenga en cuenta que el permiso para crear/eliminar archivos es una propiedad del directorio y no del archivo en sí.