He estado usando Linux por un tiempo y cada vez que escribía sudo
pensaba que me estaba cambiando al usuario root por un comando.
Aparentemente esto no es cierto porque todo lo que necesito es la contraseña de mi cuenta de usuario. Supongo que dado que no he trabajado con varios usuarios, realmente no me he dado cuenta de esto en el mundo real.
No estoy seguro de cómo Ubuntu configura mi primera cuenta. ¿Hay un usuario root? ¿Soy root? Supongo que acabo de crear un nuevo usuario después de la instalación, pero ¿me dio privilegios de root? Solo un poco confundido aquí ...
Entonces, ¿por qué puedo ejecutar comandos raíz con la contraseña de mi usuario?
sudo
tiene el bit "setuid" establecido. Por lo tanto, se ejecuta como el usuario que lo posee (que es root en todos los sistemas estándar si no me equivoco), no como el usuario que lo inicia.sudo
luego carga el/etc/sudoers
archivo y comprueba lo que está permitido en función de quién lo lanzó.sudo
privilegios, tal vez trabajando en ubicaciones distribuidas geográficamente y en turnos 24 × 7, desea poder revocar el acceso privilegiado de una persona de inmediato (por ejemplo, si sospechas de su integridad). Si todo el mundo usa la contraseña raíz única y la cambia sin coordinación previa, puede producirse un caos. ...Respuestas:
En detalles funciona de la siguiente manera:
/usr/bin/sudo
el archivo ejecutable tiene un conjunto de bits setuid , por lo que incluso cuando lo ejecuta otro usuario, se ejecuta con la identificación de usuario del propietario del archivo (root en ese caso).sudo
comprueba en el/etc/sudoers
archivo qué privilegios tiene y si tiene permiso para ejecutar el comando que está invocando. Dicho simplemente,/etc/sudoers
es un archivo que define qué usuarios pueden ejecutar qué comandos utilizando elsudo
mecanismo.Así es como se ve ese archivo en mi Ubuntu:
La tercera línea es lo que presumiblemente te interesa. Permite que cualquiera en el grupo "sudo" ejecute cualquier comando como cualquier usuario.
Cuando Ubuntu configura la primera cuenta durante la instalación, agrega esa cuenta al grupo "sudo". Puede verificar a qué grupos pertenecen los usuarios con el
group
comando.sudo
te pide una contraseña En cuanto al hecho de que necesita la contraseña del usuario, no la de la raíz, es un extracto del manual de sudoers :Sin embargo, de hecho,
sudo
no necesita su contraseña de usuario para nada. Se lo solicita solo para asegurarse de que realmente es usted y para proporcionarle algún tipo de advertencia (o la posibilidad de detenerse) antes de invocar algún comando potencialmente peligroso. Si desea desactivar la solicitud de contraseña, cambie la entrada de sudoers a:Después de que la autenticación
sudo
genera el proceso hijo que ejecuta el comando invocado. El hijo hereda el ID de usuario raíz de su padre: elsudo
proceso.Entonces, respondiendo sus preguntas con precisión:
Usted tenía razón. Cada comando precedido de se
sudo
ejecuta con el ID de usuario raíz.Sí, hay una cuenta de usuario root, separada de su cuenta de usuario creada durante la instalación del sistema. Sin embargo, de manera predeterminada en Ubuntu no puede iniciar sesión en la terminal interactiva como usuario root.
No, no eres una raíz. Usted sólo tiene privilegios para ejecutar comandos individuales como una raíz , mediante el
sudo
mecanismo descrito anteriormente.Debe ingresar la contraseña del usuario solo debido al
sudo
mecanismo de seguridad interno. Se puede apagar fácilmente. Obtienes tus poderes de raíz por el bit setuid/usr/bin/sudo
, no por las contraseñas que ingresas.fuente
sudo
podría ejecutarse sin ingresar mi contraseña. ¡Gran respuesta!rootpw
indicadorsudoers
.sudo su - root
hará exactamente eso y le dará un terminal raíz. Sin embargo, no puede iniciar sesión fácilmente en una sesión de escritorio como root.sudo
tiene el privilegio de root por sí mismo, y decide si se lo imparte en función de un archivo de configuración.El objetivo
sudo
es otorgarle los privilegios de otra persona (generalmente root) sin solicitar la contraseña de esta otra cuenta (a diferenciasu
).sudo
está solicitando aquí su contraseña solo para asegurarse de que un transeúnte no utilice incorrectamente su terminal desbloqueado.Ubuntu y muchos otros sistemas operativos Linux y Unix están otorgando a una cuenta inicial creada en el momento de la instalación el derecho de ejecutar cualquier comando como
root
.Si bien
root
todavía es una cuenta en Linux, losroot
inicios de sesión directos están deshabilitados de forma predeterminada para una mejor seguridad y trazabilidad.fuente
Piotr dio una muy buena explicación de cómo
sudo
funciona. Sin embargo, él realmente no motivó por qué funciona de esta manera, así que intentaré agregar eso aquí.Antes de
sudo
crear el comando, teníamos elsu
comando. Este comando permite que un usuario ejecute comandos como otro usuario, por lo generalroot
(como consudo
, este es el usuario objetivo predeterminado). Fue totalmente indiscriminado, puede ejecutar cualquier comando. Como podía ser utilizado por cualquier usuario, era efectivamente equivalente a iniciar sesión como ese usuario, requería que conociera la contraseña del usuario objetivo.En algún momento, se agregó un poco más de control de acceso: para usar
su
, tenía que ser miembro delwheel
grupo. Pero como todavía podía ejecutar cualquier comando, tenía sentido exigirle que conociera su contraseña.Sin embargo, exigir a los usuarios que conocieran la contraseña del otro o del superusuario no era muy seguro. A menudo solo desea dar a ciertos usuarios acceso limitado a alguna otra cuenta (esto es parte de un concepto de seguridad llamado principio de mínimo privilegio ). También dificulta la rendición de cuentas: si varias personas conocen la contraseña de una cuenta, y esa cuenta está involucrada en un error o abuso, no se puede saber cuál de ellas realmente lo hizo.
Así
sudo
fue creado. En lugar de permitir a los usuarios ejecutar cualquier comando, tiene un archivo de configuración elaborado, brevemente mencionado en la respuesta de Piotr, que especifica con precisión quién puede usarlo, a qué usuarios pueden cambiar y qué comandos pueden ejecutar. Con este control detallado sobre quién puede hacer qué a quién, ya no necesitamos darles a los usuarios la contraseña de la cuenta de destino; si lo hiciéramos, podrían omitir fácilmente todos los controles en el archivo de configuración iniciando sesión como ese usuario. En cambio, normalmente solo les pedimos que demuestren que son las personas con las que iniciaron sesión, ingresando su propia contraseña; esto tiene la intención de evitar que alguien aproveche una cuenta si el terminal se deja desatendido.Este requisito no se aplica al superusuario: esta cuenta puede hacer casi cualquier cosa al sistema sin usar
sudo
, por lo que se consideró superfluo. También es posible especificar en el archivo de configuración que los usuarios no tienen que ingresar una contraseña; algunas organizaciones usan esto cuando creen que la seguridad física del entorno de su estación de trabajo es suficiente para evitar abusos.fuente
su
también registra, pero como solo inicia un nuevo shell, solo registra el hecho de que alguien lo ejecutó.sudo
, permite que se revoquen los privilegios, sin tener que volver a emitir la contraseña de root a todos los que la necesiten.sudo
que le permite restringir qué comandos puede ejecutar un usuario, puede intentar asegurarse de no darles acceso a los comandos que sobrescribirían el registro.La respuesta a tu pregunta es:
Cuando ejecuta un comando con sudo , ejecuta el comando con privilegios elevados , es decir, privilegios de raíz . Solo tiene que escribir su contraseña de usuario normal porque usted (el usuario) ha sido agregado al archivo sudoers que le brinda privilegios de root .
fuente
sudo
no siempre otorga privilegios elevados, pero se ejecuta con privilegios elevados, después de hacer lo suyo (verificando la autenticación, puede perder privilegios). Necesita estos privilegios elevados para poder cambiar de usuario.sudo
hace uso de privilegios elevados (pero eso no es única para sudo, por ejemplo, montar también lo hace), pero el comando que llame es decir,command
en lasudo command
que no puede (dependiendo de lo que se establece en/etc/sudoers
).Primero, la desactivación de una cuenta generalmente se realiza configurando la contraseña cifrada en *, que no es el valor cifrado de ninguna cadena. No puedo comprobarlo ahora, pero creo que eso es lo que Ubuntu hace también para root. Entonces, técnicamente, no hay una contraseña de root en Ubuntu.
Pero sudo precede a Ubuntu; Fue diseñado para sistemas donde ciertamente había contraseñas raíz. Entonces, ¿por qué no requiere la contraseña de root? Básicamente, sudo está diseñado para dar permiso para ejecutar comandos específicos a ciertos usuarios, por ejemplo, permitir que un desarrollador tenga acceso root para reiniciar la aplicación web, pero no para iniciar servidores arbitrarios. Conocer la contraseña de root, por otro lado, le brinda acceso ilimitado; puede usar login o su para abrir un shell raíz y ejecutar comandos arbitrarios. Como sudo tiene que funcionar para personas sin ese nivel de acceso, no puede requerir la contraseña de root para ejecutarse.
fuente