Usando wheel para proteger SU

El uso del grupo wheel para usuarios “poderosos” es una tradición en los Unix estilo BSD, y que ha sido adoptada en otros sistemas operativos Unix-like. No es una obligación hacerlo, pero es una de las tantas formas en las cuales puede mejorarse la seguridad de un sistema Linux.
El programa su permite cambiar la identidad de un usuario a otro; generalmente se asocia con “convertirse en root”, pero puede ser empleado para convertirse en cualquier otro usuario. Esto es obviamente peligroso, de modo que es conveniente regular el acceso de los usuarios comunes a un programa como éste.
Entran en juego los permisos de Unix. El programa /bin/su generalmente tiene permisos de acceso como
$ ls -l /bin/su
-rwsr-xr-x 1 root root 23260 Aug 22 12:33 /bin/su
que quiere decir que su dueño puede leerlo, escribirlo y ejecutarlo, los miembros del grupo root pueden leerlo y ejecutarlo, mientras que el resto de los usuarios pueden leerlo y ejecutarlo. Más aún, la ‘s’ indica que sea quien sea que ejecute el comando, lo hace con privilegios del dueño (o sea root), cosa que es necesaria para poder cambiarse de usuario. Lo primero que queremos es que el usuario “comun” no pueda ejecutar el comando, lo cual logramos con un simple
# chmod 4750 /bin/su
# ls -l /bin/su
-rwsr-x— 1 root root 23260 Aug 22 12:33 /bin/su
Ahora, solamente el dueño (root) y los miembros del grupo root son capaces de acceder al ejecutable. Pero el grupo root usualmente se asocia exclusivamente con el usuario root, por lo tanto “inventamos” un nuevo grupo y lo llamamos wheel. Luego, hacemos que /bin/su le pertenezca al grupo wheel con un simple
# chgrp wheel /bin/su
# ls -l /bin/su
-rwsr-x— 1 root wheel 23260 Aug 22 12:33 /bin/su
Y ahora, debe resultar obvio que solamente root y los miembros del grupo wheel tendrán la posibilidad de ejecutar /bin/su. El principio puede extenderse a otros comandos “poderosos”.
Esta es la forma básica de hacerlo y que, de paso, funciona en cualquier Unix. Pero en Linux tenemos alternativas adicionales, en particular el empleo de PAM (que es mucho más limpio y elegante); si uno examina /etc/pam.d/su encuentra las condiciones de autenticación para emplear el comando ‘su‘:
# Uncomment this to force users to be a member of group root
# before than can use `su’. You can also add “group=foo” to
# to the end of this line if you want to use a group other
# than the default “root”.
# (Replaces the `SU_WHEEL_ONLY’ option from login.defs)
# auth required pam_wheel.so (A)
# Uncomment this if you want wheel members to be able to
# su without a password.
# auth sufficient pam_wheel.so trust (B)
# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth required pam_wheel.so deny group=nosu (C)
…y algunas cosas más que no vienen al caso. El primer comentario es suficientemente claro: basta con quitar el comentario de la línea (A) para que solamente los miembros del grupo ‘root‘ puedan usar su, y (siguiendo el mismo comentario) si se agrega ‘group=wheel‘ a la misma línea…
La línea (B) es una “comodidad”: que cualquier usuario del grupo ‘wheel‘ pueda hacer su sin que le pidan password. Sobre mi cadáver.
La línea (C) es una bendición: poder impedir que miembros de determinado grupo puedan usar su. Para el paranoico es excelente poner a todos los usuarios en el grupo ‘lusers‘ y luego colocar ‘group=lusers‘.
Basta modificar (A), (B) y/o (C) a gusto y no hace falta cambiar los permisos de /bin/su.
Por último y a título informativo solamente, antes de que existiera PAM, se podía instrumentar el programa su para “cablearle” el nombre del grupo privilegiado y se modificaba /etc/default/login.defs para definir dicho grupo.
man chgrp
man chmod
man pam

Comentarios

Entradas populares