¿Cuál es la diferencia entre los siguientes comandos?
su
sudo -s
sudo -i
sudo bash
Sé que su
necesito saber la contraseña de root y que 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 aún está /home/myname
después sudo -s
. Pero sospecho que esto es sólo un síntoma de una diferencia subyacente que me estoy perdiendo.
Respuesta1
Contigosu
convertirseotro usuario: root de forma predeterminada, pero potencialmente otro usuario. Si dice su -
, su entorno también se reemplaza con el entorno de inicio de sesión de ese usuario, de modo que lo que ve no se puede distinguir del inicio de sesión como ese usuario. No hay forma de que el sistema pueda saber qué hace usted mientras su
está conectado con otro usuario a partir de las acciones de ese usuario cuando inicia sesión.
Las cosas son muy diferentes con sudo
:
Comandos que ejecutas
sudo
ejecutarcomo usuario objetivo (root de forma predeterminada, pero se puede cambiar con él-u
), pero registra los comandos que ejecuta y los etiqueta con su nombre de usuario para que se pueda asignar la culpa después. :)sudo
es muy flexible. Puede limitar los comandos que un determinado usuario o grupo de usuarios puede ejecutar, por ejemplo. Consu
, es todo o nada.Esta característica se utiliza normalmente para definir roles. Por ejemplo, podría definir un grupo de "copias de seguridad" al que se le permita ejecutar
dump
ytar
, cada uno de los cuales necesita acceso de root para realizar una copia de seguridad adecuada del disco del sistema.Menciono esto aquí porque significa que puedes darle
sudo
privilegios a alguien sin darlesudo -s
habilidadessudo bash
. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que consu
ellos pueden ejecutar todo el sistema. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decirsudo vi
, por ejemplo, puede desembolsarvi
y tener efectivamente el mismo poder que consudo -s
.Debido a que toma la contraseña de sudoer en lugar de la contraseña de root,
sudo
aísla el permiso entre múltiples sudoers.Esto soluciona un problema administrativo con , que es que cuando cambia la contraseña de root, había que decírselo
su
a todos aquellos que debían saberla para usarla . permite que las contraseñas de los sudoers cambien de forma independiente. De hecho, es común bloquear con contraseña la cuenta del usuario root en un sistema para forzar que todas las tareas del administrador del sistema se realicen a través de . En una organización grande con muchos sudoers confiables, esto significa que cuando uno de los administradores del sistema se va, no es necesario cambiar la contraseña de root y distribuirla a los administradores que permanecen.su
sudo
sudo
sudo
Las principales diferencias entre sudo bash
y sudo -s
son:
-s
es más corto quebash
Puede decir
sudo -s some-command
que se ejecutesome-command
bajo su shell predeterminado, pero con privilegios de superusuario. Es básicamente una abreviatura desudo $SHELL -c some-command
.En su lugar, puedes pasar los comandos a la entrada estándar del shell, como
sudo -s < my-shell-script
. Podrías usar esto con unheredocpara enviar varios comandos a una solasudo
llamada, evitando la necesidad de escribirsudo
repetidamente.Incluso sin estos argumentos de comando adicionales,
sudo -s
todavía se diferenciasudo bash
en que podría ejecutar un shell diferente al debash
, ya que busca primero en laSHELL
variable de entorno y luego, si no está configurada, en la configuración del shell de inicio de sesión de su usuario, generalmente en/etc/passwd
.
El shell ejecutado sudo -s
hereda su entorno de usuario actual. Si lo que realmente desea es un entorno limpio, como el que obtiene justo después de iniciar sesión, lo que desea es sudo -i
una adición relativamente reciente a sudo
. En términos generales, sudo -i
es sudo -s
como su -
es su
: restablece todas las variables de entorno clave, excepto algunas, y lo envía de regreso al directorio de inicio de su usuario. Si no le da también comandos para ejecutar bajo ese shell a través de la entrada estándar o sudo -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 lo hace sudo -i
considerablemente más seguro que sudo -s
. ¿Por qué? Porque si alguien puede modificar su entorno antes sudo -s
, podría provocar que se ejecuten comandos no deseados. El caso más obvio es modificar SHELL
, pero también puede ocurrir de manera menos directa, como vía PAGER
si dices man foo
while bajo sudo -s
.
Se podría decir: "Si pueden modificar PAGER
, pueden modificar PATH
y luego pueden simplemente sustituirlo por un sudo
programa malvado", pero alguien lo suficientemente paranoico puede decir /usr/bin/sudo /bin/bash
que evitemos esa trampa. Probablemente no seas tan paranoico como para evitar las trampas en todos losotrovariables ambientales susceptibles, sin embargo. ¿Recordó también verificar EDITOR
, por ejemplo, antes de ejecutar cualquierVCS¿dominio? De este modo sudo -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 usarlo sudo -s
en aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en cd
el que estaba cuando ejecutó sudo
. Sin embargo , sigue siendo más seguro ir sudo -i
y cd
volver a donde estabas.
Otra variante de todo esto que a veces ves es sudo su
, que equivale aproximadamente a sudo -s
. Asimismo, sudo su -
funcionalmente está bastante cerca de sudo -i
. Dado que sudo
y su
son comandos que compiten, es un poco extraño emparejarlos así, por lo que recomiendo que utilices las sudo
banderas en su lugar.
Respuesta2
Desde unpublicación en foros de ubuntuHice hace un tiempo:
Considere el siguiente experimento:
applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s
Aquí están las diferencias que encontré:
Con sudo -s
:
HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc
Con sudo su
:
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc
Note la diferencia en $HOME
. Ser root y haber $HOME
configurado la casa del usuario normal puede causar problemas. Por ejemplo, si ejecuta una aplicación gráfica, el ~/.Xauthority
root puede sobrescribir la del usuario normal. Esto causa problemas al usuario normal más adelante, como no poder ejecutar ciertas aplicaciones gráficas a través de cron.
Para resumir:
corrupted by user's
HOME=/root uses root's PATH env vars
sudo -i Y Y[2] N
sudo -s N Y[2] Y
sudo bash N Y[2] Y
sudo su Y N[1] Y
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
La conclusión es que sudo -i
es el comando adecuado para ejecutar cuando desea un shell raíz que no esté contaminado por el entorno del usuario.
Respuesta3
su
(sbrujatuser ossustituirtuser) te permite cambiar de usuario. su
Básicamente inicia otra instancia de Shell con los privilegios del usuario previsto. De forma predeterminada, lo cambia al root
usuario; si queremos cambiar un usuario específico, debemos pasar el usuario de la siguiente manera:
$ su bob # switches to bob (requires bob's password)
su -
significa que las variables de entorno se restablecerán a la raíz y su
significa que las variables de entorno son como usuario anterior.
por ejemplo: el directorio de inicio de la raíz si usa su -
o el directorio de inicio del usuario anterior si usa su
.
sudo(ssuperiortuserhacer) es una utilidad de línea de comandos que permite a los usuarios ejecutar programas con los privilegios de seguridad de otro usuario; de forma predeterminada es superusuario, es decir root
. Utiliza un archivo de configuración /etc/sudoers
que enumera qué usuarios tienen derechos para acciones específicas.
sudo debe leerse como/ˈsuːduː/. sintaxis sudo command
es decirsbrujatuser yhacereste 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á los directorios raíz,.profile
etc. El mensaje cambiará de $ a #, lo que indica que tiene acceso de root.sudo -s
inicia un shell como root, pero no cambia su directorio de trabajo.sudo bash
¿Dóndebash
está el comando para ejecutarsudo
? Este comando se ejecutabash
como superusuario.- El uso
sudo
puede registrar todo lo que alguien hace. - El uso
sudo
evita que un usuario tenga que conocer la contraseña de root. - Usando
sudo
podemos limitar los comandos que se pueden ejecutar.