Судо против корня; любые фактические различия?

Я работаю с членом службы поддержки продукта, и он настаивает на том, что мне нужно быть root для установки серии патчей и что sudo не будет работать; он не дает причины, но, по-видимому, очень уверен в своих убеждениях. Просмотр суперпользователя Я не могу определить возможные причины для этого, и в подтверждение, когда я запустил:

sudo -l

Я получаю:

...
User [MY USERNAME] may run the following commands on this host:
    (ALL) ALL

Получение доступа из команды Linux /сервера, чтобы на самом деле быть root, не является процессом imediate, как я понимаю, поэтому я предпочел бы установить их самостоятельно.

Существует ли какая-либо практическая причина, почему sudo будет вести себя иначе, чем root для установки программного обеспечения на сервере?

42 голоса | спросил Nex Terren 21 J0000006Europe/Moscow 2014, 01:15:38

5 ответов


33

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

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

Где [1] = /usr /local /sbin: /usr /local /bin: /usr /sbin: /usr /bin: /sbin: /bin
Env = переменные среды сбрасываются для 1 и 5, взятые из $ USER в 2,3,4.

Таким образом, скрипт или программа, запущенная с другим вариантом, может видеть разные $PATH, $HOME, его оболочка может читать разные .bashrc, .profile и переменные среды. Он читает файл, связанный с $HOME. Каждый пользователь может изменить свою среду по-другому (переменные, $PATH, .bashrc, .profile, .bash_profile, alias ...) , В частности, пользователь может иметь другой порядок каталогов в своем $PATH, и, как следствие, скрипт может выполнить команду, например. в /home/$USER/bin, а затем на пути, ожидаемом от root.

Вы можете запустить программу под sudo -i , так как вы вошли в систему с правами root su - , но вы можете иметь другое поведение, если вы запустите его с помощью sudo MyCommand или с помощью su -c MyCommand.


От man su:

  

В части описания:
Текущая среда передается в новую оболочку . Значение $ PATH сбрасывается в /bin: /usr /bin для обычных пользователей или          /sbin: /bin: /usr /sbin: /usr /bin для суперпользователя
  ...
  В части опций:
- , -l, --login
             Обеспечьте среду, похожую на , что ожидал пользователь, если бы пользователь зарегистрировался напрямую .

От человека sudo

  

-i , --login
   Запустите оболочку, указанную в записи базы данных пользователя целевого пользователя, в качестве оболочки входа. Это означает, что файлы ресурсов для входа в систему                    такие как .profile или .login, будут прочитаны оболочкой. Если задана команда, она передается оболочке для выполнения через                    shell -c. Если команда не указана, выполняется интерактивная оболочка. sudo пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Команда запускается со средой, подобной той, которую пользователь получит при регистрации . Раздел «Командная среда» в справочных документах sudoers (5) о том, как параметр -i влияет на среду, в которой выполняется команда                    когда используется политика sudoers.

ответил Hastur 21 J0000006Europe/Moscow 2014, 03:03:41
21

Если у вас есть полный sudo , вы можете стать root с помощью sudo su -, поэтому точка безопасности является спорным

Действительно, есть способ различить разницу между программой, запущенной как root, а программа работает под sudo - используя getuid vs geteuid - но это надуманный трюк. Почему система патчей делает это?

ответил sds 21 J0000006Europe/Moscow 2014, 01:28:05
7

Есть несколько отличий, если вы получаете корневую оболочку, как указано @Hastur.

Если вы не получаете корневую оболочку, то есть больше различий. У члена поддержки может быть опыт работы с такими вещами, как sudo patch -p0 < /root/patch.file где patch запускается с правами root, но < (трубопровод из файла).

ответил Jayen 21 J0000006Europe/Moscow 2014, 09:09:32
1

Я верю, что при использовании sudo-доступа создается файл журнала, однако при запуске непосредственно через root-доступ нет.

ответил Ashley Redman BSc 22 J0000006Europe/Moscow 2014, 02:51:00
0

Это зависит от того, насколько мелкозернистым вы хотите получить доступ root. Если у вас несколько пользователей, которые выполняют разные задачи в системе, тогда sudo будет более идеальным. Одним из примеров, который я часто использую, является необходимость перезапуска приложения или базы данных. Безопасность всегда лучше всего подходит для наименее привилегированных. Я использую группы и позволяю этим группам выполнять явные действия. Хорошая книга, описывающая этот процесс, - «Sudo Mastery: контроль доступа пользователей для реальных людей». На самом деле это хорошая книга о судо вообще ...

ответил meredithkm 21 J0000006Europe/Moscow 2014, 09:25:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132