Мне нужно запустить несколько команд с помощью sudo. Эти команды находятся либо в , .bashrc
либо ~/bin
, и хранятся в репозитории git (т. е. dotfiles).
Я разместил символические ссылки, ~root
указывающие на моего пользователя $HOME
, но я думаю, что это не очень безопасно с точки зрения безопасности, поэтому я их удалил.
Меня беспокоит, что еслинекорневойЕсли у пользователя есть разрешение на запись в эти файлы, вредоносная программа может выполнить повышение привилегий. Тем не менее, я нахожу много репозиториев dotfiles, которые небезопасны в моей книге.
В .bashrc
, команды sudoможетбыть /etc/sudoers
с NOPASSWD. В bin/*.sh
скриптах я думал о том, чтобы исключить sudo из команд и chown их для root, но это может быть проблемой, так как git не сохраняет владельца. (Почти) все отдельные команды в любом случае требуют sudo, так что я думаю, что технически это то же самое, за исключением того, что назначение скриптов root должно быть безопаснее. Git вызвал бы некоторые проблемы, я думаю.
Мысль: если бы я давал каждой команде /etc/sudoers
NOPASSWD, то при запросе пароля 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: Я больше этим не пользуюсь, так как это было скорее неудобно, чем давало чувство безопасности.