su frente a sudo -s frente a sudo -i frente a sudo bash

su frente a sudo -s frente a sudo -i frente a sudo bash

¿Cuál es la diferencia entre los siguientes comandos?

su
sudo -s
sudo -i
sudo bash

Sé que sunecesito saber la contraseña de root y que sudotengo que estar en el sudoersarchivo, pero una vez ejecutado, ¿cuál es la diferencia?

Sé que hay una diferencia entre suy sudo -sporque mi directorio de inicio está /rootdespués de ejecutar su, pero mi directorio de inicio aún está /home/mynamedespués sudo -s. Pero sospecho que esto es sólo un síntoma de una diferencia subyacente que me estoy perdiendo.

Respuesta1

Contigosuconvertirseotro 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 suestá 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 ejecutassudo 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. :)

  • sudoes muy flexible. Puede limitar los comandos que un determinado usuario o grupo de usuarios puede ejecutar, por ejemplo. Con su, 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 dumpy tar, 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 sudoprivilegios a alguien sin darle sudo -shabilidades sudo bash. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que con suellos pueden ejecutar todo el sistema. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decir sudo vi, por ejemplo, puede desembolsar viy tener efectivamente el mismo poder que con sudo -s.

  • Debido a que toma la contraseña de sudoer en lugar de la contraseña de root, sudoaí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 sua 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.susudosudosudo

Las principales diferencias entre sudo bashy sudo -sson:

  1. -ses más corto quebash

  2. Puede decir sudo -s some-commandque se ejecute some-commandbajo su shell predeterminado, pero con privilegios de superusuario. Es básicamente una abreviatura de sudo $SHELL -c some-command.

  3. 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 sola sudollamada, evitando la necesidad de escribir sudorepetidamente.

  4. Incluso sin estos argumentos de comando adicionales, sudo -stodavía se diferencia sudo bashen que podría ejecutar un shell diferente al de bash, ya que busca primero en la SHELLvariable 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 -shereda 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 -iuna adición relativamente reciente a sudo. En términos generales, sudo -ies sudo -scomo 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 -iconsiderablemente 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 PAGERsi dices man foowhile bajo sudo -s.

Se podría decir: "Si pueden modificar PAGER, pueden modificar PATHy luego pueden simplemente sustituirlo por un sudoprograma malvado", pero alguien lo suficientemente paranoico puede decir /usr/bin/sudo /bin/bashque 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 -itambién cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee usarlo sudo -sen aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en cdel que estaba cuando ejecutó sudo. Sin embargo , sigue siendo más seguro ir sudo -iy cdvolver 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 sudoy suson comandos que compiten, es un poco extraño emparejarlos así, por lo que recomiendo que utilices las sudobanderas 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 $HOMEconfigurado la casa del usuario normal puede causar problemas. Por ejemplo, si ejecuta una aplicación gráfica, el ~/.Xauthorityroot 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
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games probablemente establecido por/etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

La conclusión es que sudo -ies 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. suBásicamente inicia otra instancia de Shell con los privilegios del usuario previsto. De forma predeterminada, lo cambia al rootusuario; 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 susignifica 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/sudoersque enumera qué usuarios tienen derechos para acciones específicas.

sudo debe leerse como/ˈsuːduː/. sintaxis sudo commandes decirsbrujatuser yhacereste comando.

  • sues equivalente sudo -iy simula un inicio de sesión en la cuenta raíz. Su directorio de trabajo será /rooty leerá los directorios raíz, .profileetc. 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ónde bashestá el comando para ejecutar sudo? Este comando se ejecuta bashcomo superusuario.

  • El uso sudopuede registrar todo lo que alguien hace.
  • El uso sudoevita que un usuario tenga que conocer la contraseña de root.
  • Usando sudopodemos limitar los comandos que se pueden ejecutar.

información relacionada