Doas es una utilidad que permite a una cuenta de usuario ejecutar órdenes como otra cuenta de usuario. En ocasiones se interpreta como «do it as someone else», de ahí doas; pero realmente el nombre fue accidental, no intencionado.

Doas es una adaptación de la orden homónima de OpenBSD, que es para el SO que se creó. Está pensado como un sustituto minimalista del popular sudo, con casi la misma funcionalidad, pero con menos código; por tanto potencialmente más seguro, ya que con menos se reduce el riesgo de errores en el programa. Además, la estructura de su archivo de configuración es mucho más simple.


Instal·lación

Doas está disponible en Debian, instalando el paquete doas. Una vez instalado lo podrá utilizar desde un terminal invocando la orden doas.

Configuración

Básica

Tal como viene instalado, doas no sirve de nada hasta que no se defina el archivo de configuración. Si intenta usarlo recibirá un mensaje de error.

doas: doas is not enabled, /etc/doas.conf: No such file or directory

Tendrá que crear, como administrador, el archivo /etc/doas.conf, y añadir ahí las reglas que considere. Cada regla ocupa una línea. La prioridad de las reglas es de abajo a arriba: se aplicará la última regla satisfecha. En consecuencia, las reglas más generales deben situarse al inicio del archivo, mientras que las más específicas al final.

Una regla muy simple en /etc/doas.conf es

permit johnsmith as root

que concede permisos al usuario johnsmith para ejecutar cualquier orden del sistema como administrador (root), introduciendo su propia contraseña (no la de root). Así, el usuario johnsmith tiene de facto permisos de administrador.

Esta simple regla consta de tres partes. La primera, acción, en esta caso permit, pero podría ser deny para denegar permisos en vez de concederlos. Por tanto, si la última regla del archivo de configuración es

deny johnsmith as root

el usuario johnsmith no podrá ejecutar absolutamente ninguna orden como administrador, aunque haya alguna regla anterior que se lo permita. Esto puede resultar útil para dar permisos a todos los miembros de un grupo, salvo a algún miembro en concreto.

La segunda parte, identidad, en este caso johnsmith. Puede ser el nombre de un usuario, de un grupo (añadiendo el prefijo «:»), o su indentificador numérico.

La tercera parte, objetivo, en este caso as root; el usuario root se puede sustituir por cualquier otro usuario, grupo o identificador numérico de usuario del sistema. Esta parte es opcional, si se omite, se asume que el objetivo son todos los usuarios del sistema. Por tanto, la regla

permit johnsmith

da permisos al usuario johnsmith para ejecutar cualquier orden como cualquier usuario del sistema.

