Program isolation with doas
This post presents a few simple steps that can effectively isolate the execution of a program from your "main" user account by using the doas(1) utility and a separate user account.
The doas(1) utility from the OpenBSD project allows one user to execute a command as another user. There are multiple doas(1) ports to choose from on platforms other than OpenBSD.
useradd
The first step is to create a user whose sole responsibility will be the
execution of a specific program. For the purposes of this post we will choose
the weechat
program, and we will create a user with the
weechat
username:
##
# FreeBSD: add user
root@localhost# pw useradd \
-n weechat \
-d /home/weechat \
-M u=rwx,g=rx,o= \
-s /sbin/nologin \
-m \
-c "Runs the weechat program"
##
# OpenBSD: add user
root@localhost# useradd \
-d /home/weechat \
-s /sbin/nologin \
-m \
-v \
weechatroot@localhost# chmod u=rwx,g=rx,o= /home/weechat
doas.conf
The second step is to permit the main
user
account to execute the weechat program as the weechat
user. This
can be done by updating doas.conf(5). On OpenBSD - doas.conf(5) can be found at
/etc/doas.conf
and on FreeBSD it can be found at
/usr/local/etc/doas.conf
:
##
# Permit the 'main' user to run the 'weechat' program as
# the 'weechat' user
permit nopass main as weechat cmd /usr/local/bin/weechat args
doas
The third and final step is to login with the main
user
account, and execute weechat as the weechat
user via doas(1). At this point we could repeat
these steps but for a different program - maybe FireFox ?
##
# Launch weechat as the 'weechat' user
main@localhost$ doas -u weechat /usr/local/bin/weechat