LINUX.ORG.RU

sudo без пароля для пользователя внутри systemd unit-а

 , , ,


1

1

Хочется совсем странного.

Убунта 18.04.3

Есть systemd unit для пользователя, у которого в exec написана команда с /usr/bin/sudo.

Результата нет:

окт 18 10:40:07 boyko-v systemd[1304]: Starting Restarts systemd-resolved.service as user...
окт 18 10:40:07 boyko-v sudo[4240]: sudo: no tty present and no askpass program specified
окт 18 10:40:07 boyko-v sudo[4240]: pam_unix(sudo:auth): conversation failed
окт 18 10:40:07 boyko-v sudo[4240]: pam_unix(sudo:auth): auth could not identify password for [bvn13]
окт 18 10:40:07 boyko-v systemd[1304]: systemd-resolved-restart.service: Main process exited, code=exited, status=1/FAILURE
окт 18 10:40:07 boyko-v systemd[1304]: systemd-resolved-restart.service: Failed with result 'exit-code'.
окт 18 10:40:07 boyko-v systemd[1304]: Failed to start Restarts systemd-resolved.service as user.

В sudoers-ах запись о разрешении действий для пользователя есть, из консоли все работает без запроса пароля.

Есть какой-нибудь шанс заставить его запустить sudo внутри systemd юнита?

★★★★★

Последнее исправление: bvn13 (всего исправлений: 1)

но зачем там sudo? если мне не изменяет склероз, кажется, в юните можно указать, от какого пользователя запускать процесс

aol ★★★★★
()
$ grep testuser /etc/passwd
testuser:x:1001:1001::/:/usr/bin/nologin

$ sudo grep testuser /etc/sudoers
testuser ALL=(ALL) NOPASSWD: /etc/systemd/scripts/testscript

$ cat /etc/systemd/scripts/testscript
#!/bin/bash

echo "testscript: $0 $*"
echo "testscript: $(id)"

$ systemctl cat testservice
# /etc/systemd/system/testservice.service
[Service]
User=testuser
Group=testuser
Type=oneshot
ExecStart=/usr/bin/sudo /etc/systemd/scripts/testscript

$ sudo systemctl start testservice

$ systemctl status testservice
● testservice.service
   Loaded: loaded (/etc/systemd/system/testservice.service; static; vendor preset: disabled)
   Active: inactive (dead)

окт 18 11:38:11 able systemd[1]: Starting testservice.service...
окт 18 11:38:11 able sudo[559770]: testuser : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/etc/systemd/scripts/testscript
окт 18 11:38:11 able sudo[559770]: pam_unix(sudo:session): session opened for user root by (uid=0)
окт 18 11:38:11 able sudo[559770]: testscript: /etc/systemd/scripts/testscript
окт 18 11:38:11 able sudo[559770]: testscript: uid=0(root) gid=0(root) группы=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
окт 18 11:38:11 able systemd[1]: testservice.service: Succeeded.
окт 18 11:38:11 able sudo[559770]: pam_unix(sudo:session): session closed for user root
окт 18 11:38:11 able systemd[1]: Started testservice.service.

УМВР ЧЯДНТ?

Ты точно запускаешь то, что нужно? Путь абсолютный? Если нет, $PATH проверил?

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Да вроде б все живое

$ cat systemd-resolved-restart.service 

[Unit]
Description=Restarts systemd-resolved.service as user

[Service]
Type=oneshot
ExecStart=/usr/bin/sudo /bin/systemctl restart systemd-resolved


$ cat systemd-resolved-restart.timer

[Unit]
Description=Run systemd-resolved-restart.service every 10 minutes
Requires=systemd-resolved-restart.service

[Timer]
Unit=systemd-resolved-restart.service
OnCalendar=*:0/10

[Install]
WantedBy=timers.target
bvn13 ★★★★★
() автор топика

sudo: no tty present and no askpass program specified

ну вот же, оно явно говорит, что ему нужно.

tty пробрасывается опцией StandardInput=tty в юните.

askpass устанавливается либо в переменной SUDO_ASKPASS, либо ключом sudo -A. Или можно читать пароль из stdin с помощью sudo -S.

Или можно вообще использовать не sudo, а какой-нибудь systemd-run.

anonymous
()
Ответ на: комментарий от anonymous

StandardInput=tty установил:

окт 18 12:50:02 boyko-v systemd[1304]: Starting Restarts systemd-resolved.service as user...
окт 18 12:50:02 boyko-v systemd[9445]: systemd-resolved-restart.service: Failed to set up standard input: Permission denied
окт 18 12:50:02 boyko-v systemd[9445]: systemd-resolved-restart.service: Failed at step STDIN spawning /usr/bin/sudo: Permission denied
окт 18 12:50:02 boyko-v systemd[1304]: systemd-resolved-restart.service: Main process exited, code=exited, status=208/STDIN
окт 18 12:50:02 boyko-v systemd[1304]: systemd-resolved-restart.service: Failed with result 'exit-code'.
окт 18 12:50:02 boyko-v systemd[1304]: Failed to start Restarts systemd-resolved.service as user.

askpass будет запрашивать пароль?

Мне б избежать согласно sudoers-ам

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

попробовал

systemd-run --user --no-ask-password /bin/systemctl restart systemd-resolved

в упор запрашивает пароль. Видимо, не получится задуманное.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от TaV0x222
systemctl --user status systemd-resolved-restart.service
● systemd-resolved-restart.service - Restarts systemd-resolved.service as user
   Loaded: loaded (/home/bvn13/develop/_timers/systemd-resolved-restart.service; linked; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2019-10-18 15:31:24 MSK; 1s ago
  Process: 19939 ExecStart=/usr/bin/sudo -A /bin/systemctl restart systemd-resolved (code=exited, status=216/GROUP)
 Main PID: 19939 (code=exited, status=216/GROUP)

окт 18 15:31:24 boyko-v systemd[1304]: Starting Restarts systemd-resolved.service as user...
окт 18 15:31:24 boyko-v systemd[19939]: systemd-resolved-restart.service: Failed to determine supplementary groups: Operation not permitted
окт 18 15:31:24 boyko-v systemd[19939]: systemd-resolved-restart.service: Failed at step GROUP spawning /usr/bin/sudo: Operation not permitted
окт 18 15:31:24 boyko-v systemd[1304]: systemd-resolved-restart.service: Main process exited, code=exited, status=216/GROUP
окт 18 15:31:24 boyko-v systemd[1304]: systemd-resolved-restart.service: Failed with result 'exit-code'.
окт 18 15:31:24 boyko-v systemd[1304]: Failed to start Restarts systemd-resolved.service as user.

bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.