Шеллы что это
Перейти к содержимому

Шеллы что это

  • автор:

Что такое bash / shell

И то, и другое — интерпретаторы командной строки в линуксе. То есть если вы откроете командную строку и введете любую команду, да хоть:

cd /home

То именно интерпретатор ее расшифрует и скажет компьютеру «он хочет перейти в директорию /home». Компьютер ведь не понимает команды на русском / английском языке. Ему нужны байтики. Этим и занимается интерпретатор — переводом с «нашего» на «компьютерный» язык.

Так что «cd /home» — это shell-команда! Или bash. Смотря какой интерпретатор установлен в вашей системе. В каждой операционной системе установлен интерпретатор по умолчанию. У них есть какие-то различия, но есть и набор базовых команд, которые понимают все: cd, mv, cp, ls… (в винде эти команды немного другие)

А что такое shell-скрипт тогда? Это просто текстовый документ, внутри которого написан набор команд! Это не обязательно должны быть «сложные» команды, которые делают что-то супер-навороченное. Это любые команды, которые вы выполняете в консоли.

Например, создадим скриптик, который создаст директорию и в ней файлик:

mkdir /home/test cd /home/test touch test.txt

Так, команды записали, осталось сохранить их в файлик. Скрипты хранят в файлах с расширением .sh, поэтому назовем файл first_script.sh. Но есть нюанс — линуксу плевать на ваше расширение файла. Его может вообще не быть, и все равно скрипт останется скриптом. Почему? Потому что у любого скрипта в первой строке должен содержаться путь к интерпретатору. Например:

#!/bin/bash или #!/bin/sh

Весь файл целиком:

#!/bin/bash mkdir /home/test cd /home/test touch test.txt

И даже если у такого файла не будет расширения вовсе, его можно будет запустить как скрипт:

sh first_script # Проверяем директорию /home — там появилась папка test с файлом test.txt внутри.

Расширение .sh ставится для понимания человеком. Зашел в директорию:

— Ага, что тут у нас? Файлы sh, скрипты какие-то лежат.

Скрипты могут быть простые, а могут быть сложные. Вот, например, в одном проекте мы вначале вручную обновляли тестовые платформы. Для обновления надо:

  1. Остановить сервис.
  2. Переподложить war-файл с приложением (лежат они в директории /opt)
  3. Запустить сервис

Сервиса два, допустим это test и cloud. Так что шагов уже 6.

Когда обновлять вручную надоело, мы положили на все линукс машины простой скриптик:

#!/bin/bash service test stop cp test.war /opt/jboss-test/bin service test start service cloud stop cp cloud.war /opt/jboss-cloud/bin service cloud start

Собираешь приложение, подкладываешь к скриптику и запускаешь 1 команду вместо 6. Удобно! Это называется «автоматизация рутины» =)

Другой пример с того же проекта — мы делали серверное приложение. И во время установки приложения на сервере linux нужно выполнить пункты по настройке самой системы. Например, увеличить параметр max_map_count — сколько максимум памяти может использовать процесс.

Приложение в пике работы требует много памяти. Если не настроить параметр, то «тяжеловесная» задача просто упадет с ошибкой «Не хватает памяти». И если мы видим такую ошибку, то в первую очередь идем проверять настройки системы.

Вообще, если вы отдаете установку приложения на откуп «чужим» админам, лучше потом проверять — а всё ли настроено верно? Конечно, обычно на production (машина, с которой работают реальные пользователи) настраивают всё внимательно, это на тестовых стендах могут что-то пропустить. Но лучше перебдеть!

Мы написали скрипт по проверке настройки окружения (символ «#» в начале строки означает, что это комментарий):

#!/bin/sh # # check sysctl # if [ -f /proc/sys/vm/max_map_count ] && [ $(cat /proc/sys/vm/max_map_count) -ge 16777216 ]; then echo "vm.max_map_count: ok" else echo "vm.max_map_count: failed" fi if [ -f /proc/sys/vm/overcommit_memory ] && [ $(cat /proc/sys/vm/overcommit_memory) -eq 2 ]; then echo "vm.overcommit_memory: ok" else echo "vm.overcommit_memory: failed" fi if [ -f /proc/sys/vm/overcommit_ratio ] && [ $(cat /proc/sys/vm/overcommit_ratio) -eq 100 ]; then echo "vm.overcommit_ratio: ok" else echo "vm.overcommit_ratio: failed" fi if [ -f /proc/sys/vm/swappiness ] && [ $(cat /proc/sys/vm/swappiness) -le 10 ]; then echo "vm.swappiness: ok" else echo "vm.swappiness: failed" fi 

В итоге админы настраивают окружение, а потом мы даем им скрипт, просим запустить его и прислать результаты. Я запустила скрипт на «голой» системе, где, разумеется, параметры настроены не были, и вот ответ:

Видим, что все проверки провалились, статус failed. Если и от админов приходит похожая картина, направляем их в документацию по настройке системы. Если к нам приходят с проблемой падения из-за нехватки памяти, снова просим выполнить скрипт. Так проще локализовать ошибку: это в приложении косяк, или окружение настроено плохо?

Просить других людей выполнить 10 команд не очень хорошо. Потому что часть команд может «потеряться» при выполнении — плохо скопировал, забыл выполнить проверку, которую дали сообщением позже. Гораздо проще сделать 1 скрипт и попросить выполнить именно его.

Когда надо писать скрипт?

  • Когда надо выполнить больше 3 команд за раз — проще выполнить одну, запустить скрипт.
  • Когда одну и ту же команду надо выполнять чаще 3 раз — лучше автоматизировать эту работу.

По сути своей, bash-скрипты — это та же автоматизация. А когда нужна автоматизация? Когда мы хотим избавиться от рутины, от постоянного выполнения одного и того же действия вручную. Повторяете одно и то же каждый день / неделю? Напишите скрипт. Даже если он на 2-3 строчки будет, это правда удобнее. Поверьте, сама делала небольшие скрипты =)

