Выполнять команды как другого пользователя без пароля – sudo не удается?

Я вхожу на свой сервер как userA , у этого пользователя есть оболочка bash , все работает отлично.

Затем, для целей программы, мне пришлось сделать sudo adduser --system --home=/home/userB --group userB ; этот пользователь, по-видимому, без пароля, судя по содержимому /etc/passwd и /etc/shadow :

 $ grep userB /etc/passwd userB:x:Z08:WW9::/home/userB:/bin/false $ sudo grep userB /etc/shadow userB:*:16XXX:0:YYYYY:7::: 

Кроме того, в домашнем каталоге /home/userB/.profile отсутствует /home/userB/.profile , а также любые файлы userB .

Теперь, когда я зарегистрирован как userA , я хотел бы запускать команды как userB , в частности, проверять $PATH который видит пользователь. Поэтому я попытался отредактировать через EDITOR=/usr/bin/nano sudo visudo и добавить одну из строк userA :

 ... # User privilege specification root ALL=(ALL:ALL) ALL #userA ALL=(userB) NOPASSWD: /bin/bash userA ALL = (userB) NOPASSWD: ALL ... 

… затем сохраните файл, выйдите из удаленной оболочки, снова войдите в систему как userA . Затем я пытаюсь запустить:

 $ sudo -iu userB; echo $? 1 $ sudo -S -u userB -i /bin/bash -l -c 'echo $HOME'; echo $? 1 $ sudo -i -u userB echo \$HOME; echo $? 1 

… и, очевидно, ничего не работает – и ошибок нет. Тогда я подумал, что strace одну из этих команд, и я действительно получил ошибку:

 $ strace sudo -iu userB ... write(2, "sudo: effective uid is not 0, is"..., 140sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? ) = 140 exit_group(1) = ? +++ exited with 1 +++ 

Однако nosuid не является проблемой для этого корневого раздела, я думаю:

 $ mount | grep '/ ' /dev/sdaX on / type ext4 (rw,errors=remount-ro) 

Так что теперь я действительно не знаю, что делать. Возможно ли вообще, чтобы userA в этом случае выполнял команды (например, печатал переменную среды $HOME ) как userB – и если да, то как я могу заставить ее работать?

2 Solutions collect form web for “Выполнять команды как другого пользователя без пароля – sudo не удается?”

С sudo manpage:

 -i, --login Run the shell specified by the target user's password data- base entry as a login shell. 

У вашего пользователяB есть /bin/false в качестве оболочки, так что это команда, которая запускается.

 % /bin/false ; echo $? 1 

Поэтому, чтобы исправить это, вам нужно изменить оболочку userB на /bin/bash (или /bin/sh или что вы предпочитаете) или не использовать флаг -i для sudo. Вам нужна оболочка для входа?

Параметр -i в sudo пытается создать оболочку входа, которая, в свою очередь, запускает выбранную оболочку пользователя. Вы установили это в /bin/false в /etc/passwd :

 $ grep userB /etc/passwd userB:x:Z08:WW9::/home/userB:/bin/false 

Попробуйте запустить:

 sudo -u userB ls 

Если это работает, то все работает, как вы его настроили. Если вы хотите использовать интерактивную оболочку -s вместо -s которая не будет вызывать оболочку входа пользователя.

Если вам нужна полная оболочка для входа, вы должны изменить оболочку пользователя с помощью

 sudo chsh -s /bin/bash userB 
  • Debian 9: невозможно использовать sudo
  • Переменная HOST в / etc / sudoers
  • Ограничить пользователя для запуска определенной команды sudo
  • Будет ли я запрашиваться пароль sudo второй раз?
  • Как избежать sudo при работе с файлами, принадлежащими учетной записи службы?
  • Написать в файл без перенаправления?
  • sudo отсутствует в Palm WebOS - могу ли я добавить его?
  • Какой сценарий может позволить обычным пользователям использовать пространства имен в сети?
  • Команды «sudo» медленны во время работы в сети
  • Ограничьте стандартных пользователей для запуска команды с определенным аргументом
  • Есть ли лучшие / более безопасные методы запуска OpenVPN-клиента как обычного пользователя?
  • Проблема с запуском cd с sudo в качестве другого пользователя
  • Linux и Unix - лучшая ОС в мире.