У вас есть несколько вариантов:
chmod g+x a
Да, вы можете устанавливать биты без очистки других битов. См. первый вариант. Но чтобы сделать это более автоматизированным, выполните одно из следующих действий:
чтобы запустить что-то от имени другого пользователя, у нас есть разные методы:
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 не умрет в одиночку.
Вы можете использовать systemd-ask-password
для назначения пароля переменной bash.
Пример
password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl shell {{ your command }}
Как пользователь 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