Cuando usuario normales (no root) entran al ordenador localmente,
acceden al teclado, se les asigna dos tipos especiales de permisos:
pueden ejecutar ciertos programas que de otra forma no podrían,
y pueden acceder a ciertos archivos (normalmente archivos de dispositivos
especiales utilizados para el accesso a disquettes, CD-ROMs, y otros)
que de otra forma no podrían utilizar.
Ya que hay múltiples consolas en un solo ordenador, y múltiples
usuarios pueden estar conectados al ordenador localmente al mismo
tiempo, uno de los usuario tiene que "ganar" la batalla de acceso
a los archivos. El primer usuario que se conecta en la consola es
el dueño de los archivos. Una vez que el primer usuario se desconecta,
es el siguiente usuario que se conecta el que poseerá los archivos.
Por contra, cada usuario que se conecta en la consola
tendrá permitido ejecutar programas normalmente restringidos al usuario root.
Por defecto, esos programas verificarán la contraseña del usuario. Se hará
graficamente si las X están ejecutándose lo que hace posible incluir
estas acciones como elementos de menú en un interfaz gráfico de usuario.
De salida, los programas accesibles desde la consola son shutdown,
halt, y reboot.
En entornos donde la consola se encuentra asegurada (la BIOS y el LILO
tienen contraseña,
Ctrl-Alt-Delete
está deshabilitado, los interruptores de encendido y reinicio están desactivados, etc.),
puede no ser deseable permitir arbitrariamente el que usuarios en la consola
ejecuten
shutdown, halt, y
reboot.
Para desactivar todo el acceso de usuarios en consola a programas
de consola, hay que ejecutar el comando:
rm -f /etc/security/console.apps/*
|
Para desactivar el acceso a la consola totalmente, incluyendo ejecución
de programas y acceso a archivos, descomentar todas las líneas que se refieren
a pam_console.so en el directorio
/etc/pam.d/. El siguiente
script lo hará fácilmente:
cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done
|
El archivo /etc/security/console.perms define el grupo
de consola. La sintaxis del fichero es muy flexible; se puede editar el archivo
par que estas instrucciones no sean de aplicación. Sin embargo, el fichero por defecto
tiene una línea como esta:
<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
|
Cuando los usuarios se conectan, están conectados a algún tipo
de terminal con nombre, ya sea un servidor de X con un nombre como
:0 o mymachine.example.com:1.0; o a un
dispositivo como /dev/ttyS0 o /dev/pts/2.
Por defecto se define que la consolas locales virtuales y los servidores locales de X
se considerán local, pero si se quiere se puede considerar local un puerto serie
como /dev/ttyS1, cambiando esa línea a:
<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] /dev/ttyS1
|
En /etc/security/console.perms, hay una
sección con líneas como:
<floppy>=/dev/fd[0-1]*
<cdrom>=/dev/cdrom
<jaz>=/dev/zip
|
Se pueden añadir nuevas líneas:
(Por supuesto, hay que asegurarse que /dev/sga es de verdad
el escaner y no, por ejemplo, el disco duro.)
Esa es la primera parte. La segunda parte consiste en definir que se hace
con esos ficheros. En la última sección
/etc/security/console.perms hay líneas similares a:
<console> 0660 <floppy> 0660 root.floppy
<console> 0600 <cdrom> 0600 root.disk
<console> 0600 <jaz> 0660 root.disk
|
se puede añadir otra como:
<console> 0600 <scanner> 0600 root
|
Ahora, al conectarse en la consola, se conseguirá ser dueño de el
dispositivo /dev/sga y los permisos serán
0600 (lectura y escritura sólo por el dueño). Al desconectar, el
dispositivo será poseído por root y tendrá todavía permisos 0600 (ahora legible y
escribible sólo por root).
Si se quiere que otras aplicaciones aparte de
shutdown, reboot, y
halt sean accesible a usuarios desde la consola, habrá que trabajar
un poquito más.
Lo primero de todo, el acceso desde la consola sólo funciona para
aplicaciones que estén en los directorios /sbin o
/usr/sbin, así que la aplicación a ejecutar debe estar ahí.
Hay que crear un enlance del nombre de la aplicación a
/usr/bin/consolehelper:
cd /usr/bin
ln -s consolehelper foo
|
Hay que crear el archivo /etc/security/console.apps/foo:
touch /etc/security/console.apps/foo
|
Crear a continuación un fichero de configuración PAM para el servicio
foo en /etc/pam.d/. Lo mejor es empezar
con una copia del servicio de shutdown ("cierre del sistema") y modificarlo adecuadamente
para cambiar su comportamiento:
cp /etc/pam.d/shutdown /etc/pam.d/foo
|
Ahora, al ejecutar /usr/bin/foo,
consolehelper será llamado, lo cual, con ayuda de
/usr/sbin/userhelper autenticará al usuario
(pidiendo la contraseña si /etc/pam.d/foo
es una copia de /etc/pam.d/shutdown; haciendo, en otro caso,
lo que esté especificado en
/etc/pam.d/foo), ejecutando después
/usr/sbin/foo con permisos de root.