Estoy trabajando con un miembro de soporte para un producto, y él insiste en que necesito ser root para instalar una serie de parches, y que sudo no funcionará; él no proporciona una razón, pero parece muy firme en sus creencias. Superusuario de navegación No puedo determinar ningún motivo posible para que este sea el caso, y como confirmación, cuando ejecuto:
sudo -l
Yo obtengo:
...
User [MY USERNAME] may run the following commands on this host:
(ALL) ALL
Según tengo entendido, obtener acceso del equipo de Linux / servidor para ser realmente root no es un proceso inmediato, por lo que preferiría instalarlos yo mismo.
¿Hay alguna razón práctica por la cual sudo se comportaría de manera diferente a la raíz para instalar software en un servidor?
sudo
los guiones, ya que los guiones están escritos actualmente. Si ese es el caso, entonces la respuesta sds' podría ser más útil para usted:sudo su -
.Respuestas:
Depende en gran medida de cómo llame a su programa con
sudo
osu
.Por ejemplo, en el sistema en el que estoy en este momento:
Donde [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Las variables de entorno se restablecen para 1 y 5, tomadas de $ USER en 2,3,4.
Por lo que una secuencia de comandos o un programa que se puso en marcha con una opción diferente puede ver diferente
$PATH
,$HOME
, su cáscara puede leer diferentes.bashrc
,.profile
y las variables de entorno. Lee el archivo relacionado con el$HOME
. Cada usuario puede modificar su entorno de una manera diferente (variables$PATH
, .bashrc, .profile, .bash_profile, alias ...). En particular, un usuario puede tener un orden diferente de los directorios en el suyo$PATH
y, como consecuencia, un script puede ejecutar un comando, por ejemplo, en/home/$USER/bin
lugar del que se encuentra en la ruta esperada desde la raíz.Puede ejecutar el programa con el
sudo -i
que inició sesión como rootsu -
, pero puede tener un comportamiento diferente si lo ejecuta consudo MyCommand
o consu -c MyCommand
.De
man su
:Del hombre
sudo
fuente
sudo
puede estar limitado por los permisos en el archivo sudoers frente a hacer cosas como root no tiene esas limitaciones? La última cita de bloque puede implicar eso, pero si lo entiendo correctamente, parece otra diferencia sustancial más allá del medio ambiente (¿o tal vez por el medio ambiente?).Si tiene
sudo
acceso completo , puede comenzar aroot
usarsudo su -
, por lo que el punto de seguridad es discutible.De hecho, hay una manera de discernir la diferencia entre un programa ejecutado como
root
y un programa ejecutado bajosudo
- usandogetuid
vsgeteuid
- pero este es un truco artificial. ¿Por qué un sistema de parches haría eso?fuente
su -
eso, es posible que desee utilizarlosudo -i
para tener el mismo entorno que al iniciar sesión directamente.sudo myscript
, mantendrá $ PATH y las variables de entorno del shell en el que se encuentra. Si corre consudo -i myscript
corre como si iniciara sesión como root. Vea la respuesta con nuestro _zoo de llamadas :-) _sudo
que iniciar sesión como rootgeteuid()
ygetuid()
son diferentes entre sí es un mito. su y sudo cambian las ID de usuario reales y efectivas a las del usuario de destino antes de ejecutar el comando o shell especificado, excepto en la situación muy inusual en la que los ha configurado explícitamente para que se comporten de otra manera. Puede verificar esto (para sudo) ejecutandosudo id -u
ysudo id -ru
(ambos muestran 0), leyendo sudo (8) (bajo EJECUCIÓN DE MANDO ), o escribiendo un programa de prueba .Hay algunas diferencias si está obteniendo un shell raíz, como lo señaló @Hastur.
Si no está obteniendo un shell raíz, entonces hay más diferencias. El miembro de soporte puede tener experiencia tratando de hacer cosas como
sudo patch -p0 < /root/patch.file
dondepatch
se ejecuta como root, pero<
(tubería de un archivo) no lo es.fuente
sudo /bin/bash -c "./patch -p0 < /root/patch"
. Aún más delicado es el caso cuando usa la redirección para crear un archivo>
. En la primera forma, creará un archivo que pertenece al usuario solo si tiene suficiente derecho para escribir en el directorio final. De esta última manera, creará un archivo propiedad de root ... el lado oscuro de Unix ;-)Creo que cuando uso el acceso sudo, se crea un archivo de registro, sin embargo, cuando se ejecuta directamente a través del acceso raíz, no lo hay.
fuente
Depende de cuán fino desee que sea el acceso raíz. Si tiene varios usuarios que realizan diferentes tareas en un sistema, entonces sudo sería más ideal. Un ejemplo que uso con frecuencia es la necesidad de reiniciar una aplicación o base de datos. La seguridad siempre se hace mejor menos privilegiada. Uso grupos y solo permito que esos grupos realicen acciones explícitas. Un buen libro que describe este proceso es "Sudo Mastery: Control de acceso de usuarios para personas reales". En realidad es un buen libro sobre sudo en general ...
fuente