Я знаю, что могу стать 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”, не так ли?
@terdon нет, это не так. Я хотел бы иметь возможность стать суперпользователем в одной команде без необходимости выполнять “su” → ввести пароль. Это не похоже на то, что это допустимая команда: su -password