Предположим, у меня есть пользователь some_user
и команда / usr / bin / command
.Как мне выполнить эту команду от имени пользователя root, введя / usr / bin / command
, но не sudo / usr / bin / command
?
Я попытался отредактировать sudoers
с visudo
, но безуспешно, пароль не запрашивается, но мне нужно написать sudo
:
some_user ALL = (ALL: ALL) NOPASSWD: / usr / bin / command
Есть ли разница между приведенной выше командой и www-data ALL = (ALL) NOPASSWD: / usr / bin / kill
?
Спасибо.
Вы можете сделать / usr / bin / command
корневым идентификатором setuid. Однако это будет работать для ВСЕХ пользователей, а не только для конкретного. Т.е. любой пользователь, набравший / usr / bin / command
, запустит команду от имени пользователя root без необходимости указывать пароль - вы не можете ограничить это только определенными пользователями. Кроме того, когда вы устанавливаете / usr / bin / command
setuid root, не будет возможности запустить эту команду как некорневой, пока вы не удалите бит setuid.
Btw. Именно так работает sudo
- / usr / bin / sudo
является setuid root, поэтому он автоматически становится root, когда вы набираете sudo
. Если бы это был не setuid root, он не смог бы переключиться на root.
Но я предлагаю вам не устанавливать случайные команды setuid root. sudo
был разработан для использования таким образом и выполняет множество проверок безопасности, прежде чем фактически позволит вам запустить команду. По определению , если вы вводите имя команды в терминале, вы запускаете эту команду как текущий идентификатор пользователя (если только команда не повышает привилегии сама по себе, например, будучи setuid root, или используя sudo
внутри, как в решении Тони). sudo
служит для того, чтобы четко отличать команду, выполняемую от имени пользователя без полномочий root, от команды, выполняемой от имени пользователя root. Поэтому не пропускайте его.
Наверное, проще всего написать сценарий оболочки.
Новый сценарий в / usr / local / bin / command
, который запускает / usr / bin / command
через sudo
/ usr / local / bin / command
#!/bin/bash
echo "[I] Invoked by '${USER}', running as root" >&2
sudo /usr/bin/command $(printf '%q ' "$@")