См также по bash:

Основы BASH. Часть 1 (Хабр) — цикл статей о том, как писать скрипты

См также другие статьи из цикла «Что такое. »:

Шеллы что это

Интерпретатор командной строки, или shell (shell — оболочка) — эта та программа, которая принимает команды от пользователя и исполняет их.

  • Взаимодействие с пользователем (редактирование командной строки, история команд и т.д.).
  • Обработка (расширение) шаблонов имен (» * «, » ? » и т.д.).
  • Перенаправление ввода/вывода команд.
  • Управление заданиями.

Кроме того, shell — это специализированный язык программирования, в котором есть переменные, конструкции while, if, for и т.д., функции и много чего еще. Он позволяет писать как несложные сценарии для автоматизации повседневных задач, так и довольно сложные программы (например, запуск и останов большинства Unix’ов производятся сценариями на языке shell).

Хотя работа непосредственно в командной строке (а не в оболочке типа NortonCommander или какой-нибудь оконной) на первый взгляд не столь удобна, она обеспечивает более удобный доступ к таким функциям, как перенаправление ввода/вывода и управление заданиями — оболочки типа Midnight Commander в этом случае будут только мешать.

Shell — это не одна конкретная программа. Исторически существует несколько подвидов оболочек; «генеалогическое древо» представлено на Рис.1.

Рис.1: семейство
интерпретаторов командной строки

Не вдаваясь в подробности истории (краткое описание можно найти в разделе 3.10 книги «Unix: универсальная среда программирования» Кернигана и Пайка), стоит лишь заметить, что csh и tcsh не в полной мере реализуют командный язык sh, а zsh, являясь самой последней разработкой, умеет все, что и любой другой подвид, и плюс много чего еще.

Кроме того, поскольку командный интерпретатор имеет десятки параметров для настройки, не следует удивляться, увидев, что некая знакомая оболочка на другом компьютере выглядит и ведет себя по другому.

Изложение в данном разделе основано на zsh (которая и используется на практических занятиях), но большая часть описанного верно и для других оболочек.

Совет
Совет: чтобы узнать, какой используется shell, надо выполнить команду

ESET Shell

eShell (сокращение от «ESET Shell») — это интерфейс командной строки для ESET Server Security. Это альтернатива графическому интерфейсу. В eShell есть все функции и возможности, обычно предоставляемые графическим интерфейсом. eShell позволяет конфигурировать и администрировать всю программу, не используя графический интерфейс.

В дополнение ко всем функциям, которые доступны в графическом интерфейсе пользователя, этот интерфейс также предлагает возможности автоматизации за счет выполнения сценариев, которые позволяют конфигурировать, изменять конфигурацию и выполнять какие-либо действия. Кроме того, интерфейс eShell может быть полезен тем пользователям, которые предпочитают командную строку графическому интерфейсу.

Чтобы получить доступ ко всем функциям, рекомендуется запустить eShell, выбрав пункт Запуск от имени администратора. То же самое рекомендуется сделать при выполнении команды в командной строке Windows (cmd). Откройте командную строку, выбрав пункт Запуск от имени администратора. Если вы не сможете запустить командную строку от имени администратора, вы не сможете выполнять команды из-за отсутствия разрешений.

eShell может запускаться в двух режимах.

1. Интерактивный режим полезен, когда нужно именно работать с eShell (а не просто выполнять одну команду), например при изменении конфигурации, просмотре журналов и т. д. Кроме того, интерактивный режим можно применять, если пользователю еще не знакомы все команды. Интерактивный режим упростит навигацию по интерфейсу eShell. В нем также отображаются доступные команды, которые можно использовать в рамках определенного контекста.

