#linux #suspend #systemctl
Вопрос:
На встроенном устройстве Linux (модуль Colibri с процессором iMX7d) Я не могу запустить команду systemctl suspend
от имени пользователя, не являющегося пользователем root, чтобы переключиться в режим приостановки. Когда я вхожу в систему как пользователь root, команда выполняется, и система переключается в режим приостановки. Та же команда выполняется на ПК с Ubuntu в качестве пользователя, не являющегося пользователем root.
Я хотел бы войти в режим приостановки также на встроенном устройстве Linux без прав root. Кто-нибудь может мне помочь или указать направление, как этого достичь? Любая помощь будет очень признательна.
Вот версия ядра Linux встроенного устройства:
$ uname -r
5.4.91-5.2.0-devel git.c59b3c2da1e9
Вот версия версии systemctl:
$ systemctl --version
systemd 244 (244.5 )
PAM -AUDIT -SELINUX IMA -APPARMOR -SMACK SYSVINIT UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS ACL XZ -LZ4 -SECCOMP BLKID -ELFUTILS KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid
Ответ №1:
Чтобы разрешить выполнение команды root только для других (некорневых) пользователей, вы можете использовать sudo https://linux.die.net/man/8/sudo
Предполагается, что ваш пользователь, не являющийся пользователем root, который должен иметь возможность приостановить, называется: user1
Создайте файл , /root/suspend.sh
который содержит systemctl suspend
, и убедитесь, что он находится в режиме 0700
и принадлежит root:root
, например, запустите их от имени root:
echo 'systemctl suspend' > /root/suspend.sh
chmod 0700 /root/suspend.sh
chown root:root /root/suspend.sh
Затем запустите visudo
от имени root, затем добавьте эту строку:
user1 ALL=(root) NOPASSWD: /root/suspend.sh
затем сохраните файл
Это означает, что user1
вы можете запускать скрипт /root/suspend.sh
от имени root
пользователя, не запрашивая его (пользователя 1) пароль
если вы хотите приостановить работу как пользователь1, запустите: sudo /root/suspend.sh
С помощью этого решения пользователь1 может работать sudo /root/suspend.sh
от имени root, но не может выполнять произвольную команду от имени root (если вы не добавили пользователя в группу sudo).
ВАЖНОЕ СООБРАЖЕНИЕ:
Вы должны убедиться /root/suspend.sh
, что он доступен для записи только корнем (и что каталог, содержащий /root/
его, также доступен для записи только корнем).
Если любой пользователь , не являющийся пользователем root, может писать /root/suspend.sh
, то когда пользователь1 запустит файл, он выполнит там произвольную команду.
Если любой пользователь , не являющийся пользователем root, может записывать в каталог /root/
, любой пользователь также может удалить/удалить /root/suspend.sh
, а затем создать новый файл с тем же именем произвольной командой.