¿Por qué es ejecutable su world?

20

Tengo un servidor sin cabeza que está conectado remotamente por varios usuarios. Ninguno de los otros usuarios está en el archivo sudoers, por lo que no pueden obtener la raíz a través de sudo. Sin embargo, dado que los permisos suestán -rwsr-xr-xactivados, no hay nada que les impida intentar forzar por fuerza bruta la contraseña de root.

Se podría argumentar que si un usuario conoce la contraseña de root, puede comprometer el sistema de todos modos, pero no creo que este sea el caso. OpenSSH está configurado con PermitRootLogin noy PasswordAuthentication no, y ninguno de los otros usuarios tiene acceso físico al servidor. Por lo que puedo decir, el permiso de ejecución mundial /usr/bin/sues la única vía para los usuarios que intentan obtener root en mi servidor.

Lo que me desconcierta aún más es que ni siquiera parece útil. Me permite correr sudirectamente en lugar de tener que hacerlo sudo su, pero esto no es un inconveniente.

¿Estoy pasando por alto algo? ¿Está el mundo ejecutando permiso susolo por razones históricas? ¿Hay algún inconveniente para eliminar ese permiso que aún no he encontrado?

Altay_H
fuente
99
"Me permite ejecutar su directamente en lugar de tener que hacer sudo su, pero esto no es un inconveniente". - ¿Qué pasa con los sistemas sin el opcional sudoinstalado? Yo diría que es un gran inconveniente allí;)
Marcelm
1
Siempre puede restringir el acceso para / bin / su, pero recuerde hacer lo mismo para / usr / bin / pkexec también.
jpa
66
Parece que no puedo entender la motivación detrás de esta pregunta. Parece que se preguntaba por qué su debe ser ejecutable en todo el mundo, pero ¿cuál sería el punto de la alternativa? Es decir, si su solo fuera ejecutable por root (?), ¿Para qué creía que podría usarse?
David Z
1
@DavidZ ¡De hecho, es realmente útil para root! Puede cambiar rápidamente de usuario con él.
Val dice Reinstate Monica el
1
@val Sí, eso es cierto. El hecho de que root pueda usar su no está en duda aquí. (Al releer, puedo ver cómo mi comentario anterior sugeriría lo contrario, pero eso no es lo que quise decir.) Tengo curiosidad por saber qué pensó Altay_H sobre esto antes de que hicieran esta pregunta.
David Z

Respuestas:

39

Un punto que falta en la respuesta de ilkkachu es que elevar a root es solo un uso específico para su. El propósito general de su es abrir un nuevo shell bajo la cuenta de inicio de sesión de otro usuario. Ese otro usuario podría ser root(y quizás lo sea más a menudo), pero supuede usarse para asumir cualquier identidad que el sistema local pueda autenticar.

Por ejemplo, si he iniciado sesión como usuario jimy quiero investigar un problema que se mikeha informado, pero que no puedo reproducir, podría intentar iniciar sesión como mikey ejecutar el comando que le está causando problemas.

13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),14(ftp),920(vboxusers)

El uso de la -lopción de suhace que simule un inicio de sesión completo (según la manpágina).

mikeSin embargo, lo anterior requiere el conocimiento de la contraseña de. Si tengo sudoacceso, puedo iniciar sesión mikeincluso sin su contraseña.

13:27:37 /home/jim> sudo su -l mike
Password:(I type my own password, because this is sudo asking)
13:27:41 /home/mike>

En resumen, la razón por la que los permisos en el suejecutable son como muestra, es porque sues una herramienta de propósito general que está disponible para todos los usuarios del sistema.

Jim L.
fuente
1
Eso tiene mucho sentido. Como tengo la costumbre de usarlo sudo, olvidé que suse puede usar para algo más que solo sudo -s. Y sin ser un sudoer, esta sería la única forma de cambiar de usuario sin alterar las claves ssh. Para mi caso de uso, esta es otra razón para eliminar el permiso, pero ahora entiendo por qué el permiso de ejecución mundial está configurado de forma predeterminada. ¡Gracias!
Altay_H
1
Otro punto es que sudotambién se puede usar para asumir la identidad de un usuario que no sea root. Simplemente permite un control más preciso sobre quién puede hacer qué y quién, incluso asumir otra identidad sin la necesidad de la contraseña de esa identidad.
Chepner
Parte de la confusión es que la gente piensa que susignifica "superusuario", lo que hace, cuando no se especifica ningún usuario (o la raíz es explícitamente especificada) pero también significa "cambiar de usuario". Este segundo uso de, supor lo tanto, se olvida fácilmente.
Monty Harder
20

Históricamente (en unidades que no son GNU), no lo era, o al menos verificaba manualmente si estaba permitido en un grupo llamado "rueda" su. La versión de GNU de suno reproducía esta funcionalidad debido a la ideología de RMS sobre el control de acceso en ese momento:

Why GNU `su' does not support the `wheel' group
===============================================

   (This section is by Richard Stallman.)

   Sometimes a few of the users try to hold total power over all the
rest.  For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else.  (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

   However, occasionally the rulers do tell someone.  Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest.  The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

   I'm on the side of the masses, not that of the rulers.  If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.

Puede encontrar mucho más sobre el asunto buscando en Google "wheel group rms" o similar.

R ..
fuente
3
Esta es la única respuesta correcta. La configuración es intencional, histórica, y este es exactamente el motivo. Toda la blabla técnica es solo eso: blabla. Puede reintroducir absolutamente el grupo "rueda" en un Unix moderno.
Tom
10

Sin embargo, dado que los permisos suestán -rwsr-xr-xactivados, no hay nada que les impida intentar forzar por fuerza bruta la contraseña de root.

Sí. Suponiendo su sistema Linux habitual, el pam_unix.somódulo retrasa un intento de autenticación fallido en ~ dos segundos, pero no creo que haya nada que detenga los intentos simultáneos.

Los intentos fallidos se registran, por supuesto:

Aug 16 22:52:33 somehost su[17387]: FAILED su for root by ilkkachu

Forzar una contraseña de forma bruta debería aparecer de manera prominente en los registros, si tiene algún tipo de sistema para monitorearlas. Y si tiene usuarios locales que no son de confianza, tal vez debería hacerlo. Los usuarios locales que no son de confianza también podrían intentar usar cualquier explotación de escalada de privilegios solo local, y son mucho más comunes que la escalada de privilegios remota.

Lo que me desconcierta aún más es que ni siquiera parece útil.

Por supuesto, es útil, te permite elevarte a ti mismo rootsi conoces la contraseña.

Me permite correr sudirectamente en lugar de tener que hacerlo sudo su, pero esto no es un inconveniente.

sudo suEs algo redundante. No hay necesidad de usar dos programas destinados a permitirle ejecutar programas como otro usuario, uno es suficiente. Simplemente use sudo -io sudo -s(o sudo /bin/bashetc.) si desea ejecutar shell.

¿Estoy pasando por alto algo? ¿El mundo ejecuta permiso en su solo por razones históricas?

Véase más arriba. Bueno, no todos los sistemas tienen sudocomo alternativa, no estoy seguro si lo consideras histórico.

¿Hay algún inconveniente para eliminar ese permiso que aún no he encontrado?

En realidad no, no, que yo sepa. Creo que algunos sistemas se han suconfigurado para que solo los miembros de un grupo en particular (" wheel") puedan ejecutarlo. Puedes hacer lo mismo sudosi quieres ( chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo).

O simplemente puede eliminar uno o ambos programas si no los necesita. Aunque en Debian, suviene con el loginpaquete, por lo que probablemente no sea una buena idea eliminar el paquete como un todo. (Y el emparejamiento loginy sujuntos de esa manera parece algo histórico).

ilkkachu
fuente
1
Los sistemas BSD requieren que los usuarios estén en el wheelgrupo para usar su. Hay algunos sistemas BSD (solo puedo hablar por OpenBSD) que no se envían sudoen absoluto (es un paquete de terceros). OpenBSD tiene doasuna reimplementación de los conceptos básicos de sudo, pero está deshabilitado de forma predeterminada al instalar un sistema nuevo.
Kusalananda
@Kusalananda Solo tienes que estar adentro wheelsi quieres rootear su. Cualquier cuenta puede sua cualquier cuenta no root para la que tienen la contraseña, independientemente de su membresía en el wheelgrupo.
Jim L.
Ejecuto 'sudo su -' para asegurarme de que el shell raíz que obtengo es un inicio de sesión completo, sin un entorno contaminado de mi cuenta de usuario. Los sudoers predeterminados en RHEL incluyen bastantes variables de entorno que son ejecutables (como PS1).
jsbillings
@jsbillings, hmm, está bien. ¿ suLimpia el medio ambiente entonces? No parece hacer eso en Debian ...
ilkkachu
"Su -" lo hace en todos los Linux que conozco. Cuidado con el guión.
jsbillings
7

Ya tienes algunas buenas respuestas, pero hay una parte de tu publicación que no abordan.

Por lo que puedo decir, el permiso de ejecución mundial en / usr / bin / su es la única vía para los usuarios que intentan obtener root en mi servidor.

Esa es una suposición peligrosa. Si ha establecido una buena contraseña para root, entonces en la mayoría de los casos es mucho más probable que una escalada de privilegios exitosa se deba a la explotación de un error en el núcleo o un binario setuid (por supuesto, también puede eliminar el setuid poco de eso, pero passwdes setuid, y si desea una alta seguridad, también debe ofrecer eso a sus usuarios, y negarles la opción de cambiar su contraseña no es compatible con eso).

Henrik - deja de lastimar a Monica
fuente
1

su debe ser ejecutable en todo el mundo para que todos puedan ejecutarlo. En muchos sistemas, se puede usar para cambiar a otro usuario, proporcionando su contraseña.

Si le preocupa que alguien fuerce brutalmente la contraseña de root, puede deshabilitarla. (invalidar el hash para que ninguna contraseña dada pueda coincidir)

No sé sobre el consenso, pero consideraría poder iniciar sesión como root directamente, un problema de seguridad en sí mismo.

quemador
fuente
-2

Las otras respuestas son correctas diciendo que "su" le permite iniciar sesión en cuentas que no sean root.

Sin embargo, una nota sobre "sudo su". En realidad, esto le permite iniciar sesión en la cuenta raíz sin conocer la contraseña de root. Debe saber la contraseña de la cuenta con la que ejecuta sudo, así como tener esa cuenta en el archivo sudoers.

WindowsNT
fuente
3
Eso depende completamente de si sudoerstiene targetpwo rootpwestablece.
Muru
1
Esto no tiene nada que ver con suser ejecutable por todos.
Kusalananda