2015-05-29 3 views
3

Вот мой сценарий:Shell скрипт получает суперпользователя привилегии без запуска, как Судо

script.sh:

sudo cat /etc/passwd- 

Если я в сеансе sudo (например, я побежал другую команду с sudo несколько минут назад), а теперь запустить

script.sh 

Сценарий получит sudo доступ. Однако, если я запустил cat /etc/passwd-/, я получу отказ в разрешении.

Как пользователь, я бы не ожидал, что script.sh сможет получить права суперпользователя так просто (например, без предоставления прав суперпользователя с sudo script.sh).

Ожидается ли такое поведение? Можно ли его настроить?

Я вижу, что поведение полностью похоже на sudo su, e, g, потенциально предоставляющее доступ суперпользователя к любому скрипту, который вы запускаете на этом сеансе, но еще хуже, потому что вы даже не можете его знать и не знаете когда он заканчивается (по крайней мере, не без проверки вручную)

+0

В вашей сессии хранятся учетные данные. Когда вы запускаете скрипт как самостоятельно, они все еще кэшируются. Запустите сценарий в отдельном сеансе, чтобы избежать этого, и вы также можете настроить длину кеширования (также ограничьте то, что вы можете сделать с помощью 'sudo' вместо« всего »). –

+0

, если все сценарии могут запрашивать учетные данные, в чем смысл использования sudo против сеанса суперпользователя в отношении безопасности? Создаете ли вы специальный пользователь для запуска скриптов, отличных от sudo, когда учетные данные будут кэшироваться? – edi9999

+1

'sudo' гораздо более настраивается, чем просто позволить пользователю стать суперпользователем; ограничивая пользователя только определенными привилегированными командами, либо с паролем, либо без него. – chepner

ответ

3

Ожидается ли такое поведение?

Да, действительно, это ожидаемое поведение. За него отвечают кэшированные учетные данные пользователя для sudo.

Возможно ли его конфигурирование?

Да, это настраивается.

И я думаю, что ваша озабоченность по поводу безопасности является действительной. Запуск script.sh в терминале, где команда sudo запускается до (в течение определенного таймаута), предоставит привилегию суперпользователя сценария, если скрипт написан с явными командами sudo.

Вы можете избежать любого сценария не запрос пароля при запуске, как Судо, запустив его с:

sudo -k script.sh 

Он будет запрашивать пароль, независимо от какой-либо предыдущей SUDO команды/с или сессии.

И запустить скрипт.sh без sudo i.е только с script.sh и еще подскажите пароля для команды Sudo/с:

Вы можете изменить значение тайм-аута (длительность Судо поддерживает сеанс) постоянно:

запустить sudo visudo

Затем измените строку:

Defaults  env_reset 

к

Defaults  env_reset,timestamp_timeout=0 

Сохранить и выйти из (Ctrl + X, то Y)

Это гарантирует, что Sudo запросит пароль каждый раз, когда он запускается.

Или Если вы не хотите, чтобы изменить его навсегда и хотите, чтобы ваш скрипт запросит пароль, по крайней мере один раз (при сохранении сеанса), то вы можете изменить сценарий, как это:

sudo -k first-command-with-sudo 
sudo second-command 
sudo third 
and so on 

Этот скрипт будет запрашивать пароль хотя бы один раз, независимо от предыдущих sudo command/s или session.

В случае, если вы не знаете (или не имеют доступа к) содержание script.sh сценария (он может иметь команды SUDO внутри него или нет)

И вы хотите быть уверены, что любая команда sudo наверняка запросит пароль хотя бы один раз, а затем запустит sudo -K (столица K) перед запуском скрипта.

Теперь, если вы запустите script.sh, и если он содержит команду sudo, он обязательно запросит пароль.

Смежные вопросы