Последствия для безопасности запуска пользовательских скриптов с помощью sudo

Последствия для безопасности запуска пользовательских скриптов с помощью sudo

Мне нужно запустить несколько команд с помощью sudo. Эти команды находятся либо в , .bashrcлибо ~/bin, и хранятся в репозитории git (т. е. dotfiles).

Я разместил символические ссылки, ~rootуказывающие на моего пользователя $HOME, но я думаю, что это не очень безопасно с точки зрения безопасности, поэтому я их удалил.

Меня беспокоит, что еслинекорневойЕсли у пользователя есть разрешение на запись в эти файлы, вредоносная программа может выполнить повышение привилегий. Тем не менее, я нахожу много репозиториев dotfiles, которые небезопасны в моей книге.

В .bashrc, команды sudoможетбыть /etc/sudoersс NOPASSWD. В bin/*.shскриптах я думал о том, чтобы исключить sudo из команд и chown их для root, но это может быть проблемой, так как git не сохраняет владельца. (Почти) все отдельные команды в любом случае требуют sudo, так что я думаю, что технически это то же самое, за исключением того, что назначение скриптов root должно быть безопаснее. Git вызвал бы некоторые проблемы, я думаю.

Мысль: если бы я давал каждой команде /etc/sudoersNOPASSWD, то при запросе пароля root я бы почувствовал, что что-то не так.

Дополнительная информация:

  • Это для пары локальных однопользовательских машин;
  • Несанкционированный доступ к моему настольному компьютеру не является проблемой, поэтому я настроил автоматический вход;
  • Для начала сеанса на моем ноутбуке требуется пароль.

Если вопрос пока не ясен, я спрашиваю, как мне организовать эти скрипты/команды безопасным способом? Может ли повышение привилегий с root быть более вредным, чем вредоносная программа на моих собственных данных пользователя? Может быть, я просто слишком много думаю?

решение1

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

Правда, если вы единственный пользователь машины, риск невелик. Но часто проще взломать учетную запись обычного пользователя (прочитать письмо с вредоносным ПО, подключиться к вредоносному веб-сайту, скомпилировать и запустить случайный источник «чтобы посмотреть, что он делает», ...), и это позволит повысить привилегии до root.

решение2

Рассмотрев все известные мне варианты ( /usr/local/binвладелец root, удаление разрешения на запись), я выбрал флаг неизменяемости для каждого версионного файла:

sudo chattr +i filename

Не-пользователи root, и даже владелец не могут сбросить флаг. Также нельзя удалить или заменить файл или родительский каталог.

Для редактирования файла я добавил следующую функцию .bashrc:

editrc () {
    sudo chattr -i $1
    nano $1
    sudo chattr +i $1
}

На других компьютерах мне нужно вытащить dotfiles, флаг нужно снять перед git pull, а затем применить заново. Сделал вспомогательную функцию, которая принимает флаг как аргумент.

protect-config () {
    FLAG=$1
    FILES=$(git ls-files | xargs -I @ -- find @ -type f | xargs echo)
    lsattr $FILES
    if [ "$FLAG" ]; then
        sudo chattr $FLAG $FILES
    fi
}

Хотя, да, я слишком много об этом думаю. Но сейчас это уже на месте. В основном по привычке.


EDIT: Я больше этим не пользуюсь, так как это было скорее неудобно, чем давало чувство безопасности.

Связанный контент