пятница, 27 февраля 2009 г.

Automatic mounting of Samba shares

Here's a nice complement to using Likewise, which is in the Ubuntu repositories, to handle among other things, the mounting of Samba shares on logon: pam_mount. This article assumes that you've already done everything necessary to make Likewise work properly in your environment.

Sadly, there was a lot of documentation about earlier versions of pam_mount, and very few (or few that I could find) about this newer version packaged in Ubuntu. Hopefully this will help people who have been struggling with making it work properly on their installs.

Pam_mount is easy to install:

sudo apt-get install libpam-mount

Once installed, you will want to edit /etc/security/pam_mount.conf.xml to uncomment a line:




And perhaps the debug line just above it if you need to troubleshoot potential issues.

Then, create a file in your home directory: .pam_mount.conf.xml. Here is mine, for example:









Once you've enabled pam_mount by adding it in common-session and common-auth with the following line, this file will allow mounting on login \\fileserver1\share34 and \\fileserver2\share35 in ~/share34 and ~/share35 respectively, without having the enter your password if you were already using Likewise as an authentication mechanism. One interesting detail is precisely the tilde in the mountpoint path, since in the case of full paths and the pam_mount $(USER) variable for example, you may be catching other issues, such as how to transform a DOMAIN\user name in a /home/DOMAIN/user path. The good old '~' takes care of that issue. At the same time, 'user="*"' seems to resolve to the currently logged in user, so if you were deploying multiple systems from a kickstart or cloning; or keeping a generic .pam_mount.conf.xml in /etc/skel for mounting public shares, you can keep only one file that works for everyone. Keeping the generic volume tags in the main /etc/security/pam_mount.conf.xml can also be a good idea.

So far, the tests we've been doing at work seem to indicate that these lines needs to be added in common-session and common-auth, though maybe it's possible to do it with fewer changes, or a slightly different line:

For common-session, around the top, I guess:

session optional pam_mount.so nullok try_first_pass

For common-auth, around the end, so that it's evaluated at the very least after pam_lwidentity.so:

auth optional pam_mount.so nullok try_first_pass

I'm fairly confident that "nullok" could be omitted on both lines, since empty passwords are probably not allowed in your Windows domain.

Also, pam_mount can also handle mounting different types of filesystems, such as truecrypt filesystems :)

Посмотрим PID процесса занявший базу apt по лок-файлу

$ sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock: 22069

понедельник, 23 февраля 2009 г.

Для установки генератора паролей pwgen выполните в консоли команду:
sudo apt-get install pwgen

воскресенье, 22 февраля 2009 г.

Обновление Ubuntu для серверов с помощью сети (рекомендуется).

1. Установить update-manager-core, если он еще не установлен.

sudo apt-get install update-manager-core

2. Отредактируете /etc/update-manager/release-upgrades

Prompt=normal

3. Запустите upgrade tool

sudo do-release-upgrade

4. Следуйте инструкциям на экране.

IMspector, перехват сообщений ICQ

Всем привет!
Вот на работе поставили интересную задачу:

Требуется писать всю историю ICQ переписки сотрудников для руководства.

Немного погуглив и почитав форумов наткнулся на замечательный проект IMspector

Вот что это маленькое чудо умеет:

IMSpector is an Instant Messenger proxy with monitoring, blocking and content-filtering capabilities. Currently it supports MSN, Jabber/XMPP, AIM, ICQ, Yahoo, IRC and Gadu-Gadu to different degrees. MSN is the principle protocol, as it’s the most popular these days, at least in the UK where I’m based. The supported platforms are at present Linux and BSD when using the pf firewall, but porting to other UNIXs should be trivial. It is able to log to plain files, as well as several types of SQL database including MySQL, SQLite and PostreSQL.

Иными словами эта штука работает с : MSN, Jabber/XMPP, AIM, ICQ, Yahoo, IRC and Gadu-Gadu протоколами, работает в Linux, *BSD системах и поддерживает СУБД.
И умеет подсовывать свои сертификаты, что-бы самых умных с SSL обломать.
Ещё можно отключить WEB камеры, пересылку файлов и блокировать сообщения.

От себя добавлю что с Русским языком IMspector работает.

Поскольку ICQ протокол меняется чуть-ли не каждый день я решил ставить IMspector из daily snapshots
Скачиваем, компилируем устанавливаем:

cd /tmp
wget http://www.imspector.org/downloads/snapshots/imspector-20090221.tar.gz
tar xvfz imspector-20090221.tar.gz
cd imspector
make
make install

