¿Cuál es la diferencia entre los siguientes comandos:
su
sudo -s
sudo -i
sudo bash
Sé su
que necesito saber la contraseña de root y sudo
tengo que estar en el sudoers
archivo, pero una vez ejecutado, ¿cuál es la diferencia?
Sé que hay una diferencia entre su
y sudo -s
porque mi directorio de inicio está /root
después de ejecutar su
, pero mi directorio de inicio sigue /home/myname
después sudo -s
. Pero sospecho que esto es solo un síntoma de una diferencia subyacente que me falta.
sudo su -
esta manera, no necesita la contraseña de root, y-
se asegura de que el directorio de inicio esté configurado correctamente.Respuestas:
Con
su
, te conviertes en otro usuario: root de forma predeterminada, pero potencialmente otro usuario. Si dicesu -
, su entorno también se reemplaza con el entorno de inicio de sesión de ese usuario, de modo que lo que ve es indistinguible de iniciar sesión como ese usuario. No hay forma de que el sistema pueda decir lo que usted hace mientras sesu
dirige a otro usuario de las acciones de ese usuario cuando inician sesión.Las cosas son muy diferentes con
sudo
:Los comandos que ejecuta se
sudo
ejecutan como el usuario objetivo (raíz de forma predeterminada, pero se puede cambiar con)-u
, pero registra los comandos que ejecuta a través de ellos, etiquetándolos con su nombre de usuario para que luego se pueda asignar la culpa. :)sudo
Es muy flexible. Puede limitar los comandos que puede ejecutar un determinado usuario o grupo de usuarios, por ejemplo. Consu
todo o nada.Esta característica se usa generalmente para definir roles. Por ejemplo, podría definir un grupo de "copias de seguridad" que se permita ejecutar
dump
ytar
, cada uno de los cuales necesita acceso raíz para realizar una copia de seguridad adecuada del disco del sistema.Menciono esto aquí porque significa que puedes otorgarle
sudo
privilegios a alguien sin darlessudo -s
nisudo bash
habilidades. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que consu
el sistema completo. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decirsudo vi
, por ejemplo, puede pagarvi
y tener efectivamente el mismo poder que consudo -s
.Debido a que toma la contraseña del sudoer en lugar de la contraseña de root,
sudo
aísla el permiso entre múltiples sudoers.Esto resuelve un problema administrativo con
su
, que es que cuando la contraseña de root cambia, todos los que tenían que saber usarlasu
tenían que ser informados.sudo
permite que las contraseñas de los sudoers cambien independientemente. De hecho, es común bloquear con contraseña la cuenta del usuario root en un sistemasudo
para forzar que todas las tareas de sysadmin se realicen a través desudo
. En una organización grande con muchos sudoers de confianza, esto significa que cuando uno de los administradores del sistema se va, no tiene que cambiar la contraseña de root y distribuirla a los administradores que permanecen.La principal diferencia entre
sudo bash
ysudo -s
es que-s
es más corta y le permite pasar comandos para ejecutar en el shell predeterminado de su usuario de dos maneras:Puedes decir
sudo -s some-command
cuál corresome-command
bajo tu caparazón. Básicamente es una forma abreviada desudo $SHELL -c some-command
.En su lugar, puede pasar los comandos a la entrada estándar del shell, como
sudo -s < my-shell-script
. Puede usar esto con un heredoc para enviar varios comandos a una solasudo
llamada, evitando la necesidad de escribirsudo
repetidamente.Ambos comportamientos son opcionales. Mucho más comúnmente, das
-s
solo, por lo que solo ejecuta el shell de tu usuario de forma interactiva. En ese modo, difiere desudo bash
que podría ejecutar un shell diferente albash
, ya que se ve primero en laSHELL
variable de entorno y luego, si no está configurado, en la configuración del shell de inicio de sesión de su usuario, generalmente en/etc/passwd
.El shell ejecutado por
sudo -s
hereda su entorno de usuario actual. Si lo que realmente quieres es un entorno limpio, como el que obtienes justo después de iniciar sesión, lo que quieres essudo -i
una adición relativamente reciente asudo
. En términos generales,sudo -i
essudo -s
comosu -
essu
: restablece todas las variables de entorno clave, excepto algunas, y lo envía de vuelta al directorio de inicio de su usuario. Si no le da comandos para que se ejecute bajo ese shell a través de una entrada estándar osudo -i some-command
, ejecutará ese shell como un shell de inicio de sesión interactivo, de modo que los scripts de inicio del shell de su usuario (por ejemplo.bash_profile
) se ejecuten nuevamente.Todo esto hace que sea
sudo -i
mucho más seguro quesudo -s
. ¿Por qué? Porque si alguien puede modificar su entorno antessudo -s
, podría provocar que se ejecuten comandos no deseados. El caso más obvio es la modificaciónSHELL
, pero también puede ocurrir de manera menos directa, como a través dePAGER
si dicesman foo
mientras estás debajosudo -s
.Podría decir: "Si pueden modificar
PAGER
, pueden modificarPATH
, y luego pueden simplemente sustituir unsudo
programa maligno ", pero alguien lo suficientemente paranoico puede decir/usr/bin/sudo /bin/bash
para evitar esa trampa. Sin embargo, probablemente no seas tan paranoico como para evitar las trampas en todas las demás variables de entorno susceptibles. ¿También recordó verificarEDITOR
, por ejemplo, antes de ejecutar cualquier comando VCS ? Por lo tantosudo -i
.Debido a que
sudo -i
también cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee utilizarlosudo -s
para aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estabacd
cuando corriósudo
. Es todavía más segurosudo -i
ycd
volver a donde estaba, sin embargo.fuente
vi
, escribe:sh
y presiona Enter. Ahora estás en un sub-shell, con todos los privilegios delvi
proceso que generó ese shell. Sivi
se ejecuta con privilegios de root, también lo hará el shell. O bien, puede ejecutar algo más que un shell a través de:!cmd
, leer la salida de un comando en el búfer de edición a través de:r !cmd
, etc. Si todos están bloqueados, losMakefile
destinos son scripts de shell y Vim tiene el:make
comando, que efectivamente le permite ejecutar shell arbitrario guiones desde dentro del editor. Las posibilidades de travesuras son demasiado inmensas para que este cuadro de comentarios se mantenga./usr/bin/sudo
PATH
no es el único problema.Desde una publicación de ubuntuforums que hice hace un tiempo:
Considere el siguiente experimento:
Aquí están las diferencias que encontré:
Con
sudo -s
:Con
sudo su
:Nótese la diferencia en
$HOME
. Ser root y haberse$HOME
establecido en el hogar del usuario normal puede causar problemas. Por ejemplo, si ejecuta una aplicación gráfica, el usuario normal~/.Xauthority
puede sobrescribirse por root. Esto causa los problemas normales del usuario más adelante, como no poder ejecutar ciertas aplicaciones gráficas a través de cron.Para resumir:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
probablemente establecido por/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
El resultado final
sudo -i
es el comando apropiado para ejecutar cuando desea un shell raíz que no esté contaminado por el entorno del usuario.fuente
sudo
(en/etc/sudoers
y archivos relacionados). Los valores de configuración, tales comoalways_set_home
,env_reset
,env_keep
,env_check
yenv_reset
, y estos pueden variar dependiendo del usuario y el mando. Consulte la sección 'Entorno de comando' y OPCIONES DE SUDOERS de la página de manual de sudoers (5) .sudo -Hs
cuando quiero un entorno no contaminado por mi configuración, porque uso zsh y todas las cuentas de aplicaciones que podría estar cambiando para usar bash. Esto permite que una cierta cantidad de variables de entorno pasen sin ser molestadas, pero normalmente encuentro que /etc/profile.d/* sobrescribe las que importan.su
( s witch u ser o s ubstitute u ser) le permite cambiar de usuario.su
básicamente inicia otra instancia de shell con los privilegios del usuario deseado. De forma predeterminada, lo cambia alroot
usuario, si queremos cambiar un usuario específico, necesitamos pasar al usuario de la siguiente manera:su -
significa que las variables de entorno se restablecerán a la raíz ysu
las variables de entorno como usuario anterior.por ejemplo: el directorio de inicio de root si lo usa
su -
o el directorio de inicio de usuario antiguo si lo usasu
.sudo ( s uper u ser do ) es una utilidad de línea de comandos que permite a los usuarios ejecutar programas con los privilegios de seguridad de otro usuario, por defecto es superusuario, es decir
root
. Utiliza un archivo de configuración/etc/sudoers
que enumera qué usuarios tienen derechos para acciones específicassudo debe leerse como / ˈsuːduː / . sintaxis,
sudo command
es decir, s witch u ser y hacer este comando.su
es equivalentesudo -i
y simula un inicio de sesión en la cuenta raíz. Su directorio de trabajo será/root
, y leerá la raíz,.profile
etc. La solicitud cambiará de $ a #, lo que indica que tiene acceso a la raíz.sudo -s
lanza un shell como root, pero no cambia su directorio de trabajo.sudo bash
dondebash
es el comando para ejecutarsudo
. Este comando se ejecutabash
como un superusuario.sudo
se puede registrar todo lo que alguien hace.sudo
evita que un usuario tenga que conocer la contraseña de root.sudo
podemos limitar los comandos se les permite ejecutar.fuente