Права суперпользователя, необходимые для команды «systemctl приостановить»

#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 , а затем создать новый файл с тем же именем произвольной командой.