2010-10-04 2 views
6

Существует сценарий оболочки (/ bin/sh, а не bash), для которого требуются права доступа root.su и sudo в сценарии оболочки

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

Теперь он использует следующий код:

if [ $(id -u) -ne 0 ]; then su root -- $0 [email protected] ; ... fi

Это прекрасно работает, но есть некоторые ОС, как Ubuntu, который не имеет корневой пароль на всех. С другой стороны, многие системы используют sudo для прав root.

Вопрос: как может сценарий обнаружить ли использовать su или sudo, не спрашивая пользователя ввести слишком много паролей (например, ввести sudo пароль, если он не - беги su).

ответ

3

Существует не пуленепробиваемый способ сделать это, потому что любое распространение может закладывать файлы любым способом. Например, Debian и Ubuntu часто размещают системные файлы в каталогах, отличных от Red Hat. Гораздо проще настроить скрипт для ОС, на котором он установлен.

2

Вы можете установить счету не нужен пароль для Суда в/и т.д./sudoers:

yourusername ALL=(ALL) NOPASSWD: ALL 

Если вы не хотите, чтобы сделать это, вы можете заставить их запустить скрипт как корень. Добавить что-то вроде этого в верхней части скрипта:

if [ "$UID" -ne 0 ]; then 
    echo "You must be root to run this script" 
    exit 1 
fi 

Таким образом, пользователь может получить, чтобы быть корнем, однако они выбирают (су или Sudo).

+0

Этот сценарий является своего рода установщиком - я не запустить его на своем хосте, но и другие пользователи запустить его на их машин. – zserge

+0

Как насчет второй части? Выйти рано и попросить их запустить скрипт как root. – gpojd

+0

Это был код, используемый в более старых версиях. Теперь я пытаюсь получить права root от скрипта, поэтому пользователю не нужно его перезапускать.Кажется, это будет немного более удобным для пользователя. – zserge

0

Проверьте sudo IST установлен

SU='su' 
which sudo > /dev/null && SU='sudo' 
+0

Хороший способ. Но: на машине может быть установлено sudo, но у пользователя нет разрешений для запуска этого скрипта с помощью sudo. – zserge

+0

Это не имеет значения, потому что тогда sudo не удастся, не спрашивая пароль, и вы можете вызывать 'su' вместо этого (просто наблюдайте за результатом' sudo true'). – bitmask

+0

Возможно, я ошибаюсь, но пока пользователю разрешено запускать true, не гарантируется, что он может запустить наш скрипт. И, если пользователь разрешен для запуска программ с паролем он будет запрашиваться при выполнении 'sudo true'. Я стараюсь избегать ненужных подсказок пароля. – zserge

0

Хотя это не в полной мере ответить на ваш вопрос, то стоит отметить, что вы можете проверить, если пакет Sudo установлен с помощью следующих:

систем на основе Debian :

dpkg -s sudo 

RPM системы на основе:

rpm -q sudo 
+1

Как насчет пользователей gentoo, arch или slackware? На мой взгляд, 'sudo' является более общим способом тестирования, если программа установлена. – zserge

+0

И что касается Free/Open/Net BSD, macOS, Illumos, HP/UX, Android, webOS? Если вы должны полагаться на что-то, полагайтесь на POSIX.1. Разумеется, это не платформенные инструменты для упаковки. – ghoti

+0

'hash somebinary' также является хорошим способом найти двоичный файл, особенно если вы снова будете вызывать двоичный код, поскольку он кэширует путь для более быстрого выполнения, но вам может потребоваться перенаправить весь вывод в/dev/null, если вы ожидать сбоя и просто получить код выхода. – dragon788

6

Не следует. Если скрипт требует прав root, он должен быть запущен как root. Это бизнес пользователя, как он собирается это сделать - используя su, sudo или какой-либо другой механизм.

Если вы обеспокоены проблемами безопасности и не хотите делать все от root, вы можете отказаться от прав root для этих частей.

+0

Комментарий zserge ниже объясняет: «Это был код, используемый в более старых версиях. Теперь я пытаюсь получить привилегии root из сценария [установки], поэтому пользователю не нужно его перезапускать. Кажется, это немного больше пользователь -дружелюбный". Кажется, справедливая основа для вопроса, а не по своей сути зла ;-). –

+0

@Tony: Я хочу сказать, что это совсем не просто. Это пример попыток быть умнее пользователя. В некоторых случаях это может сработать, но это гораздо более вероятно вызовет проблемы у пользователя. Также вы должны следовать принципу наименьшего удивления. Я был бы удивлен (и у меня были бы вопросы к автору), если какая-то программа попытается получить привилегии root с использованием sudo без моего согласия. –

1

Создать еще один .sh файл из этого файла называют исходный файл .sh как -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh 
Смежные вопросы