Cómo limitar el acceso root de forma local y por tty

Pueden existir circunstancias en las que queramos, además de lo típico que es desactivar el acceso root por ssh, desactivar el acceso local para el usuario root.

Para ello tenemos el fichero /etc/securetty, en el cual aparece un listado de las consolas virtuales disponibles en el sistema (tty). Aparecerán todas las que puedan ser utilizadas, pero no tienen porque estar activas. En sistemas RedHat y derivados se especifican en /etc/init/start-ttys.conf.

Bien, para desactivar entonces el acceso root a cualquiera de esas tty, o a todas, únicamente hay que eliminarla o comentarla en ese fichero. A partir del momento que guardemos los cambios «root» ya no podrá acceder por los accesos locales/ttys desactivadas:

# cat /etc/securetty 
console
vc/1
vc/2
vc/3
...
vc/9
vc/10
vc/11
#tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
#tty9
#tty10
#tty11

Si necesitamos mayor detalle en las restricciones, o hacer lo mismo con otros usuarios, debemos revisar el fichero /etc/security/access.conf. Veréis que está perfectamente documentado y que podemos realizar configuraciones como las siguientes:

# Disallow non-root logins on tty1
#
#-:ALL EXCEPT root:tty1
#
# Disallow console logins to all but a few accounts.
#
#-:ALL EXCEPT wheel shutdown sync:LOCAL
#
# Same, but make sure that really the group wheel and not the user
# wheel is used (use nodefgroup argument, too):
#
#-:ALL EXCEPT (wheel) shutdown sync:LOCAL
#
# Disallow non-local logins to privileged accounts (group wheel).
#
#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
#
# Some accounts are not allowed to login from anywhere:
#
#-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
#
# All other accounts are allowed to login from anywhere.
...
...
...