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)

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top