Debian y el acceso a los dispositivos

22 Jun

Según la documentación de Debian al respecto, la forma idónea de proporcionar a un usuario acceso a un dispositivo es añadirle al grupo al que pertenece dicho dispositivo. En el caso de nut, por ejemplo, y una UPS vía serie como la Phasak PH9960 600VA podría hacerse añadiendo el usuario

nut

al grupo

dialout

:

# ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 mar 12 08:01 /dev/ttyS0
# id nut
id=112(nut) gid=118(nut) grupos=118(nut
# adduser nut dialout
Añadiendo al usuario nut' al grupo dialout' ...
Añadiendo al usuario nut al grupo dialout
Hecho.
# id nut
id=112(nut) gid=118(nut) grupos=118(nut),20(dialout)

La otra forma consiste en configurar «udev» para que cree el dispositivo con los permisos que necesitemos. Tras revisar el wiki de Debian y la imprescindible guía de Daniel Drake llego a la conclusión de que ya que voy a trastear con el sistema de reglas,lo adaptaré a mis gustos e intentaré que el dispositivo al que voy a conectar la UPS tenga su propio nombre

/dev/ups

y su particular propietario

nut

.

Primero localizo dentro de

/sys

el árbol de atributos del dispositivo usando la ruta física del mismo:

# udevinfo -n /dev/ttyS0 -a
looking at device '/class/tty/ttyS0':
KERNEL=="ttyS0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pnp0/00:06':
KERNELS=="00:06"
SUBSYSTEMS=="pnp"
DRIVERS=="serial"
ATTRS{id}=="PNP0501"
looking at parent device '/devices/pnp0':
KERNELS=="pnp0"
SUBSYSTEMS==""
DRIVERS==""

Para después crear un archivo de reglas en

/etc/udev/rules.d/z99-nut.rules

:

KERNEL=="ttyS0", NAME="ups-phasak-ph9960", MODE="660", GROUP="nut"

Y para probar esta configuración empleamos lo siguiente:

# udevadm test /class/tty/ttyS0
...
parse_file: reading '/etc/udev/rules.d/z99-nut.rules' as rules file
...
udevtest: looking at device '/class/tty/ttyS0' from subsystem 'tty'
udev_rules_get_name: add symlink 'char/4:64'
udev_rules_get_name: rule applied, 'ttyS0' becomes 'ups-phasak-ph9960'
udev_device_event: device '/class/tty/ttyS0' already in database, cleanup
udev_node_add: creating device node '/dev/ups-phasak-ph9960', major=4, minor=64, mode=0660,  uid=0, gid=118
...
update_link: 'ttyS0' with target 'ups-phasak-ph9960' has the highest priority 0, create it
...
#

Pero como queremos que el dispositivo exista ya, sin esperar a un reinicio ni nada parecido provocamos el evento de dispositivo añadido en

udev

:

# udevadm trigger --verbose --system-match=tty --action=add
...
/class/tty/ttyS0
...
# ls -l /dev/ups*
crw-rw---- 1 root nut 4, 64 mar 12 10:33 /dev/ups-phasak-ph9960

Ahora en la configuración de

nut

sólo tendremos que emplear el dispositivo nuevo:

# Archivo /etc/nut/upsd.conf
[facturacion]
driver  = megatec
port    = /dev/ups-phasak-ph9960
desc    = "Facturación"
mfr     = "Phasak"
model   = "PH9960 600VA"
serial  = 436100124

Y sólo queda reiniciar el subsistema.