Tengo un pequeño script bash:
#!/bin/bash
touch dummy.txt
Si ejecuto este script con sudo, creará el dummy.txtque estará protegido por la raíz .
Lo que quiero hacer es:
Independientemente de si este script se ejecuta con sudoun usuario normal o no, el archivo nodummy.txt debe estar protegido por root.

chownychmoden su secuencia de comandos para establecer la propiedad y los permisos que desee.Respuestas:
Se podría probar si el script se ejecuta mediante
sudoel uso de losEUIDySUDO_USERlas variables, y luego ejecutartouchcomoSUDO_USERsi es verdad - algo así comofuente
==utiliza para la comparación de cadenas. Como$EUIDse supone que devuelve un valor entero, le recomiendo que use la-edcomparación. Se permiten espacios en los nombres de usuario , por lo que probablemente cite la$SUDO_USERvariable. De lo contrario, buena respuesta: esto es algo que personalmente usaría.sudo -usi detecta que se está ejecutando como root. El OP habló sobre tener múltiples comandos en un script. Pero tenga cuidado para evitar un bucle infinito en los errores.[[...]]lo que no es estrictamente necesario citar la variable dentro de la declaración si gues @Serg y yo-edera un error tipográfico para-eq-eq. No sabía[[que no tiene división de palabras. Gracias. Personalmente, todavía citaría por el bien de los buenos hábitos de scriptingSi su script no debe ejecutarse como
root, la forma más segura de resolver el problema es abortar la ejecución del script desde el principio:Opcionalmente, puede volver a ejecutar su script como usuario alternativo (por ejemplo
sudo -u FALLBACK_USER "$0") en lugar de simplemente abortar.Intentar corregir las peculiaridades de los comandos individuales hará que su script sea innecesariamente complejo y difícil de depurar. Cada vez que lo modifique, tendrá que hacer todas las pruebas dos veces (como usuario habitual, luego como
root) y corregir todos losrooterrores relacionados que surjan. No es una solución a prueba de futuro, por así decirlo.fuente
De forma predeterminada, los archivos creados con root root tienen permisos como este:
Aquí el archivo pertenece al usuario raíz y al grupo raíz, y puede leerse y escribirse desde la raíz, pero solo otros pueden leerlo.
El enfoque más simple sería volver al
chownarchivo al usuario original.Puede usar una
$SUDO_USERvariable a la que solo se puede acceder cuandosudose llama, de esta manera:Si está ejecutando el script como usuario normal, la
chownparte no es necesaria en absoluto, por lo que es posible que desee considerar el uso de la instrucción if o la&&prueba para probar el caso cuando el script se ejecuta como raíz y hacer algo en este sentido:Lo anterior es un enfoque recomendado. Hay otros, como usar
chmodpara cambiar los permisos de lectura-escritura-ejecución para usuarios y grupos, pero no se recomienda.fuente
sudo, entonces no, no puede ignorarlo. Su opción es ejecutar el script como usuario normal (que no entiendo por qué no lo hace, ya que simplemente está creando un archivo para su usuario aquí) o cambiar la propiedad del archivo como lo muestro en mi respuesta.