Если нужны сертификаты выполните

make install-ca-cert

Всё будет установлено в директорию /usr

* /usr/sbin/imspector - the imspector binary.
* /usr/lib/libimspector.so - a shared library that the main program and plugins share.
* /usr/lib/imspector/*protocolplugin.so - the protocol plugins.
* /usr/lib/imspector/*loggingplugin.so - the logging plugins.
* /usr/lib/imspector/*filterplugin.so - the filtering and content-manipulation plugins.
* /usr/etc/imspector/imspector.conf - an example config file, good enough for quick playing.
* /usr/etc/imspector/badwords.txt - an example list of swear words to block.
* /usr/etc/imspector/acl.txt - an example of a trivial and useless ACL.
* /usr/etc/imsepctor/servercert.pem - optional server ssl certificate.
* /usr/etc/imspector/serverkey.pem - optional server ssl key.
* /usr/etc/imsepctor/cacert.pem - optional ca ssl certificate.
* /usr/etc/imspector/cakey.pem - optional ca ssl key.

И добавим NAT правила с этой странички.

Поскольку меня интересует только ICQ я вписал:

ICQ/AIM: iptables -t nat -A PREROUTING -p tcp --destination-port 5190 -j REDIRECT --to-ports 16667

И открыл NAT доступ для 5190 порта

-A POSTROUTING -s 192.168.1.0/255.255.255.0 -p tcp -m tcp --dport 5190 -j MASQUERADE

И ещё закрыл ICQ доступ на проксе SQUID

acl icq_dom dstdomain .icq.com .aol.com
acl icq_addr src 64.12.0.0/255.255.0.0 255.188.0.0/255.255.0.0
http_access deny icq_dom
http_access deny icq_addr

OpenVPN

Настраиваем OpenVPN-сервер (Ubuntu) и клиента (Gentoo).
Сервер

Во-первых, openvpn нужно поставить. На Debian-based дистрибутивах это делается командой

apt-get install openvpn openvpn-blacklist

Сертификаты

Сразу скажу, что здесь я немного схалтурил: поскольку ко всем машинам, на которые мне нужно распространить сертификаты, у меня есть физический доступ, а делать отдельный сервер для CA (Certificate Authority) мне не хотелось (да и лишних железок у меня нет), я сгенерировал все сертификаты непосредственно на сервере, а потом раскидал их по scp куда надо.
Нам понадобятся следующие сертификаты:

1. Корневой сертификат CA и его ключ.
2. Сертификат сервера и его ключ.
3. Сертификаты клиентов и соответсвующие им ключи.

Так же нужно будет сгенерировать параметры Диффи-Хеллмана
Все ключи - секретные, соответственно, нужно проявить осторожность в обращении с ними.
В генерации ключей нам поможет пакет утилит easy-rsa, идущий в комплекте документации openvpn.
Удобства для (и чтобы обновления пакета не перезаписали мои ключи), я скопировал набор скриптов в /etc/openvpn:

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0/

Для инициализации скриптов так же следует выполнить команды:

. ./vars
./clean-all #Опционально, она в основном удаляет сгенерированные ключи.
#Кстати, осторожнее, когда понадобится добавить нового клиента - удалять
#все сертификаты в этом случае, очевидно, не нужно.

CA

./build-ca

Скрипт (вернее, вызванный из него openssl) задаст несколько простых вопросов, на которые труда ответить не составит. Здесь нужно иметь ввиду, что Common Name - это не имя хоста, а имя центра сертификации, и если имя сервера/любого клиента будет совпадать с CN CA, соединение будет отвергнуто.
Пример результата работы скрипта (из OpenVPN HOWTO)

Generating a 1024 bit RSA private key
............++++++
...........++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [OpenVPN-TEST]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [me@myhost.mydomain]:

Сертификат сервера

./build-key-server server

Common Name желательно должно соответствовать имени сервера (в идеале - полное доменное имя). На вопросы “Sign the certificate? [y/n]” и “1 out of 1 certificate requests certified, commit? [y/n]” нужно ответить положительно.
Сертификаты клиентов

./build-key client1
./build-key client2
./build-key client3
...

За исключением названия команды, все то же самое, что и в случае с сертификатом сервера. CN желательно соответствующим hostname клиента, хотя это не особо важно. Важнее чтобы не было совпадающих CN.
Параметры Диффи-Хеллмана

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

./build-dh

Распределение ключей

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

В терминах файлов, лежащих теперь в /etc/openvpn/easy-rsa/2.0/keys:

* ca.crt должен быть в папке /etc/openvpn на сервере и на всех клиентах
* ca.key в идеале должен быть на шифрованном носителе в несгораемом сейфе.
На практике сойдет и где-нибудь попроще, в зависимости от степени вашей паранойи.
* server.crt должен быть в папке /etc/openvpn на сервере
* server.key должен быть в папке /etc/openvpn на сервере (и только там)
* clientN.crt должен быть на соответствующем клиенте
* clientN.key должен быть на соответствующем клиенте (и только на нем)
* dh1024.pem должен лежать на сервере в папке /etc/openvpn

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

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

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
cd /etc/openvpn
gunzip server.conf.gz
$EDITOR server.conf

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

Во-первых, следует выбрать между tcp и udp, соответственно параметром

proto tcp
proto udp

Если вас не устраивает адресация виртуальной сети по умолчанию (10.8.0.0/24), то нужно изменить параметр server:
server ip_family netmask

Например: server 192.168.0.0 255.255.255.0

Далее, если вы хотите, чтобы VPN-клиенты “видели” друг друга, раскомментируйте параметр
client-to-client

Можно так же немного усилить безопасность, раскомментировав
user nobody
group nobody
Клиент

Как уже было упомянуто выше, я использовал в качестве тестовой клиентской машины Gentoo. Соответственно, нужно опять же, поставить OpenVPN:

emerge -a openvpn

Рекомендую USE=examples, однако можно обойтись и без этого.

Далее мы (если еще этого не сделали) кидаем в /etc/openvpn сгенерированные на сервере сертификаты и ключ:

* ca.crt
* client1.crt
* client1.key

Помимо этого, я утянул пример клиентской конфигурации с сервера (/usr/share/doc/openvpn/examples/sample-config-files/client.conf).

В нем (/etc/openvpn/client.conf) необходимо исправить следующие параметры:

* proto (по умолчанию proto udp)
* remote your_server port
Порт по умолчанию - 1194, вместо your_server, естественно, вписать адрес/доменное имя OpenVPN-сервера.
* Возможно, осмысленно раскомментирвать
user nobody
group nobody
* cert client1.crt
key client1.key

Собственно, это все. Настройка клиента закончена.

Чтобы запустить OpenVPN-сессию, можно либо выполнить /etc/init.d/openvpn start либо перейти в /etc/openvpn и выполнить openvpn client.conf

Второй вариант так же выводит много отладочной информации.
Ссылки

OpenVPN Official HOWTO можно найти по адресу http://openvpn.net/index.php/documentation/howto.html. Большая часть материалов - именно оттуда.

понедельник, 9 февраля 2009 г.

Советы по Linux

1. Как быстро получить информацию о системе?

Быстро получить информацию о системе можно используя команду procinfo. Если этого недостаточно - смотрите файловую систему /proc.
Например: /proc/interrupts, /proc/cpuinfo...

2. Еще один способ получить полезную информацию о системе

Еще один способ получить полезную информацию о системе - команда vmstat. Она выводит информацию использовании памяти, процессора, областях swap и т.п.
Команда free выдает информацию о памяти и swap.

3. Как получить информацию о ваших загруженных модулях ядра

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

4. Нужно посмотреть параметры и возможные опции для модуля ядра Linux?

Воспользуйтесь командой modinfo. Например, Информация о авторе:
modinfo -a модуль
Список возможных параметров: modinfo -p модуль

5. Полезная информация о ядре

Левый или правый CTRL, ALT, или SHIFT + scrollock покажут вам полезную информацию о ядре.

6. Как долго ваша система была запущена?

Чтобы увидеть, как долго ваша система была запущена, наберите uptime.

7. Как посмотреть какие порты открыты?

netstat -a позволит вам увидеть все tcp и udp порты, которые открыты на вашей системе.

8. Нужно узнать какой сокет заняла программа?

lsof -i -U
fuser port_num/tcp
а также:
netstat -pvlA inet

9.Как посмотреть информацию о запущенных процессах?

Обычно используется "ps -aux", и потом "kill <номер процесса>". Так же есть специальные программы - такие, как top, gtop и ktop.

10. Как посмотреть свободное место на диске?

Чтобы посмотреть свободное место на диске, используйте команду df. Так же в KDE есть программа kdf (KDiskFree).

11. Как узнать размер всех директорий в данном каталоге?

Чтобы узнать размер всех директорий в данном каталоге, выполните команду:

find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn

12. Как разбить один большой файл на несколько маленьких?

Чтобы разбить один большой файл на несколько маленьких используйте команду:

split --bytes=SIZE filename

13. Как добавить конфигурации по умолчанию для программ?

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

14. Как убрать возможность перезагрузки по нажатию клавиш CTRL-ALT-DEL?

Убрать возможность перезагрузки по нажатию клавиш CTRL-ALT-DEL можно закомментировав строку

ca::ctrlaltdel:/sbin/shutdown -t5 -rf now

в файле /etc/inittab.

15. Быстрый метод завершения перезапускаемого(respawning) процесса?

Очень быстрый метод завершения перезапускаемого(respawning) процесса в вашем /etc/inittab - это переключение уровней исполнения. Например, если вы имеете строку:

1:1235:respawn:/usr/sbin/mgetty /dev/ttyS1

переключение на уровень 4 остановит перезапускаемый процесс.

16. Как ограничить потребление ресурсов системы пользователями?

Если вы запустили большую систему с большим количеством пользователей, может быть очень важно ограничить потребление ресурсов системы пользователями. Вы можете контролировать эти ограничения с помощью модуля PAM и файла /etc/pam.d/limits.conf. Большинство современных дистрибутивов используют PAM для аутентификации. Пример ограничений для группы users sample of limits for the users group.

@users hard core 0

@users hard nproc 50

@users hard rss 5000

Это не позволяет создавать файлы core, ограничивает пользователя до 50 процессов и по использованию памяти до 5МБ

17. Как сделать дамп N-консоли?

Команда cat /dev/vcsN сбрасывает дамп N-консоли.

18. Как запретить вход всех пользователей в систему?

Чтобы запретить вход всех пользователей в систему (кроме root) без перезагрузки создайте файл /etc/nologin. Содержимое этого файла будет отображаться когда пользователь попытается войти в систему.

19. Ограничение на выполнение команды su

Чтобы разрешить определенным пользователям делать su, что лучше чем всем по умолчанию, редактируйте /etc/login.defs и установите строку SU_WHEEL_ONLY в yes. Затем вам нужно добавить пользователей, которым нужно делать su в группу 0, что делается редактированием файла /etc/groups.

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

В linux 2.4.x ядрах:

mount --bind какую_директорию_монтировать куда_монтировать

21. Как установить точное время?

Отличный способ установить на машине точное время - использовать каманду ntpdate:

ntpdate

Конечно, нужно иметь установленный пакет ntp и возможность соединения с сервером NTP. Вместо лучше использовать ip-адрес, чтобы избежать преобразования доменного имени в ip-адрес.

22. Как установить время CMOS?

Чтобы установить время CMOS системному используйте hwclock --systohc, а hwclock --hctosys - установит системное время, как время CMOS clock.

23. Как быстро скомпилировать ядро

Самый простой способ скомпилировать ядро это выполнить все команды make на одной строке набрав:

make dep clean bzImage modules modules_install

Если вы просто пропатчили свое ядро тогда просто сделайте:

make oldconfig dep clean bzImage modules modules_install.

24. System.map

Вешь, о которой иногда забывают упомянуть, когда вы обновляете свое ядро - это файл System.map (обычно располагающийся в каталоге /boot), который не соответствует новому ядру. После перезагрузки вы увидите сообщения о некорректной версии ядра. После построения нового ядра не забудьте скопировать новый файл System.map из каталога /usr/src/linux в загрузочный каталог вашей системы (/boot).

25. Как увидеть сообщения выдаваемы ядром?

Увидеть сообщения, выдаваемые ядром на экран при загрузке системы можно набрав команду dmesg.

26. Как посмотреть вывод команды и одновременно записать его в файл?

Посмотреть вывод команды и одновременно записать его в файл можно с помощью команды:

tee $ls | tee logfile.txt

27. Как запретить хранитель экрана в текстовом режиме?

Запретить хранитель экрана в текстовом режиме - напечатайте setterm -blank 0.

28.Средство для более быстрого поиска файлов, чем find

Средство для более быстрого поиска файлов, чем find - команда locate, которая использует базу данных для поиска. Для обновления этой базы часто используется cron. Или вручную - updatedb.

29. Список всех исполняемых файлов в системе, которые присутствуют в вашем $PATH?

Нажмите TAB + scroll-lock или еще проще - два нажатия на клавишу TAB. Результат один и тот же.

30. Как отключить сигнал "beep" в течение автоматического завершения командной строки?

Добавьте либо в ~/.inputrc или в /etc/inputrc для визуального звонка:

set bell-style visible

совершенно без сигнала:

set bell-style none

31. Как послать данные на желаемый терминал?

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

tail -f /var/log/messages > /dev/tty12

Для посылки любых сообщений на tty12.

32. Циклическое переключение через все доступные консоли.

Многие клавиатурные раскладки позволяют циклическое переключение через все доступные консоли используя Alt-RightArrow и Alt-LeftArrow.

33. Как выполнить родную команду системы, если используются алиасы?

Часто используете альясы shell (например, прописанные в ~/.bashrc), но иногда необходимо выполнить родную команду системы? Добавьте обратный слэш перед командой, это игнорирует псевдоним shell.

34. Как найти все файлы в каталоге, которые содержат строку?

Найти все файлы в каталоге, которые содержат строку:

find . -type f -print | xargs grep -li "search string"

35. Как сделать чтобы программа ожидала нажатия какой-либо клавиши пользователем?

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

stty raw; dd if=$(tty) of=/dev/null bs=1 count=1; stty -raw

36.Как перенаправить стандартный вывод и поток ошибок в один и тот же файл?

Чтобы перенаправить стандартный вывод и поток ошибок в один и тот же файл, используйте `&>'.

37. Как сохрать man-страницы в текстовый файл?

Самый простой способ сохранения man-страницы в текстовый файл - " man name | col -b > name.txt".

38. Все символы в консоли стали нечитаемыми

Если все символы в консоли стали нечитаемыми, наберите:

"echo -ne "\017","stty sane" или просто "reset".

39. Как перевести имена файлов в директории в нижний регистр?

Самый простой способ перевода всех имен файлов из директории в нижний регистр:

"for x in *; do mv $x `echo $x | tr [A-Z] [a-z]`; done".

40. Как быстро переименовать файл?

Чтобы быстро переименовать файл, используйте команду:

"mv /usr/local/bin/{старое_имя,новое_имя}".

41. Как удалить всю директорию без лишних запросов?

Чтобы удалить сразу всю директорию без лишних запросов, используйте:

rm -rf имя_директории

42. Как создать сразу несколько директорий?

Создание сразу нескольких директорий - "mkdir -p dir1/dir2/dir3".

43. Как правильно выключить компьютер?

Правильное выключение компьютера - команда "shutdown -h now".

Перезагрузка - "shutdown -r now" или просто "init 5".

44. Как передать весь вывод одной команды на вход другой команде?

Чтобы передать весь вывод одной команды на вход другой команде, используется символ "|".

Таким образом можно делать сложные конструкции (например, "ls | sort -r | less").

45. Как следить за постоянно изменяющимися файлами?

Чтобы следить за постоянно изменяющимися файлами (например, за системными логами), используйте команду tail.

Пример: "tail -15 /var/log/syslog" - постоянно показывает последние 15 строк.

46. Как следить за списком файлов в реальном времени?

Слежение за списком файлов в реальном времени - "watch -n 0 ls -l".

Команда watch осуществляет периодический запуск других команд.

47. Как искать текст в файлах?

Для поиска текста в файлах используется команда - "grep "ваш текст" /where/to/search".

Если при поиске не нужно учитывать регистр - "grep -i "ваш текст" /where/to/search"

48. Как заменить одно слово на другое во многих файлах?

Для замены одного слова на другое сразу же во многих файлах можно использовать этот скрипт

perl -pi -e 's/oneword/anotherword/g' *.
Если нужно сделать это же с одним файлом, поставьте его имя вместо " * ".

49. Как перейти из графического режима в текстовую консоль?

Чтобы перейти из графического режима в текстовую консоль, нажмите Ctrl+Alt+F1. (Ctrl+Alt+F2 - на вторую консоль, Ctrl+Alt+F3 - на третью консоль, etc). Для того, чтобы вернуться обратно в Иксы, обычно используется комбинация клавиш Alt+F7.

50. Как увидеть под Linux другой подключенный жесткий диск?

Чтобы увидеть под Linux другой подключенный жесткий диск, надо примонтировать (командой mount) разделы, которые на новом винчестере есть. Для этого надо определить, каким винчестер стоит: hdb, hdc или hdd. Для этого нужно всего лишь сообразить, как он подключен: primary slave - это hdb, secondary master - это hdc, secondary slave - это hdd. Теперь надо просмотреть, какие диски на винте есть. Для этого запускаем cfdisk для того винта, который мы определили на предыдущем шаге, например, для hdb: cfdisk /dev/hdb. Глядим, какие разделы есть. Например есть FAT32 (или он еще обозначается как WIN95) диск /dev/hdb1. Мы хотим его подключить скажем к каталогу /mnt/disk. Тогда: mount -t vfat /dev/hdb1 /mnt/disk. Здесь: параметр "-t" указывает тип файловой системы, в нашем случае это vfat, что соответствует fat32.

51. Работа с CD/R и CD/RW.

Стираем так: cdrecord -v blank=fast(или all) dev=<Ваш девайс>.

Образ делаем так: mkisofs -r -J -o <имя_файла_образа.iso> <то_чего_в_образ_загоняем>

Пишем так: cdrecord -v -eject speed=8 dev=<Ваш девайс> file.iso.

Если надо мультисессионный диск, то добавляем -multi.

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

52. Запись CD диска

Команды cdrecord, полезные при записи CDROM:

mkisofs -V "volume_ID" -D -l -L -N -J -R -v -o cdrom.iso директория

cdrecord -dev=0,1,0 -speed=4 -v cdrom.iso

Для подключения IDE накопителя добавить в linux lilo append="hdc=ide-scsi"

( hdc - ваш привод?) и включить в ядре поддержку эмуляции SCSI.

-toc -atip -prcap - выдать полную информацию о накопителе.

-scanbus - определить параметры для -dev (можно /proc/scsi/scsi)

-dummy - запись в режие тестирования (без реального прожигания диска).

-fix - исправить недописавшийся диск.

-eject - после записи вытащить CD

-blank=all очистить CR-RW перед записью.

mkisofs -print-size - расчитать сколько потребуется места для записи директории

53. Как смонтировать образ компак-диска?

Смонтировать образ компакт-диска можно таким образом:

#mkdir /mnt/iso

#mount -t iso9660 -o loop cd-image.iso /mnt/iso

(Разумеется, для операции монтирования нужно иметь права root). Теперь каталог /mnt/iso доступен для чтения содержимого образа компакт-диска.

54. Как узнать метку компакт-диска?

Узнать метку компакт-диска можно так:

alias cdlabel='LABEL=`dd if=/dev/cdrom bs=1 count=32 skip=32808 2>/dev/null` && echo $LABEL'

Удобно использовать альяс в инициализационных скриптах shell.
Советы по “железу”

1. Как получить список устройств на шине PCI?

Получить список устройств на шине PCI можно таким образом:

/sbin/lspci

2. Как включить при загрузке клавиши numlock?

Если вы хотите включить все клавиши numlock при загрузке, добавьте следущее в ваши загрузочные скрипты, например в rc.local:

echo -n "Turning on numlock LEDs: "

for tty in /dev/tty[1-6] /dev/tty1[2]; do

setleds -D +num < $tty &

done

echo "done."

3. Как посмотреть информацию полученную от мыши на стандартный вывод?

Если у вас трудности с мышью, mev -i сбросит информацию полученную от мыши на стандартный вывод.

4. Раздражают сигналы спикера вашего компьютера когда вы ошиблись?

Попробуйте выполнить следующую команду bash:

echo -ne '\033[11;0]'

которая устанавливает продолжительность сигнала для консоли равным 0 секунд. Чтобы сделать это автоматически добавьте эти строки в /etc/profile или ваш~/.profile. Подробную информацию о том, как установить частоту и длительность гудка, читайте в Visual bell mini-Howto.

cамый простой интерфейс к netfilter

В данной статье я расскажу о самом простом интерфейсе для netfilter/iptables - ufw. Он стоит по умолчанию в последних версиях ubuntu. По умолчанию он выключен, для включения достаточно набрать:
sudo ufw enable

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

Чтоб разрешить входящие соединения например для почтового сервера достаточно сказать:
ufw allow 25/tcp
# или
ufw allow smtp

Вот как выглядят другие правила:
# запретить подсети 10.0.0.0/8 соединяться с 192.168.0.1 на 25 порт по протоколу tcp
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25
# разрешить любые соединения с сети 192.168.0.0/24
ufw allow from 192.168.0.0/24
# запретить 1.2.3.4 соединятся с данной машиной по udp с портом 514
ufw deny proto udp from 1.2.3.4 to any port 514
# разрешить соединение с 1.2.3.5:5469 к 1.2.3.4:5469 по udp
ufw allow proto udp from 1.2.3.5 port 5469 to 1.2.3.4 port 5469

правила применяются сразу и сохраняются при перезагрузке (/var/lib/ufw/user.rules), просмотреть текущую конфигурацию можно так:
ufw status

Для тонкой настройки можно отредактировать файлы лежащие в /etc/ufw/ например разрешить форвардинг, сделать маскарадинг или проброс порта.
/etc/ufw/before.rules - правила применяемые до применения /var/lib/ufw/user.rules
/etc/ufw/after.rules - правила применяемые после применения /var/lib/ufw/user.rules
/etc/ufw/sysctl.conf - настройки опций ядра

графическая обертка - http://gufw.tuxfamily.org/

понедельник, 2 февраля 2009 г.

Linux Traffic Shaping За 5 Минут При Помощи htb.init

Если у Вас есть Ваша собственная домашняя сеть с двумя или более компьютерами и она подключена к интернету, вы точно знаете о тех проблемах с одновременным доступом к сети, которые практически неизбежны при таком подключении. Самой большой и раздражающей проблемой является разделение ширины канала между всеми участниками сети: когда вы пытаетесь работать серез ssh с удаленным сервером, а в этот момент ваша wife/брат/друг решает поглядеть новый и очень классный видео клип с Google Video или YouTube, Ваше соединение замирает и вы можете забыть о комфортабельной работе . В этой маленькой статье я дам вам простое решение этой проблемы, которое позволит вам делать все, что угодно не думая о проблемах разделения трафика!

Для начала замечу, что Ваша сеть должна быть подключена к Internet при помощи Linux сервера. Если Вы подключены через какой-то тупой аппаратный маршрутизатор, то Вам сильно не повезло и вы не сможете воспользоваться приведенным примером.

Если же Ваш сервер работает под управлением Linux, тогда используйте слудеющие ниже интсрукции чтобы сделать вашу жизнь проще. Замечу, что у меня интернет подключен к интерфейсу eth0, а локальная сеть - к eth1, канал у меня - симметричное подслючение на 512Kbit/s, потому все примеры будут очновываться на этих параметрах:

1. Скачайте скрипт htb.init с сайта sourceforge.
2. Распакуйте его и положите в /sbin/htb.init, сменив ему аттрибуты, чтобы сделать его исполнимым:

# chmod +x /sbin/htb.init

3. Создайте каталоги для конфигурации и кеша htb.init:

# mkdir -p /etc/sysconfig/htb
# mkdir -p /var/cache/htb.init

4. Перейдите в каталог коныигурации htb.initи создайте следующие конфигурационные файлы для исходящего трафика:
* Файл ‘eth0′ со следующим содержимым:

DEFAULT=30
R2Q=100

* Файл ‘eth0-2.root’ со следующим содержимым:

# root class containing outgoing bandwidth
RATE=512Kbit

* Файл ‘eth0-2:10.ssh’ со следующим содержимым:

# class for outgoing ssh
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=*:22
PRIO=10

* И, наконец, файл ‘eth0-2:30.default’ со следующим содержимым:

# default class for outgoing traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
PRIO=30

5. Теперь, создайте набор файлов для управления входящим трафиком:
* Файл ‘eth1′ со следующим содержимым:

DEFAULT=30
R2Q=100

* Файл ‘eth1-2.root’ со следующим содержимым:

# root class containing incoming bandwidth
RATE=512Kbit

* Файл ‘eth1-2:10.ssh’ со следующим содержимым:

# class for incoming ssh
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=*:22,
PRIO=10

* Файл ‘eth1-2:20.mytraf’ для конфигурирования параметров канала на Ваш компьютер:

# class for my incoming traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=192.168.0.2 # this is my ip
PRIO=20

* И файл ‘eth1-2:30.default’ для параметров канала по умолчанию для остальных со следующим содержимым:

# default class for outgoing traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
PRIO=30

6. Последний шаг - запуск системы контроля трафика при помощи следующей команды:

# /sbin/htb.init start
#

Если все шаги были выполнены правльно и успешно, Вы можете использовать Ваш канал для работы через ssh, для скачивания файлов или для простого серфинга… Ваше соединение будет честно делиться между всеми участниками домашней сети. Если вы находитесь в сети один, Вы будете использовать всю ширину канала. Как только ваши соседи захотят что-то скачать, ширина канала будет разделена между вами поровну, но ваша работа будет настолько же комфортной, как и в тот момент, когда Вы были одни.

Если хотите узнать больше, используйте следующие ресурсы:

* http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
* http://www.docum.org/stef.coene/qos/faq/
* http://tldp.org/HOWTO/ADSL-Bandwidth-Management-HOWTO/index.html

Перенаправление сообщений из EventLog Windows на удалённый syslog

В предыдущей статье было показано как можно настроить сбор логов с различных серверов под управлением Linux и FreeBSD на один используя syslog. Однако что делать если в сети есть ещё и машина под Windows?

Возникает разумное желание так же собирать EventLog из Windows на тот же сервер, что и логи с остальных серверов. Далее будет рассмотрено одно из возможных решений этой задачи.

Начальные условия у нас практически такие же, как и в предыдущей статье, с одним дополнением: в сети присутствует один (или несколько - не суть важно) сервер под Windows.

Самым удобным решением этой задачи является вариант с отсылкой сообщений из EventLog Windows в syslog на сервере сбора логов. Для этого можно использовать инструмент evtsys, разработанный в Purdue Univercity.

Для установки нужно скачать архив со страницы проекта и распаковать его в директорию %systemroot%\system32 (Обычно это C:\Windows\system32).

После распаковки нужно запустить командную строку: «Пуск» -> «Программы» -> «Стандартные» -> «Командная строка». И выполнить в ней следующие команды:

%SystemDrive%
cd %SyetmRoot%\System32
evtsys -i -h 192.168.2.1
net start evtsys

Первыми двумя командами осуществляется переход в директорию с файлами утилиты, третья устанавливает evtsys как системную службу (она получит имя "Eventlog to Syslog"). Последняя команда запускает эту службу.

После этого системные логи из EventLog начнут дублироваться в удалённый Syslog.

Если по какой-то причине нужно удалить evtsys то в командной строке нужно выполнить следующие команды:

%SystemDrive%
cd %SyetmRoot%\System32
net stop evtsys
evtsys -u
del evtsys.*

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

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

iconv -f cp1251 192.168.2.201-notice.log | less

На этом всё. Приятной работы!

Настройка syslog для сбора логов с серверов на одном сервере

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

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

Начальные условия:

* Серая сеть 192.168.2.0/24, в которой у каждого сервера есть IP-адрес.
* Сервер для сбора логов. Имеет адрес 192.168.2.1, работает под управлением Debian и на нём запущен syslog-ng.
* Некоторое количество серверов под управлением Debian, на всех установлен и запущен syslog-ng.
* Некоторое количество серверов под управлением FreeBSD, на всех установлен syslogd.

Переходим к решению задачи. Для начала сконфигурируем syslog-ng на всех серверах под управлением Linux. Для этого нужно добавить в файл /etc/syslog-ng/syslog-ng.conf следующие строки:

# Описываем новое хранилище логов.
destination df_remote {
udp("192.168.2.1");
};

# Описываем фильтр, определяющий какие именно сообщения будут отсылаться на удалённый сервер.
filter f_remote {
level(info,notice,warn);
};

# Настраиваем логгирование выбранной информации на удалённый сервер.
log {
source(s_all);
filter(f_remote);
destination(df_remote);
};

И перезапускаем syslog-ng:

invoke-rc.d syslog-ng restart

Следующим шагом настраиваем syslogd на серверах под FreeBSD. Здесь всё чуть проще: нужно добавить в файл /etc/syslog.conf строку:

*.* @192.168.2.1

И перезапустить syslogd:

/etc/rc.d/syslogd restart

Теперь остаётся только настроить сервер логов. Ранее, настраивая сбор логов с Wi-Fi точки, мы уже настраивали сбор логов с одного хоста, однако при большом количестве серверов затруднительно прописывать каждый из них отдельно, потому в этот раз поступим немного иначе.

Сейчас мы настроем сбор логов со всех серверов сразу, для этого нужно добавить следующие строки в файл /etc/syslog-ng/syslog-ng.conf на сервере сбора логов:

# Определяем новый источник: сеть.
source s_udp {
udp();
};


# Описываем фильтр, который будет из всей кучи сообщений выбрить сообщения от хостов из нашей сети.
filter f_remote {
host("192.168.2.*");
};

# Описываем хранилизе логов.
# Логи будут находится в директории /var/log/remote
# и иметь имя: -<уровень>.log
destination df_remote {
file("/var/log/remote/$HOST-$LEVEL.log");
};

# Настраиваем логгирование
log {
source(s_udp);
filter(f_remote);
destination(df_remote);
};


Создаём директорию для логов:

mkdir /var/log/remote

Перезапускаем syslog-ng:

invoke-rc.d syslog-ng restart

На этом настройка заканчивается. Через некоторое время в директории /var/log/remote начнут появляться файлы логов.

Приятной работы!