Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание

Тут можно читать онлайн Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2017. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2017
  • Город:
    СПб.
  • ISBN:
    978-5-496-03029-8
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - описание и краткое содержание, автор Дейв Тейлор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Сценарии командной оболочки помогают системным администраторам и программистам автоматизировать рутинные задачи с тех самых пор, как появились первые компьютеры. С момента выхода первого издания этой книги в 2004 году многое изменилось, однако командная оболочка bash только упрочила свои лидирующие позиции. Поэтому умение использовать все ее возможности становится насущной необходимостью для системных администраторов, инженеров и энтузиастов. В этой книге описываются типичные проблемы, с которыми можно столкнуться, например, при сборке программного обеспечения или координации действий других программ. А решения даются так, что их легко можно взять за основу и экстраполировать на другие схожие задачи.
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать книгу онлайн бесплатно, автор Дейв Тейлор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

fi········································ # REMOVEME

После неосторожного запуска с привилегиями root этот код скрытно скопирует файл /bin/sh в каталог /tmp / .rootshell и установит атрибут setuid, дающий привилегии root взломщику, который постарается воспользоваться им. Затем сценарий перезапишет себя, удалив строки, составляющие условную инструкцию, чтобы не оставлять следов вторжения взломщика (именно для этого в конец каждой строки добавлен комментарий # REMOVEME).

Показанный фрагмент кода вставляется в любой сценарий или команду, которые могут запускаться с действующим идентификатором пользователя root. Именно поэтому так важно следить за всеми командами с установленным атрибутом setuid, имеющимися в системе. Очевидно, что вы никогда не должны устанавливать разрешение setuid или setgid для сценариев, но это не избавляет от необходимости внимательно следить за системой.

Однако, чем показывать, как взламывать системы, покажем лучше, как выявить все имеющиеся в системе сценарии командной оболочки с установленным атрибутом setuid или setgid! Листинг 6.1 демонстрирует, как добиться этого.

Код

Листинг 6.1.Сценарий findsuid

··#!/bin/bash

··# findsuid — проверяет доступность для записи всех файлов программ

··#·· с установленным атрибутом SUID и выводит их список в удобном формате.

··mtime="7"··# Как далеко назад (в днях) проверять время модификации.

··verbose=0··# По умолчанию, давайте будем немногословными.

··if ["$1" = "-v"]; then

······verbose=1··# Пользователь вызвал findsuid −v, включаем подробный режим.

··fi

··# find −perm отыскивает файлы с заданными разрешениями: 4000 и выше

··#·· — это setuid/setgid.

картинка 309··find / −type f −perm +4000 −print0 | while read −d '' −r match

··do

····if [-x "$match"]; then

······# Выделить атрибуты владения и привилегий из вывода ls −ld.

······owner="$(ls −ld $match | awk '{print $3}')"

······perms="$(ls −ld $match | cut −c5-10 | grep 'w')"

······if [! -z $perms]; then

········echo "**** $match (writeable and setuid $owner)"

······elif [! -z $(find $match −mtime −$mtime −print)]; then

········echo "**** $match (modified within $mtime days and setuid $owner)"

······elif [$verbose −eq 1]; then

········# По умолчанию перечисляются только опасные сценарии.

········#·· Если включен подробный режим, выводить все.

········lastmod="$(ls −ld $match | awk '{print $6, $7, $8}')"

········echo "···· $match (setuid $owner, last modified $lastmod)"

······fi

····fi

··done

··exit 0

Как это работает

Этот сценарий отыскивает все команды в системе, имеющие атрибут setuid и доступные для записи группе или всем остальным, и проверяет, модифицировались ли они в последние $mtime дней. Для этого используется команда find картинка 310с аргументами, определяющими искомые привилегии доступа к файлам. Если пользователь затребовал подробный отчет о результатах, сценарий выводит все команды с установленным атрибутом setuid, независимо от прав на чтение/запись и даты модификации.

Запуск сценария

Этот сценарий принимает единственный необязательный аргумент −v, управляющий подробностью вывода результатов поиска программ с атрибутом setuid. Данный сценарий должен запускаться с привилегиями пользователя root, но его могут запускать и обычные пользователи, так как все они, как правильно, имеют доступ к основным каталогам.

Результаты

Для проверки мы оставили в системе уязвимый сценарий. Давайте посмотрим, сможет ли findsuid найти его (см. листинг 6.2).

Листинг 6.2.Запуск сценария findsuid и результаты поиска шпионского сценария

$ findsuid

**** /var/tmp/.sneaky/editme (writeable and setuid root)

Это он (листинг 6.3)!

Листинг 6.3.Вывод ls для шпионского сценария показывает символ s в привилегиях доступа, который означает наличие атрибута setuid

$ ls −l /var/tmp/.sneaky/editme

-rwsrwxrwx··1 root··wheel 25988 Jul 13 11:50 /var/tmp/.sneaky/editme

Это огромная дыра в системе безопасности, ожидающая, пока кто-то ею воспользуется. Мы рады, что нашли ее!

№ 46. Установка системной даты

Лаконичность лежит в основе ОС Linux и предшествовавших ей версий Unix, и она оказала самое серьезное влияние на развитие Linux. Но иногда чрезмерная лаконичность способна довести системного администратора до сумасшествия. Типичным примером может служить формат представления системной даты в команде date, показанный ниже:

usage: date [[[[[cc]yy]mm]dd]hh]mm[.ss]

Трудно даже просто пересчитать все эти квадратные скобки, не говоря уже о том, чтобы определить, что нужно вводить, а что нет. Объясним: вы можете ввести только минуты, или минуты и секунды, или часы, минуты и секунды, или месяц, плюс все перечисленное перед этим, или вы можете добавить год и даже век. Чистое сумасшествие! Вместо утомительных попыток выяснить, что и в каком порядке вводить, попробуйте воспользоваться приведенным в листинге 6.4 сценарием, который предложит ввести соответствующие значения и затем сконструирует компактную строку с датой. Это верный способ сохранить психическое здоровье.

Код

Листинг 6.4.Сценарий setdate

··#!/bin/bash

··# setdate — дружественный интерфейс к команде date.

··# Команда date предлагает формат ввода: [[[[[cc]yy]mm]dd]hh]mm[.ss]

··# Чтобы обеспечить максимум удобств, эта функция просит ввести конкретную

··#·· дату, показывая значение по умолчанию в квадратных скобках [], исходя

··#·· из текущей даты и времени.

··. library.sh # Source our library of bash functions to get echon().

картинка 311··askvalue()

··{

····# $1 = имя поля, $2 = значение по умолчанию, $3 = максимальное значение,

····# $4 = требуемая длина в символах/цифрах

····echon "$1 [$2]: "

····read answer

····if [${answer:=$2} −gt $3]; then

······echo "$0: $1 $answer is invalid"

······exit 0

····elif ["$(($(echo $answer | wc −c) — 1))" −lt $4]; then

······echo "$0: $1 $answer is too short: please specify $4 digits"

······exit 0

····fi

····eval $1=$answer # Загрузить в заданную переменную указанное значение.

··}

картинка 312··eval $(date "+nyear=%Y nmon=%m nday=%d nhr=%H nmin=%M")

··askvalue year $nyear 3000 4

··askvalue month $nmon 12 2

··askvalue day $nday 31 2

··askvalue hour $nhr 24 2

··askvalue minute $nmin 59 2

··squished="$year$month$day$hour$minute"

··# Или, если сценарий предполагается использовать в Linux:

картинка 313··# squished="$month$day$hour$minute$year"

··# Да, в системах Linux и OS X/BSD используются разные форматы.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дейв Тейлор читать все книги автора по порядку

Дейв Тейлор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание отзывы


Отзывы читателей о книге Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание, автор: Дейв Тейлор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x