'Эхо “Оскорбления значений по умолчанию”>> сейф/etc/sudoer?

добавьте эту строку к разделу [Global] smb.conf

guest account = dave
5
16.01.2015, 14:08
2 ответа

Есть по крайней мере 3 способа, которыми это может быть опасно:

  1. Если / etc / sudoers не оканчивается на символ новой строки (который разрешают sudo и visudo ), например, если он заканчивается незавершенной строкой #includedir /etc/sudoers.d, ваша команда сделает это:

     #includedir /etc/sudoers.dDefaults оскорбляет 
     

    , который сломает его и сделает sudo непригодным для использования.

  2. echo может не записать полную строку, например, если файловая система заполнена. Например, он может просто записать Значения по умолчанию в . Что снова сломает ваш файл sudoers .
  3. На машине с несколькими администраторами, если оба попытаются изменить / etc / sudoers одновременно, данные, которые они пишут, могут быть чередующимися.

visudo позволяет избежать этих проблем, поскольку вместо этого позволяет редактировать временный файл ( /etc/sudoers.tmp ), определяет, был ли файл изменен (к сожалению, нет, если файл был успешно изменен, поскольку, похоже, не проверяет статус выхода редактора), проверяет синтаксис и выполняет переименование (атомарная операция) для перемещения нового файла на место. Таким образом, он либо успешно обновит файл (при условии, что ваш редактор также оставит файл без изменений, если он не сможет записать новый), либо завершится неудачей, если это не удастся, или синтаксис неверен.

visudo также защищает от одновременного редактирования файлов sudoers несколькими людьми.

Теперь надежно использовать visudo в автоматическом режиме также сложно. С этим есть несколько проблем:

  • Вы можете указать команду редактора для visudo с переменной среды VISUAL (имеет приоритет над EDITOR ), но только если опция env_editor не была отключена.
  • моя версия visudo по крайней мере, при некоторых условиях, редактирует все / etc / sudoers и все файлы, которые он включает (запускает $ VISUAL для все они). Поэтому вы должны убедиться, что ваш $ VISUAL изменяет только / etc / sudoers .
  • , как показано выше, он не проверяет статус выхода редактора. Поэтому вам нужно убедиться, что файл, сохраненный вашим редактором, либо успешно записан, либо вообще не изменен.
  • Подсказывает пользователю в случае возникновения проблемы.

Разобраться со всем этим немного сложно. Вот как это можно сделать:

NEW_TEXT='Defaults insults' \
  CODE='
    if [ "$2" = /etc/sudoers.tmp ]; then
      printf >&2 "Editing %s\n" "$2"
      umask 077
      {
        cat /etc/sudoers.tmp && printf "\n%s\n" "$NEW_TEXT"
      } > /etc/sudoers.tmp.tmp &&
        mv -f /etc/sudoers.tmp.tmp /etc/sudoers.tmp
    else
      printf >&2 "Skipping %s\n" "$2"
    fi' \
  VISUAL='sh -fc IFS=:;$1 sh eval:eval:"$CODE"' visudo < /dev/null

Не будет работать, если env_editor не установлен.

В системе GNU лучшей альтернативой было бы использовать sed -i , который оставит sudoers.tmp без изменений, если не удается записать новую версию:

Добавить оскорблений :

SED_CODE='
  /^[[:blank:]]*Defaults.*insults/,${
    /^[[:blank:]]*Default/s/!*\(insults\)/\1/g
    $q
  }
  $a\Defaults insults' \
CODE='
  if [ "$2" = /etc/sudoers.tmp ]; then
    printf >&2 "Editing %s\n" "$2"
    sed -i -- "$SED_CODE" "$2"
  else
    printf >&2 "Skipping %s\n" "$2"
  fi' \
VISUAL='sh -fc IFS=:;$1 sh eval:eval:"$CODE"' visudo < /dev/null

Удалить оскорбления:

SED_CODE='
  /^[[:blank:]]*Defaults.*insults/,${
    /^[[:blank:]]*Defaults/s/!*\(insults\)/!\1/g
    $q
  }
  $a\Defaults !insults' \
CODE='
  if [ "$2" = /etc/sudoers.tmp ]; then
    printf >&2 "Editing %s\n" "$2"
    sed -i -- "$SED_CODE" "$2"
  else
    printf >&2 "Skipping %s\n" "$2"
  fi' \
VISUAL='sh -fc IFS=:;$1 sh eval:eval:"$CODE"' visudo < /dev/null
13
27.01.2020, 20:31

Я немного покинул и кажется Включение Поддержка доступна в Sudo , возвращаясь в долгий путь (~ 2001 от того, что я могу Скажите), так что его следует поддерживать в RHEL 5. Ищите включенную директиву в ваших сударах:

sudo grep '#includedir' /etc/sudoers

Если вы получите результат, то в идеале вам следует добавлять и удалять файлы в этом каталоге, и это обычно / etc / sudoers.d . Этот путь может быть трудно определить в скрипте оболочки.

Во всяком случае, предполагая sudoers.d , вы должны максимально добавлять файлы с разрешениями 0600 в этом каталоге. Что-то вроде:

umask 0177
echo 'Defaults insults' > /tmp/insults && 

  sudo sh -c 'cp /tmp/insults /etc/sudoers.d; visudo -cf /etc/sudoers.d/insults

|| RM /etc/sudoers.d/insults'

Then Удаление настройки так же просто, как:

sudo rm /etc/sudoers.d/insults

Вы можете использовать Tee -a в качестве редактора :

$ sudo VISUAL='tee -a' visudo <<<"Defaults insults"
Defaults insults
$ sudo tail /etc/sudoers
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
Defaults insults

Я не знаю, если EL5 Sudo включает в себя поддержку , но если он делает, то создать новые файлы в нем Visudo -F , пожалуйста.

8
27.01.2020, 20:31

Теги

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