Я пытаюсь написать сценарий не интерактивный установка Meteor (JS Framework) и часть скрипта запрашивает sudo. Я не могу пройти мимо этого с моими навыками написания сценариев.
Установка: curl https://install.meteor.com | /bin/sh
Позже в сценарии он запрашивает пароль Sudo. Я хочу, чтобы этот шаг провалился. И тогда я могу написать свой путь к разрешению.
Примечание: я не могу добавить пользователя в файл sudoers, он работает в общей среде, которая не позволяет моему пользователю повышенный доступ.
Это заменит любой экземпляр строки «sudo» (без кавычек) на «sudo -n» (без кавычек):
curl https://install.meteor.com | sed 's/sudo/sudo -n/g' | /bin/sh
-n 'Параметр -n (неинтерактивный) запрещает sudo запрашивать у пользователя пароль. Если для запуска команды требуется пароль, sudo отобразит сообщение об ошибке и завершится.
Однако стоит отметить, что это только работает если вам будет предложено ввести пароль. Другими словами, если вы недавно запускали sudo и эти учетные данные позволяют запускать sudo без ввода пароля в течение 15 минут (по умолчанию), и вы запускаете это в течение 15 минут, вышеуказанная команда все равно успешно запустит sudo. Или, если пароль обычно не запрашивается, это тоже приведет к успеху.
Чтобы аннулировать сеанс, созданный недавно введенными учетными данными sudo, запустите sudo -k
. Опять же из мануала:
-k [команда]
При использовании отдельно параметр -k (kill) для sudo делает недействительными кэшированные учетные данные пользователя. При следующем запуске sudo потребуется пароль. Эта опция не требует пароля и была добавлена, чтобы позволить пользователю отозвать разрешения sudo из файла .logout. Не все политики безопасности поддерживают кэширование учетных данных.
При использовании вместе с командой или параметром, для которого может потребоваться пароль, параметр -k заставит sudo игнорировать кэшированные учетные данные пользователя. В результате sudo запросит пароль (если он требуется политикой безопасности) и не будет обновлять кэшированные учетные данные пользователя.
Если это не работает для вас (если, например, ваша политика безопасности не запрашивает пароль), вы можете попробовать:
curl https://install.meteor.com | sed 's/sudo/sudo \/bin\/false/g' | /bin/sh
Если программа sudo была запущена неудачно, sudo завершится ошибкой. И из справочная страница для false:
Выйдите с кодом состояния, указывающим на сбой.
... все ложно.
Это означает, что вместо выполнения любой команды, которую он пытается запустить с помощью sudo, он будет запускать /bin/false
, передавая имя исходной программы, предназначенной для запуска под sudo
как первый аргумент.
НОТА: Если вам действительно нужен весь первый линия содержащие вызов sudo для сбоя, эти решения (обязательно) не сделают это возможным. Сам вызов sudo завершится ошибкой, но если его аргументы созданы в подоболочке или в той же строке есть предыдущие команды, они будут работать как обычно. Итак, если исходная команда была:
sudo exterminate "$(ls /humans)"
Это станет:
sudo /bin/false exterminate "$(ls /humans)"
И ls /humans
все равно побежать. Наверное, очевидно, и это, вероятно, не имеет значения, но на всякий случай подумал, что упомяну.
Почему бы не изменить скрипт перед его использованием: curl https://install.meteor.com > /tmp/script
, измените его в / tmp / script, затем запустите /bin/sh /tmp/script
Изменить: Или, если будет запрошен пароль, просто введите три раза неверный пароль, и вам будет отказано