su y sudo en una secuencia de comandos shell
Pregunta
Hay una secuencia de comandos shell (/ bin / sh, no bash) que requiere permisos de raíz para su ejecución.
Si se maneja un usuario normal que debería pregunta al usuario una contraseña para obtener acceso root y volver a correr en sí.
Ahora se utiliza el siguiente código:
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
Esto funciona bien, pero hay algunos OS como Ubuntu que no tiene contraseña de root en absoluto. Por otro lado, una gran cantidad de sistemas de utilizar sudo para los permisos de root.
La pregunta es:. ¿Cómo puede detectar si la secuencia de comandos para su uso su
o sudo
sin pedir al usuario que introduzca demasiado contraseñas (por ejemplo, introducir la contraseña sudo
, si falla - carrera su
)
Solución
No hay una manera a prueba de balas de hacer esto, ya que cualquier distribución de archivos puede poner en la forma que quiera. Debian y Ubuntu suelen colocar los archivos del sistema en directorios distintos de Red Hat, por ejemplo. Es mucho más fácil de personalizar la secuencia de comandos para el sistema operativo que está instalado.
Otros consejos
No debería. Si la escritura requiere privilegios de root, se debe ejecutar como root. Es negocio del usuario cómo va a lograr eso -. Usando su, sudo o algún otro mecanismo
Si usted se refiere a cuestiones de seguridad y no quiere hacer todo, desde la raíz, se puede eliminar privilegios de root para aquellas partes.
Puede configurar la cuenta de que no necesita una contraseña para sudo en / etc / sudoers:
yourusername ALL=(ALL) NOPASSWD: ALL
Si no quieres hacer eso, puede obligarlos a ejecutar el script como root. Añadir algo como esto a la parte superior de la secuencia de comandos de la shell:
if [ "$UID" -ne 0 ]; then
echo "You must be root to run this script"
exit 1
fi
De esta manera, el usuario puede llegar a ser root como ellos elijan (su o sudo).
Crear un archivo .sh más de este archivo de llamar a su archivo original, como .sh
-
su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
Comprobar si está instalado ist sudo
SU='su'
which sudo > /dev/null && SU='sudo'
Si bien esto no responde plenamente a su pregunta, vale la pena señalar que se puede comprobar si el paquete sudo se instala utilizando la siguiente:
sistemas basados ??en Debian:
dpkg -s sudo
sistemas basados ??en RPM:
rpm -q sudo