Чё-то я увлёкся написанием демонов на баше. Не к добру это, ох не к добру. В связи с этим открываю рубрику "Е**шим на баше". С пояснениями и примерами.
Допустим, у нас есть условный zabbix-агент. От которого UID-а он выполняется, мы заранее не знаем. Но нам надо, чтобы вот именно наш конкретный скрипт, в свою очередь запущенный zabbix агентом отработал бы от имени "vasya" и никак иначе.
Это несложно. Кладем в "sudoers.d" файлик с содержимым типа
и вуаля. Главное только, чтобы этот скрипт и папка, в которой он лежит, не были бы world-writeable, а то получится знатная дыра в безопасности, гы-гы.
Но что если этого файлика там нет? Как мы об этом узнаем, чтобы грязно выругаться в таком случае? Например, как-то так.
Проверяем с каким UID выполняется скрипт прямо сейчас. Если не под Васей, то пытаемся перезапуститься из-под Васи. Если не получилось, грязно ругаемся.
Ещё пример. Для фанатов Rsync-а. Не обращал внимания, но оказывается, у него есть ключик "-i" (itemize-changes). По сюжету, с этим ключом после завершения он возвращает на STDOUT какие файлики он потрогал и чего именно с ними сделал (скачал, отдал, поменял права и т.п.). Но есть лютая подстава. Если, например, он вознамерился скачать откуда-то 10 файлов, скачал 7 из них, а потом связь порвалась, то... скажет, что якобы скачал все 10. А по факту на диске останутся лежать только 7.
Софтина, бесспорно, хорошая. И очень полезная. Я прекрасно понимаю, что это не баг, а фича. И она даже неявно описана в документации. Но вот всё равно за такое повбывав бы. Как технично я налетел на эту особенность в своих скриптах...
И вопрос на засыпку. Кто-нибудь пробовал пользоваться вот этой софтинкой для iPad от китайского автора? Как она? Меня волнует в основном чтобы там "закладок" не было.