Я знаю, что могу стать root (суперпользователем) через su
команда, но я должен авторизовать ее после ввода команд. Есть ли способ, которым я могу стать root и авторизоваться (с паролем) в одной строке
Ну, единственное, что я могу придумать, это
echo 'password' | sudo -S command
То -S
флаг делает sudo
считайте пароль из стандартного ввода. Как объяснено в man sudo
:
-S, --stdin
Запишите запрос на стандартную ошибку и считайте пароль со стандартного ввода вместо использования терминального устройства. За паролем должен следовать символ новой строки.
Итак, чтобы запустить ls
с sudo
привилегии, вы бы сделали
echo 'password' | sudo -S ls
Обратите внимание, что это приведет к ошибке, если ваш sudo
токен доступа активен, если вам не нужно вводить свой пароль, потому что вы уже сделали это недавно. Чтобы обойти это, вы могли бы использовать -k
чтобы сбросить токен доступа:
echo 'password' | sudo -kS ls
Я не знаю никакого способа ввести вас в настоящую корневую оболочку (например su
или sudo -i
) делать. Однако этого может быть достаточно для того, что вам нужно.
В терминале запустите visudo
команда для редактирования судоеры файл:
sudo visudo
и добавьте следующую строку в список пользователей sudoers
username ALL = NOPASSWD : ALL
Примечание: Заменить имя пользователя с твоим настоящим имя пользователя в приведенной выше строке.
То echo 'password' | sudo -kS ls
решение работает, но у него есть несколько недостатков в области безопасности, большинство из которых уже упоминались в комментариях к ответу тердона. Таким образом, я хотел бы предложить другой подход:
Если вам часто требуется выполнить только одну команду, например apt-get upgrade
, вы можете настроить свою систему таким образом, чтобы sudo someCommand
делает нет требуется ввести пароль.
Чтобы сделать это, запустите visudo
и введите что-то похожее на следующее:
myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade
Обратите внимание, что если вы введете команду без аргумент (например, без upgrade
в этом примере), пользователю будет разрешено запускать его с какой-нибудь аргумент, так что используйте его с осторожностью.
Вы тоже можете это сделать:
sudo -S <<< "password" command
Вместо того, чтобы полностью удалять пароль, вы можете увеличить время ожидания, чтобы вам приходилось вводить его всего несколько раз в день; в терминале запустите:
sudo visudo
В конце файла добавьте следующую строку, чтобы установить тайм-аут в 30 минут (заменить jsmith
с вашим именем пользователя).
Defaults:jsmith timestamp_timeout=30
Вы можете использовать любой номер, который захотите; -1
означает отсутствие тайм-аута (запрашивается только в первый раз), и 0
означает мгновенный тайм-аут (запрашивается каждый раз, когда вы sudo
). Тайм-аут по умолчанию составляет 5 минут.
Вейдер, судя по вашему комментарию к вашему первоначальному вопросу, вы хотели бы переключиться на интерактивную оболочку, работающую с правами суперпользователя, верно?
У Sudo есть определенный аргумент для запроса оболочки:
-s [command]The -s (shell) option runs the shell specified by the SHELL environment variable ifit is set or the shell as specified in the password database. If a command isspecified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.
Это позволяет избежать уже упомянутых недостатков безопасности и позволяет "перейти к root" с помощью следующей команды:
sudo -s
если Мне действительно нужно запустить корневую оболочку (в большинстве случаев я этого не делаю), тогда я нахожу очень полезным установить соответствующую переменную среды HOME оболочки (чтобы отразить запуск от имени "root"), это можно сделать с помощью флага "-H". Таким образом, полная команда будет
sudo -s -H
Вы можете найти гораздо больше подробностей в справочная страница sudo.
Это, по-видимому, представляет собой огромный риск для безопасности. Я, конечно, не мог рекомендовать такой образ действий.
Это может быть решением Как мне запускать определенные команды sudo без пароля?
Не могли бы вы привести пример того, что вы имеете в виду? Вы не просто ищете “команду sudo”, не так ли?
@terdon нет, это не так. Я хотел бы иметь возможность стать суперпользователем в одной команде без необходимости выполнять “su” → ввести пароль. Это не похоже на то, что это допустимая команда: su -password