еbashим на bash-е #1

Oct 19, 2019 13:34


Чё-то я увлёкся написанием демонов на баше. Не к добру это, ох не к добру. В связи с этим открываю рубрику "Е**шим на баше". С пояснениями и примерами.

Допустим, у нас есть условный zabbix-агент. От которого UID-а он выполняется, мы заранее не знаем. Но нам надо, чтобы вот именно наш конкретный скрипт, в свою очередь запущенный zabbix агентом отработал бы от имени "vasya" и никак иначе.

Это несложно. Кладем в "sudoers.d" файлик с содержимым типа
%zabbix ALL=(ALL:ALL) NOPASSWD:/some/super/script.sh
и вуаля. Главное только, чтобы этот скрипт и папка, в которой он лежит, не были бы world-writeable, а то получится знатная дыра в безопасности, гы-гы.

Но что если этого файлика там нет? Как мы об этом узнаем, чтобы грязно выругаться в таком случае? Например, как-то так.
FID=`id -u "vasya"`
if [ "$EUID" -ne "$FID" ] ; then
export SUDO_ASKPASS="/bin/false"
/usr/bin/sudo -A -u "vasya" "$0" "$@" 2>/dev/null ||\
{ echo "Not enough privileges. Check sudo settings."
exit 1
}
exit 0
fi

Проверяем с каким UID выполняется скрипт прямо сейчас. Если не под Васей, то пытаемся перезапуститься из-под Васи. Если не получилось, грязно ругаемся.

Ещё пример. Для фанатов Rsync-а. Не обращал внимания, но оказывается, у него есть ключик "-i" (itemize-changes). По сюжету, с этим ключом после завершения он возвращает на STDOUT какие файлики он потрогал и чего именно с ними сделал (скачал, отдал, поменял права и т.п.). Но есть лютая подстава. Если, например, он вознамерился скачать откуда-то 10 файлов, скачал 7 из них, а потом связь порвалась, то... скажет, что якобы скачал все 10. А по факту на диске останутся лежать только 7.

Софтина, бесспорно, хорошая. И очень полезная. Я прекрасно понимаю, что это не баг, а фича. И она даже неявно описана в документации. Но вот всё равно за такое повбывав бы. Как технично я налетел на эту особенность в своих скриптах...

И вопрос на засыпку. Кто-нибудь пробовал пользоваться вот этой софтинкой для iPad от китайского автора? Как она? Меня волнует в основном чтобы там "закладок" не было.

linux, вопрос, bash

Previous post Next post
Up