Назад | Перейти на главную страницу

Как обойти sudo

Я пытаюсь написать сценарий не интерактивный установка 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

Из Справочная страница sudo:

-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

Изменить: Или, если будет запрошен пароль, просто введите три раза неверный пароль, и вам будет отказано