3

Я читал следующий код:

$ sudo bash
# cd /home/
# ./gitpull.sh

Зачем мне первая строка, что она делает именно? Что если я просто сделал $ sudo вместо $ sudo bash ?

6 ответов6

7

Он запускает оболочку bash от имени пользователя root . Вам это нужно, потому что обычно обычные пользователи не могут получить доступ к /home/

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

3

Вы были бы намного лучше делать:

$ sudo sh -c 'cd /home; ./gitpull.sh'

Потому что команды, вызванные от имени root, будут зарегистрированы. Вызов оболочки непосредственно через sudo исключает все преимущества безопасности sudo, и его следует избегать.

1

Печально известный sudo является своего рода аббревиатурой Superuser Do.

Это в основном делает обычного пользователя Супер пользователем на короткое время.

В вашей команде sudo bash вы фактически говорите, что Superuser do -> оболочка Bourne (bash), которая открывает пользователя root, вошедшего в оболочку.

Если вы просто запустите sudo, операционная система не будет знать, что делать. В общем, за sudo следует команда unix.

0

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

0

sudo <shell> , если он работает, выдает неправильную установку sudo и потенциальную слабость безопасности.

sudo не должен быть настроен для разрешения произвольных команд, таких как shell; Цель sudo - позволить аутентифицированным пользователям без полномочий root запускать определенные команды от имени пользователя root, не зная пароля root.

Если sudo bash разрешен любому пользователю, этот пользователь является пользователем root просто благодаря тому, что знает свой собственный пароль.

Если злоумышленник получит пароль от одной из учетных записей, которые могут выполнить sudo bash , у злоумышленника, таким образом, будет root.

Правильный способ сделать эквивалент sudo bash (получить корневую оболочку) - это su , после чего следует указать пароль root, а не свой собственный.

0

Я держу пари, что sudo bash вместо sudo указано

  • абсолютно убедитесь, что вы вызываете ./gitpull.sh из bash, а не другую оболочку, такую как tcsh , pdksh или обычный старый sh . Я почти уверен, что строка hashbang скрипта должна позволять скрипту указывать, в какой оболочке он будет запускаться, но, возможно, по какой-то причине он был опущен или автор инструкции не хочет, чтобы вы полагались на это.
  • Я считаю, что если вы запускаете bash без других аргументов, это не действует как "оболочка для входа", и, возможно, сценарий зависит от этого.
  • сила привычки от человека, который написал инструкции (возможно, он / она работает в среде с несколькими оболочками).
  • возможно, автор инструкций не очень умел или имеет вредные привычки из других сред.

Также @nisdis прав. Обычный старый sudo просто печатает информацию об использовании. Но почему бы не использовать su ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .