On 2015/11/25 00:14, Stuart Henderson wrote: > On 2015/11/24 11:24, Richard Johnson wrote: > > We use 2-factor authn for sudo & doas, as well as for most logins. > > Presently, we transport Yubikey and other HOTP strings across RADIUS to an > > otpd authserver > > Interesting...is that a fork of the TRI-D otpd? I found the googlecode > one and a github export but nothing that seems currently active and > nothing that supports Yubikey. (I'm on the lookout for things which > handles central Yubikey auth, none of the programs that I've found so > far are very appealing). > > > This is on systems with 1200+ user accounts, about 30 active daily. Users > > expect that if they can log in as username:radius or username:skey, they > > should be able to sudo -a radius or sudo -a skey. > > > > Moving away from Kerberos means possible increasing use of sudo or doas by > > regular users to run transfer commands to data archives. For this, it would > > be useful if doas supported "-a skey". Then I could just use doas; the > > command is otherwise plain enough. > > > > But that's not a lot of users across the entire OpenBSD installed base. > > > > Installing sudo from ports is still an option. I need to debug the -a > > failure there now. ;) > > > > > > Richard > > > > Personally my take on this is that as long as it's just done as -a > then it's small and simple to implement (pass a string from args to > auth_userokay), and there's no other way to provide access to this which > is an important, though lesser-known, part of bsd_auth. We already trust > auth_userokay with network-supplied strings for this (e.g. as part of > the username from ssh) so this doesn't seem to add any real exposure > risk. >
Here's an updated version of Renaud's diff against -current after the change to auth_userchallenge. Index: doas.c =================================================================== RCS file: /cvs/src/usr.bin/doas/doas.c,v retrieving revision 1.46 diff -u -p -r1.46 doas.c --- doas.c 3 Dec 2015 08:12:15 -0000 1.46 +++ doas.c 8 Dec 2015 01:26:19 -0000 @@ -37,7 +37,8 @@ static void __dead usage(void) { - fprintf(stderr, "usage: doas [-ns] [-C config] [-u user] command [args]\n"); + fprintf(stderr, "usage: doas [-ns] [-a style] [-C config] [-u user]" + " command [args]\n"); exit(1); } @@ -323,6 +324,7 @@ main(int argc, char **argv, char **envp) int nflag = 0; char cwdpath[PATH_MAX]; const char *cwd; + char *login_style = NULL; if (pledge("stdio rpath getpw tty proc exec id", NULL) == -1) err(1, "pledge"); @@ -331,8 +333,11 @@ main(int argc, char **argv, char **envp) uid = getuid(); - while ((ch = getopt(argc, argv, "C:nsu:")) != -1) { + while ((ch = getopt(argc, argv, "a:C:nsu:")) != -1) { switch (ch) { + case 'a': + login_style = optarg; + break; case 'C': confpath = optarg; break; @@ -412,7 +417,7 @@ main(int argc, char **argv, char **envp) if (nflag) errx(1, "Authorization required"); - if (!(as = auth_userchallenge(myname, NULL, "auth-doas", + if (!(as = auth_userchallenge(myname, login_style, "auth-doas", &challenge))) err(1, "auth challenge failed"); if (!challenge) { Index: doas.1 =================================================================== RCS file: /cvs/src/usr.bin/doas/doas.1,v retrieving revision 1.14 diff -u -p -r1.14 doas.1 --- doas.1 27 Jul 2015 17:57:06 -0000 1.14 +++ doas.1 8 Dec 2015 01:26:19 -0000 @@ -22,6 +22,7 @@ .Sh SYNOPSIS .Nm doas .Op Fl ns +.Op Fl a Ar style .Op Fl C Ar config .Op Fl u Ar user .Ar command @@ -40,6 +41,19 @@ is specified. .Pp The options are as follows: .Bl -tag -width tenletters ++.It Fl a Ar style ++The ++.Fl a ++(authentication style) option causes ++.Nm ++to use the specified authentication style when validating the user, ++as allowed by ++.Pa /etc/login.conf . ++The system administrator may specify a list of doas-specific ++authentication methods by adding an ++.Sq auth-doas ++entry in ++.Pa /etc/login.conf . .It Fl C Ar config Parse and check the configuration file .Ar config ,