2. Режим единичной команды/пакетный режим — этот режим можно использовать, если нужно только выполнить какую-либо команду, не входя в интерактивный режим eShell. Это можно сделать через командную строку Windows. Для этого введите eshell и укажите соответствующие параметры.

eshell get status или eshell computer set real-time status disabled 1h

Чтобы выполнять некоторые команды (такие как во втором примере вверху) в пакетном режиме или режиме сценария, нужно сконфигурировать определенные параметры. В противном случае появится сообщение В доступе отказано . Это нужно из соображений безопасности.

Изменения настроек необходимы для разрешения использования команд eShell в командной строке Windows. Для получения дополнительных сведений о запуске пакетных файлов воспользуйтесь этой ссылкой.

В оболочке eShell войти в интерактивный режим можно двумя способами:

1. Через меню «Пуск» Windows : Пуск > Все программы > ESET > ESET File Security > ESET Shell

2. Через командную строку Windows . Для этого нужно ввести в ней eshell и нажать клавишу ВВОД.

Причиной возникновения ошибки ‘eshell’ is not recognized as an internal or external command является то, что ваша система не загрузила новые переменные среды после установки ESET Server Security. Откройте новую командную строку и попробуйте запустить eShell еще раз. Если ошибка не исчезла или у вас остается базовая установка программы ESET Server Security, запустите eShell с применением абсолютного пути, например «%PROGRAMFILES%\ESET\ESET File Security\eShell.exe» (необходимо использовать кавычки «», чтобы команда работала).

При первом запуске eShell в интерактивном режиме на экран будет выведено окно первого запуска.

При необходимости в дальнейшем вывести на экран окно первого запуска введите команду guide . В нем приводятся основные примеры использования eShell с синтаксисом, префиксами, путями команд, сокращенными формами, псевдонимами и т. д.

При следующем запуске eShell отобразится приведенное ниже окно.

page_tools_eshell

Команды можно вводить без учета регистра, используя как прописные, так и строчные буквы, и это не повлияет на их выполнение.

Вы можете настроить eShell в контексте ui eshell . Вы можете сконфигурировать псевдонимы, цвета, язык, политику выполнения сценариев, настройки скрытых команд и многое другое.

Шелл (Shell), веб-шеллы

Веб-шеллы, шеллы — специальные коды и программы, обеспечивающие доступ злоумышленника к файловой системе сервера и базой данных взломанного сайта

В большинстве случаев, после успешного взлома сайта, атакующий оставляет на сайте специализированные программы, коды или врезки в код легальных скриптов, обеспечивающие ему полный доступ к серверу. Эти программы, скрипты и коды называются шеллами.

Веб-шеллы, шеллы — обеспечивают атакующему полный доступ с возможностью контроля и управления над файловой системой сервера взломанного сайта и его баз данных.
Шеллы позволяют атакующему полностью управлять сервером (и самим сайтом соответственно) не проходя никакой аутентификации.

Шеллы, шелл-коды, мини-шеллы

При эксплуатации удаленной уязвимости шелл-код может открывать заранее заданный порт TCP уязвимого компьютера, через который будет осуществляться дальнейший доступ к командной оболочке. Такой код называется привязывающим к порту (англ. port binding shellcode).
Если шелл-код осуществляет подключение к порту компьютера атакующего, что производится с целью обхода брандмауэра или NAT, то такой код называется обратной оболочкой (англ. reverse shell shellcode).

Шелл-код обычно внедряется в память эксплуатируемой программы, после чего на него передается управление. Результатом этого является выполнение шелл-кода, который открывает командную строку для использования взломщиком.

Веб-шеллы, PHP шеллы.

Веб-шеллы это мощные программные разработки, основной функционал которых заключается в работе с файловой системой сервера на уровне root доступа.
Как правило, веб-шеллы имеют графическую оболочку и удобный интерфейс, на подобии всем известных Far, MC, Norton Commander и др.

Скрин WSO 2.5 веб-шелла:

Основной функционал веб-шеллов:

  • Файловый менеджер
  • Работа с консолью сервера
  • Текстовой редактор
  • Редактор HEX кода
  • MD5, base64 и прочие конверторы
  • Прочие утилиты для работы с сервером

Открытый код большинства веб-шеллов, а также некоторые особенности его написания хорошо известен поисковым системам и антивирусам.
Для маскировки веб-шеллов, их код обфусцируют. Иногда код веб-шеллы вписывают в тело легального кода, изображений и т.п., создавая необходимые условия для его выполнения, при этом пряча его от администраторов сайта.
В большинстве случаев, после взлома, атакующий «оставляет» десятки веб-шеллов, для того, чтобы в случае обнаружение одного или двух оставались запасные варианты доступа к взломанному серверу.

Сканер уязвимостей сайтов онлайн Проверьте, наколько устойчив к взлому Ваш сайт

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *