¿Cuál es la diferencia entre los siguientes comandos:
su
sudo -s
sudo -i
sudo bash
Sé suque necesito saber la contraseña de root y 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 sigue /home/mynamedespué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 sesudirige 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
sudoejecutan 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. :)sudoEs muy flexible. Puede limitar los comandos que puede ejecutar un determinado usuario o grupo de usuarios, por ejemplo. Consutodo 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
dumpytar, 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
sudoprivilegios a alguien sin darlessudo -snisudo bashhabilidades. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que consuel sistema completo. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decirsudo vi, por ejemplo, puede pagarviy 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,
sudoaí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 usarlasutenían que ser informados.sudopermite 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 sistemasudopara 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 bashysudo -ses que-ses 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-commandcuál corresome-commandbajo 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 solasudollamada, evitando la necesidad de escribirsudorepetidamente.Ambos comportamientos son opcionales. Mucho más comúnmente, das
-ssolo, por lo que solo ejecuta el shell de tu usuario de forma interactiva. En ese modo, difiere desudo bashque podría ejecutar un shell diferente albash, ya que se ve primero en laSHELLvariable 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 -shereda 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 -iuna adición relativamente reciente asudo. En términos generales,sudo -iessudo -scomosu -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 -imucho 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 dePAGERsi dicesman foomientras estás debajosudo -s.Podría decir: "Si pueden modificar
PAGER, pueden modificarPATH, y luego pueden simplemente sustituir unsudoprograma maligno ", pero alguien lo suficientemente paranoico puede decir/usr/bin/sudo /bin/bashpara 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 -itambién cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee utilizarlosudo -spara aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estabacdcuando corriósudo. Es todavía más segurosudo -iycdvolver a donde estaba, sin embargo.fuente
vi, escribe:shy presiona Enter. Ahora estás en un sub-shell, con todos los privilegios delviproceso que generó ese shell. Sivise 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, losMakefiledestinos son scripts de shell y Vim tiene el:makecomando, 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/sudoPATHno 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$HOMEestablecido en el hogar del usuario normal puede causar problemas. Por ejemplo, si ejecuta una aplicación gráfica, el usuario normal~/.Xauthoritypuede 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/gamesprobablemente establecido por/etc/environmentPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/binEl resultado final
sudo -ies el comando apropiado para ejecutar cuando desea un shell raíz que no esté contaminado por el entorno del usuario.fuente
sudo(en/etc/sudoersy archivos relacionados). Los valores de configuración, tales comoalways_set_home,env_reset,env_keep,env_checkyenv_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 -Hscuando 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.subásicamente inicia otra instancia de shell con los privilegios del usuario deseado. De forma predeterminada, lo cambia alrootusuario, 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 ysulas 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/sudoersque enumera qué usuarios tienen derechos para acciones específicassudo debe leerse como / ˈsuːduː / . sintaxis,
sudo commandes decir, s witch u ser y hacer este comando.sues equivalentesudo -iy simula un inicio de sesión en la cuenta raíz. Su directorio de trabajo será/root, y leerá la raíz,.profileetc. La solicitud cambiará de $ a #, lo que indica que tiene acceso a la raíz.sudo -slanza un shell como root, pero no cambia su directorio de trabajo.sudo bashdondebashes el comando para ejecutarsudo. Este comando se ejecutabashcomo un superusuario.sudose puede registrar todo lo que alguien hace.sudoevita que un usuario tenga que conocer la contraseña de root.sudopodemos limitar los comandos se les permite ejecutar.fuente