Los comentarios inician con el caracter almohadilla (#) y alcanzan hasta el final de la línea. En la página de manual doas.conf hay información más detallada sobre las reglas. El paquete doas instala un archivo de configuración de ejemplo en /usr/share/doc/opendoas/examples/doas.conf que puede tomar como punto de partida para el suyo propio.

Es recomendable que tras modificar el archivo de configuración, compruebe que este no contiene ningún error sintáctico: vea Forma de uso.

Avanzada

Las reglas tienen más opciones que permiten mayor flexibilidad. La sintaxis de las reglas es la siguiente

permit|deny [options] identity [as target] [cmd command [args ...]]

cuyos detalles se pueden consultar en la página de manual doas.conf. Aquí haremos una exposición superficial.

Opciones

Una de las opciones disponibles es nopass, que evita que doas pregunte la contraseña al usuario. Por ejemplo

permit nopass johnsmith as root

permite al usuario johnsmith ejecutar cualquier orden del sistema como administrador, sin introducir ninguna contraseña. Hay una alternativa intermedia entre permit y permit nopass: permit persist. Con la opción persist solo se pedirá la contraseña al usuario en la primera ejecución, y no la volverá a pedir durante un tiempo.

Otras opciones disponibles son keepenv y setenv. La primera garantiza que las variables de entorno se mantienen cuando se crea el entorno del nuevo proceso. La segunda es para eliminar, mantener o definir variables de entorno para la ejecución de la orden. Para setenv, la lista de variables –todas separadas por espacios– se da entre unas llaves {}. Con un signo igual (=) se define una variable, con solo el nombre se mantiene la variable, y se elimina la variable con un signo menos (-) delante de ella.

Restricciones de órdrenes y argumentos

Mediante la parte cmd de una regla se puede dar permiso para ejecutar únicamente una orden concreta, quizás restringiendo también los argumentos u órdenes subordinadas. Por ejemplo

permit johnsmith as root cmd apt args update

La orden sucede a cmd, y los argumentos u órdenes subordinadas suceden a args. La palabra clave args sola, sin nada que la suceda, quiere decir que la orden ha de ejecutarse sin argumentos. Esta regla de ejemplo permite al usuario johnsmith ejecutar como root solamente la orden apt update. Cualquier otra orden subordinada de apt o argumento adicional, o la ausencia de alguno de ellos, producirá un mensaje de error «Operation not permitted».

Ejemplo

La siguiente regla de ejemplo muestra el uso simultáneo de diferentes opciones avanzadas

permit nopass setenv { -http_proxy APT_CONFIG=/etc/apt/apt.conf.d/50appstream } :updaters cmd apt args update

Permite a cualquier miembo del grupo updaters ejecutar apt update sin contraseña, eliminando la variable http-proxy del entorno, y definiendo la variable de entorno APT_CONFIG con la ruta a un archivo de configuración de APT.

PAM

El paquete doas instala un archivo de configuración básica de PAM en /etc/pam.d/doas. De modo que no necesita escribir uno usted.


Forma de uso

Al margen de lo dicho en la sección Configuración, la orden doas incorpora cierta funcionalidad predeterminada.

Si no se especifica, doas asume que el usuario objetivo es el administrador (root). Mediante la opción -u puede definir explícitamente el usuario como el cual quiere ejecutar la orden. Ejemplo

> doas -u juliasmith whoami

intentará ejecutar la orden whoami como juliasmith. Si juliasmith existe y tiene permisos para actuar como ella, se mostrará su nombre de usuario: juliasmith.

Con la opción -s podemos abrir un intérprete de órdenes como el usuario objetivo. Por ejemplo

> doas -s

abrirá un intérprete como administrador (root), ya que es el usuario objetivo por omisión. En cambio

> doas -u juliasmith -s

abrirá un intérprete de órdenes como juliasmith, ya que se ha definido explícitamente como el usuario objetivo.

La opción -n activa el modo no interactivo: si ha de pedir contraseña, doas lo interpretará como un error. Esto significa que solamente se pueden ejecutar órdenes que cumplan reglas del tipo permit nopass.

La opción -C permite comprobar la sintaxis de un archivo de configuración. Por ejemplo, una vez acabado el archivo /etc/doas.conf, ejecute

> doas -C /etc/doas.conf

Si el archivo está bien formado, no mostrará nada; si hay errores de sintaxis mostrará información al respecto.

Adicionalmente, la opción -C es útil para comprobaciones lógicas: dada una órden y unos argumentos, muestra la regla que se aplicaría, pero sin ejecutar la orden. Asumiendo un archivo /etc/doas.conf con dos reglas como el siguiente

# Permite al grupo «updaters» ejecutar «apt» como «root»,
# pero solo con el argumento «update»
permit nopass :updaters as root cmd apt args update
# Permite a «johnsmith» ejecutar «apt upgrade» como administrador
permit persist johnsmith as root cmd apt args upgrade

si johnsmith pertenece al grupo updaters y ejecuta las siguientes órdenes, se tendrá

> doas -C /etc/doas.conf apt update
permit nopass
> doas -C /etc/doas.conf apt upgrade
permit

Esto es porque la primera orden cumple solo la primera regla; en cambio la segunda orden cumple ambas reglas, por tanto se aplica la última (la segunda). Cualquier otro usuario del grupo updaters hubiera obtenido el resultado permit nopass y deny, respectivamente.


Ver también

Enlaces externos


CategoryRoot | CategorySystemSecurity | CategorySystemAdministration