Solución:
Con su
, usted volverse otro usuario: root de forma predeterminada, pero potencialmente otro usuario. Si usted dice su -
, su entorno también se reemplaza con el entorno de inicio de sesión de ese usuario, por lo que lo que ve es indistinguible de iniciar sesión como ese usuario. No hay forma de que el sistema pueda saber lo que hace mientras su
‘d a otro usuario de las acciones de ese usuario cuando inician sesión.
Las cosas son muy diferentes con sudo
:
-
Los comandos que ejecutas
sudo
ejecutar como usuario de destino: root de forma predeterminada, pero modificable con-u
– pero registra los comandos que ejecuta a través de él, etiquetándolos 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 función se utiliza normalmente para definir roles. Por ejemplo, puede definir un grupo de “copias de seguridad” que se 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 a alguien
sudo
privilegios sin darlessudo -s
osudo bash
habilidades. Solo tienen los permisos que necesitan para hacer su trabajo, mientras que consu
han corrido todo el sistema. Sin embargo, debes tener cuidado con esto: si le das a alguien la capacidad de decirsudo vi
, por ejemplo, pueden desembolsarvi
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 varios sudoers.Esto resuelve un problema administrativo con
su
, que es que cuando cambia la contraseña de root, todos los que tenían que conocerla para usarsu
tenía que ser dicho.sudo
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 raíz en un sistema consudo
para forzar que todas las tareas de administrador de sistemas se realicen a través desudo
. En una organización grande con muchos sudoers confiables, esto significa que cuando uno de los administradores de sistemas se va, no tiene que cambiar la contraseña de root y distribuirla a los administradores que permanecen.
La principal diferencia entre sudo bash
y sudo -s
es eso -s
es más corto y le permite pasar comandos para ejecutar en el shell predeterminado de su usuario de un par de formas:
-
Puedes decir
sudo -s some-command
la cual recorresome-command
bajo tu caparazón. Es básicamente una abreviatura 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 un solosudo
llamar, evitando la necesidad de escribirsudo
repetidamente.
Ambos comportamientos son opcionales. Con mucha más frecuencia, das -s
solo, por lo que solo ejecuta el shell de su usuario de forma interactiva. En ese modo, se diferencia de sudo bash
en que podría ejecutar un shell diferente a bash
, ya que se ve primero en el SHELL
variable de entorno, y luego, si no está configurada, en la configuración de shell de inicio de sesión de su usuario, generalmente en /etc/passwd
.
El caparazón pasa por 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
. Mas o menos, sudo -i
Es para sudo -s
como su -
Es para 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 que se ejecute en 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, por lo que los scripts de inicio del shell de su usuario (p. ej. .bash_profile
) vuelve a correr.
Todo esto hace sudo -i
considerablemente más seguro que sudo -s
. ¿Por qué? Porque si alguien puede modificar tu entorno antes sudo -s
, podrían provocar la ejecución de comandos no deseados. El caso más obvio es modificar SHELL
, pero también puede suceder de forma menos directa, como a través de PAGER
si usted dice man foo
mientras que bajo sudo -s
.
Podría decir: “Si pueden modificar PAGER
, pueden modificar PATH
, y luego pueden simplemente sustituir un mal sudo
programa “, pero alguien suficientemente paranoico puede decir /usr/bin/sudo /bin/bash
para evitar esa trampa. Probablemente no seas tan paranoico como para evitar las trampas en todos los otro variables de entorno susceptibles, sin embargo. ¿También se acordó de comprobar EDITOR
, por ejemplo, antes de ejecutar cualquier comando VCS? Por lo tanto sudo -i
.
Porque sudo -i
también cambia su directorio de trabajo al directorio de inicio de su usuario, es posible que aún desee usar sudo -s
para aquellas situaciones en las que sabe que desea permanecer en el mismo directorio en el que estaba cd
te metiste cuando corriste sudo
. Todavía es más seguro sudo -i
y cd
Sin embargo, de vuelta a donde estabas.
De una publicación de ubuntuforums que hice hace un tiempo:
Considere el siguiente experimento:
[email protected]:~% sudo su
[sudo] password for applic:
[email protected]:/home/applic# env > /tmp/sudo_su_env
[email protected]:/home/applic# exit
exit
[email protected]:~% sudo -s
applic .bashrc read...
[email protected]:~% 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 tener $HOME
establecido en la casa del usuario normal puede causar problemas. Por ejemplo, si ejecuta una aplicación gráfica, el usuario normal ~/.Xauthority
puede ser sobrescrito 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:
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 sudo -i
es el comando adecuado para ejecutar cuando desea un shell raíz que no esté contaminado por el entorno del usuario.
su
(sbruja tuser o ssustituir tuser) le permite cambiar de usuario. su
básicamente inicia otra instancia de shell con los privilegios del usuario previsto. De forma predeterminada, le cambia al root
usuario, si queremos cambiar de usuario específico, debemos pasar al 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 variables de entorno como usuario antiguo.
por ejemplo: directorio de inicio de root si usa su -
o directorio de inicio de usuario antiguo si usa su
.
sudossuperior tuser hacer) 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íficas
sudo debe leerse como / ˈSuːduː /. sintaxis sudo command
es decir sbruja tuser y hacer este comando.
-
su
es equivalente asudo -i
y simula un inicio de sesión en la cuenta raíz. Tu directorio de trabajo será/root
, y leerá la raíz.profile
etc. El indicador cambiará de $ a #, lo que indica que tiene acceso de root. -
sudo -s
lanza un shell como root, pero no cambia su directorio de trabajo. -
sudo bash
dóndebash
es un comando para correr consudo
. Este comando se ejecuta
bash
como superusuario. - Utilizando
sudo
se puede registrar todo lo que alguien hace. - Utilizando
sudo
evita que un usuario tenga que conocer la contraseña de root. - Utilizando
sudo
podemos limitar la ejecución de los comandos.