эквивалент sudo в systemd

У вас есть несколько вариантов:

  • chmod g+x a
  • изменить umask
  • использовать списки контроля доступа.

Да, вы можете устанавливать биты без очистки других битов. См. первый вариант. Но чтобы сделать это более автоматизированным, выполните одно из следующих действий:

  • Установите для umask значение rwxr -x ---, и у каждого пользователя будет собственная группа по умолчанию (их основная группа принадлежит только ему ).
  • Используйте списки контроля доступа :, с их помощью вы можете не только устанавливать разрешения для нескольких групп и пользователей, вы также можете устанавливать значения по умолчанию для каталогов (, как и в sgid, но не только для группы, но и для режима ). ]. см. setfacl, getfacl. см. также Какие существуют способы установки прав доступа к файлам и т. д. в gnu/linux

3
11.06.2020, 17:16
2 ответа

Выполнить команду от имени другого пользователя

чтобы запустить что-то от имени другого пользователя, у нас есть разные методы:

  • machinectl:это создает отдельный сеанс

  • ssh:это создает отдельный сеанс

  • systemd -run:это не создает отдельный сеанс, а создает отдельный сервисный блок, которым можно управлять так же, как и сеансом. например, когда я запускаю loginctl session-status, я получаю эту ошибку:Could not get properties: Caller does not belong to any known sessionиз-за отсутствия идентификатора сеанса.

  • pkexec:это не создает отдельный сеанс

  • sudo:это не создает отдельный сеанс

Как передать пароль в терминале (без графического интерфейса)

мы можем использовать:

  • pkexec:это нужно pkttyagent

  • machinectl:это запрос пароля с помощью графического интерфейса, чтобы использовать tty для прохода, нам нужен pkexec/sudo или ssh

  • systemd -запустить:это запросить пароль с помощью графического интерфейса, чтобы использовать tty для прохода, нам нужен pkexec/sudo или ssh

  • sudo:sudo необходимо заменить на pkexec

  • ssh:для этого потребуется пароль root или нам нужно использовать pkexec/sudo или ssh user@localhost

Заключение:

только machinectl и ssh дали мне отдельную сессию, systemd -run тоже неплох, но он для скриптов, а не для создания сессий.

и для получения root мы можем использовать pkexec

  • автомат
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec machinectl shell --uid=root --setenv="DISPLAY=:1.0" --setenv=SHELL=/bin/bash.host /bin/bash -lc "startxfce4"
  • сш
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec ssh -t root@localhost  "bash -lc  'export DISPLAY=:1.0 ; startxfce4'"
  • системд -запустить
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec systemd-run --pty --pipe --wait --collect --service-type=exec --uid=root bash -lc "export DISPLAY=:1.0 ; export SHELL=/bin/bash ; startxfce4"

pkttyagent :нужен для того, чтобы заставить pkexec запрашивать пароль с помощью терминала вместо диалогового графического интерфейса

тайм-аут 3 с :необходим, потому что pkttyagent не умрет в одиночку.

3
28.04.2021, 23:28

Решение 1

Вы можете использовать systemd-ask-passwordдля назначения пароля переменной bash.

Пример

password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl shell {{ your command }}

Решение 2

Как пользователь root, вы можете использовать machinectl --no-ask-password. Из документации:

--no-ask-password

Do not query the user for authentication for privileged operations.

Ссылки

https://www.freedesktop.org/software/systemd/man/systemd-ask-password.htmlhttps://www.freedesktop.org/software/systemd/man/machinectl.html

0
28.04.2021, 23:28

Теги

Похожие вопросы