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.