Tengo un pequeño script bash:
#!/bin/bash
touch dummy.txt
Si ejecuto este script con sudo
, creará el dummy.txt
que estará protegido por la raíz .
Lo que quiero hacer es:
Independientemente de si este script se ejecuta con sudo
un usuario normal o no, el archivo nodummy.txt
debe estar protegido por root.
chown
ychmod
en su secuencia de comandos para establecer la propiedad y los permisos que desee.Respuestas:
Se podría probar si el script se ejecuta mediante
sudo
el uso de losEUID
ySUDO_USER
las variables, y luego ejecutartouch
comoSUDO_USER
si es verdad - algo así comofuente
==
utiliza para la comparación de cadenas. Como$EUID
se supone que devuelve un valor entero, le recomiendo que use la-ed
comparación. Se permiten espacios en los nombres de usuario , por lo que probablemente cite la$SUDO_USER
variable. De lo contrario, buena respuesta: esto es algo que personalmente usaría.sudo -u
si 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-ed
era 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 losroot
errores 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
chown
archivo al usuario original.Puede usar una
$SUDO_USER
variable a la que solo se puede acceder cuandosudo
se llama, de esta manera:Si está ejecutando el script como usuario normal, la
chown
parte 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
chmod
para 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.