[kbd] [PATCH] vlock: allow sudo user to unlock his session

Mikhail Novosyolov m.novosyolov at rosalinux.ru
Sun Aug 9 23:50:07 MSK 2020



9 августа 2020 г. 19:08:47 GMT+03:00, Alexey Gladkov <gladkov.alexey at gmail.com> пишет:
>On Sat, Aug 01, 2020 at 04:19:59PM +0300, Mikhail Novosyolov wrote:
>> 
>> https://github.com/legionus/kbd/pull/45
>> 
>> 
>> If a non-root user ran sth like "sudo -i" and vlock'ed from inside
>it,
>> then that user himself should be able to unlock his console.
>> 
>> [user at HP-Elite-7300 tmp]$ echo $LOGNAME
>> user
>> [user at HP-Elite-7300 tmp]$ sudo -i
>> root at HP-Elite-7300:~# echo $LOGNAME
>> root
>> root at HP-Elite-7300:~# echo $SUDO_USER
>> user
>> root at HP-Elite-7300:~#
>> 
>> Tested on rosa2019.1 + kbd 2.2.0 + this patch:
>> [root at rosa-2019 kbd]# su - user
>> [user at rosa-2019 ~]$ sudo -i
>> [sudo] password for user:
>> [root at rosa-2019 ~]# vlock
>> Данное устройство tty (console) не является виртуальной консолью.
>> Блокировка console установлена user.
>> Пароль:
>> [root at rosa-2019 ~]#
>> sudo root session was successfully unlocked with user's password.
>> [root at rosa-2019 ~]# unset SUDO_USER
>> [root at rosa-2019 ~]# vlock
>> Данное устройство tty (console) не является виртуальной консолью.
>> Блокировка console установлена root.
>> Пароль:
>> root password is requested without $SUDO_ENV.
>
>I don't like the idea of implicitly changing the user through
>environment
>variables.

I also don't like it, but don't see much difference with setting LOGNAME=vasya before running vlock and then being unable to unlock the console without root due to fallback to uid=0...

> SUDO_USER can be exposed accidentally or leak into the
>environment due to an error. In this case, you will lock the console
>without being able to unlock.
>
>Also, your patch will not allow you to block the console by another
>user
>or by root.

What do you mean?

>
>> Another vlock implementation [1, 2] does not check that UIDs match,
>> I do not see sense in this check, removing it to make what I want
>work.
>> 
>> [1] Another vlock implementation: https://github.com/WorMzy/vlock
>> [2] My similar patch for it:
>https://github.com/mikhailnov/vlock/commit/ba38d5d563cdfaad3b2f260248b3434c235a7afd
>> ---
>>  src/vlock/username.c | 17 +++++++++--------
>>  1 file changed, 9 insertions(+), 8 deletions(-)
>> 
>> diff --git a/src/vlock/username.c b/src/vlock/username.c
>> index a26a148..4c6d295 100644
>> --- a/src/vlock/username.c
>> +++ b/src/vlock/username.c
>> @@ -40,17 +40,18 @@ get_username(void)
>>  {
>>      const char *name;
>>      struct passwd *pw = 0;
>> +    char *logname = NULL;
>>      uid_t uid         = getuid();
>>  
>> -    char *logname = getenv("LOGNAME");
>> +    /* If a non-root runs a sudo session, ask for user's
>> +     * password to unlock it, not root's password */
>> +    logname = getenv("SUDO_USER");
>> +    if (logname == NULL)
>> +        logname = getenv("LOGNAME");
>>  
>> -    if (logname) {
>> -        pw = getpwnam(logname);
>> -        /* Ensure uid is same as current. */
>> -        if (pw && pw->pw_uid != uid)
>> -            pw = 0;
>> -    }
>> -    if (!pw)
>> +    pw = getpwnam(logname);
>> +
>> +    if (!pw && uid)
>>          pw = getpwuid(uid);
>>  
>>      if (!pw)
>> -- 
>> 
>> Please CC me when replying, I am not subscribed to
>kbd at lists.altlinux.org
>> The same patch was submited as a pull request on Github:
>https://github.com/legionus/kbd/pull/45
>> 
>> _______________________________________________
>> kbd mailing list
>> kbd at lists.altlinux.org
>> https://lists.altlinux.org/mailman/listinfo/kbd

-- 
Простите за краткость, создано в K-9 Mail.


More information about the kbd mailing list