Мониторинг системы под FreeBSD

Системные команды, которыми можно проверить ресурсы системы:

top -mio – показать I/O по процессам
top -S – показать системные процессы в топе (по дефолту они не показываются)
gstat – нагрузка на диски
iostat -d -w1 -c7 – нагрузка на диски
systat -io start 1
diskinfo -t da0 – тест на дисковую производительность
tunefs -p /var/ – информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat – интенсивность передачи трафика
netstat -inb – передано через интерфейс в байтах
netstat -w1 – количество пакетов/ошибок/байт на интерфейсе
sysctl kern.ipc.numopensockets – количество открытых сокетов
df -H – количество свободного места
df -i – количество свободных инодов
freecolor – очень симпатичная утилита для мониторинга использования памяти (ставится из портов)

Для детальной информации по расходу памяти:

fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory
chmod +x /usr/local/bin/free
free

Тюнинг FreeBSD 7-8 (sysctl, loader.conf)

Некоторые опции по тюнингу FreeBSD и описание к ним.

Предупреждение: Бездумное копирование опций не всегда приводит к приросту производительности!!!

/etc/sysctl.conf

 ###### Формат записей " параметр=значение # значение по умолчанию " 

NETWORK
Запрет ответа при обращении на закрытые порты. 
По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом.
Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС.
«Черные дыры» заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам.

 net.inet.tcp.blackhole=2 # 0 net.inet.udp.blackhole=1 # 0 

Увеличение размера очереди.
Защита очереди от SYN атак

 kern.ipc.somaxconn=4096 # 128 

Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда. 
Когда новое соединение не помещается в переполненный syncache, FreeBSD переходит в режим «syncookies» (TCP SYN cookies).

При серьезной атаке может не менее серьезно выручить.

 net.inet.tcp.syncookies=1 # 1  Read the rest of this entry »

Некоторые опции sysctl

Озадачился собрать и попробовать всякие sysctl опции ядра, повышающие безопасность машины, и облегчающие её работу при попытках всяких атак и сканировании портов. А может, даже, просто те пункты, которые показались интересными и нужными — причём даже только начав, заметил одну вещщь — почти всё касается работы стека TCP/IP, что и неудивительно, ибо основное применение FreeBSD — это серверы. Порывшись в инете понял — 90% данных это скопированный друг у друга перевод какой-то буржуйской статьи. Собстно поэтому и начал ковыряться — остальные 10% — это далеко немало… Причина крайне проста — это самая недокументированная часть FreeBSD…

Следующие два пункта касаются поведения ОС при попытке подключиться на порты, которые не слушаются приложениями. При штатных настройках, в таком случае, система посылает пакет с флагом RST, и закрывет подключение. Удалённый хост получает примерно следующее (если пробовать telnet`ом подключиться): Connection reset by peer.
net.inet.tcp.blackhole=2 — данный пункт указывает, что происходит при получении TCP-пакета на закрытый порт (не слушаемый никакими приложениями)Если стоит «1″, то SYN пакеты (пакет, устанавливающий соединение) на закрытый порт будут отклоняться без отсылки отправителю RST пакета (перезагрузка (соединения, не машины :) )). При установке в «2″, вообще все (а не только SYN) пакеты на закрытый порт отбрасываются без каких-либо действий. Данный пункт позволяет разгрузить ЦП, т.к. обработка пакетов не производится, и интернет-канал сервера — т.к. не надо слать ответных пакетов.

net.inet.udp.blackhole=1 — очень похож на предыдущий пункт, по результату, но для протокола UDP. Ввиду того, что протокол UDP работает без установки соединения, есть только два, а не три варианта установки, когда эта переменная установлена в 1, то отбрасываются все UDP пакеты, адресованые закрытым портам.

kern.ipc.somaxconn=1024 — увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений. Конечно от мощной атаки это не спасёт, но от слабой и средней — должно помочь. Значение по дефолту — 128.

Следующие 4 пункта необходимы для невозможности удалённого изменения таблицы маршрутизации на Вашем хосте. Надо заметить, что установив эти пункты как указано, я столкнулся с проблемами в собственной сети — как оказалось между некоторыми подсетями маршрутизация была криво настроена (причём сам же знал, что криво, сам же криво и делал — быстрей, быстрей! — а потом всё недосуг было заняться) — соответственно клиентские компы начали терять некоторые сети. Пришлось сделать всё по-уму :)

net.inet.icmp.drop_redirect=1 — уничтожать icmp-датаграммы переадресации

net.inet.icmp.log_redirect=1 — записывать в журнал событий icmp-датаграммы с указанием переадресации

net.inet.ip.redirect=0 — может ли эта машина посылать дейтаграммы переадресации другим (вот из-за изменения этого пункта у меня сеть и плющщило, но менять его надо, просто надо сразу сетку корректно настраивать)

net.inet6.ip6.redirect=0 — предыдущий пункт, но для IPv6

Read the rest of this entry »

Перенос FreeBSD на другой диск

Если диск начал грязно ругаться в dmesg на ошибки чтения-записи, значит пора переезжать. Допустим у нас FreeBSD версии 7.0…

Выключаемся, вставляем новый диск (у меня он ad2). Он у меня немного поменьше, потому внимательно смотрим

$ df -m

- и думаем, какую файловую систему насколько можно ужать.
Подумали — можно приступать.

# sysinstall

идем в меню Configure->Fdisk, в нем удаляем существующие партиции и создаем одну новую на весь диск. Сложностей никаких. Есть тонкость — выходить нужно по Q, не нажимая W. (Если в задумчивости нажали, катастрофы нет — но перед следующей операцией придется перегружаться).

На вопрос про Boot Manager отвечаем Standard.

Переходим в пункт меню Label.

Здесь нас поджидает еще одна тонкость. Будущий корневой раздел должен быть создан с меткой ad2s1a, но sysinstall не позволяет задавать метку вручную, а при указании точки монтирования отличной от / автоматически присваеват имя ad2s1d. У меня сработала такая последовательность: сперва создал раздел с точкой монтирования / — и он получил правильную метку, а потом нажал M — и изменил точку монтирования на /tmp/root.

Далее без каких-либо сложностей создаются раздел подкачки ad2s1b и файловые системы с точками монтирования /tmp/usr и /tmp/var (соотношение меток и точек монтирования сверяйте с вашим /etc/fstab — если, конечно, у вас нет охоты переделать все по-новому).
Выход из Label нажатием W (появляется большое ругательное окно, с вопросом, понимаете ли вы, что творите. Нужно ответить Yes) и потом Q.

Выходим из sysinstall и смотрим на новые файловые системы:

$ mount

Теперь переносим на них содержимое старого диска:

# cd /
# find . -xdev -print | cpio -p -m /tmp/root
# cd /usr
# find . -xdev -print | cpio -p -m /tmp/usr
# cd /var
# find . -xdev -print | cpio -p -m /tmp/var

Чтобы веселее было ждать конца копирования, у cpio можно добавить опцию —verbose
(команда копирования может быть и такой:

pax -rw -X -pe . /tmp/root

— так короче, но вариант find+cpio просто привычнее — и переносимее — кто-нибудь видел pax напр. под Linux? — про другие unix-like системы уже молчу).
Вот и весь процесс. Выключаемся, ставим новый диск на место старого — и грузим систему.

Удобный конфиг для tcsh

кладем в .tcshrc и радуемся

#
# File   : tcsh config for Frenzy 1.0
# Author : Sergei Mozhaisky (technix@frenzy.org.ua)
# 

setenv	EDITOR		vi
setenv	PAGER		more
setenv	BLOCKSIZE	K

set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

# if this is not interactive shell - exit
if ($?USER == 0 || $?prompt == 0) exit

set autocomplete
set autoexpand
set autolist
set filec
set ellipsis
#set nobeep
set listjobs
set rmstar
set prompt = "%{\033[31m%}%n@%m:%{\033[34m%}%c02%{\033[0m%}%# "
set prompt2 = "%R?"
set history = 10000
set savehist = (10000 merge)
set inputmode = insert
set symlinks = chase
limit coredumpsize 0
unset autologout
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif

## Alias section
alias today     "date '+%Y%m%d'"
alias mess      'clear ; tail -f /var/log/messages'
alias ff        'find . -name $*'
alias h		'history 25'
alias j 	'jobs -l'
alias la	'ls -a'
alias lf	'ls -FA'
alias ll	'ls -lA'

# enter command name and press F1 to see man on this prog
alias helpcommand man

## Bindkey section

# F1 : help on command currently typed(if 'ls passwd', help on 'ls').
bindkey ^[[M run-help
bindkey [OP  run-help

if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term !~ "con*") then
# bind keypad keys for console, vt100, vt102, xterm
bindkey "\e[1~" beginning-of-line  # Home
bindkey "\e[7~" beginning-of-line  # Home rxvt
bindkey "\e[2~" overwrite-mode     # Ins
bindkey "\e[3~" delete-char        # Delete
bindkey "\e[4~" end-of-line        # End
bindkey "\e[8~" end-of-line        # End rxvt
else
# INSERT : toggles overwrite or insert mode.
bindkey ^[[L  overwrite-mode
bindkey ^[[2~ overwrite-mode        # for x
# DELETE : delete char at cursor position.
bindkey ^?    delete-char
bindkey ^[[3~ delete-char           # for x
# HOME : go to the beginning of the line.
bindkey ^[[H beginning-of-line
# END : go to the end of the line.
bindkey ^[[F end-of-line
endif

Для того, что бы история сохранялась более надёжно (не только по команде exit) нужно добавить в файл .logout строчку

history -S

Управление портами в FreeBSD

В системах FreeBSD, OpenBSD и NetBSD существует два подхода к установке
дополнительного программного обеспечения, так называемых портов и пакетов,
в данном руководстве я буду опираться лишь на подход в OS FreeBSD:

ports, packages.

Packages или пакеты, это уже собранные(binaries — исполняемый код) пакеты
для того или иного FreeBSD RELEASE из портов для этих RELEASE.

Порты постоянно обновляются, поэтому готовые пакеты собираются и проверяются
только для выпускаемого RELEASE. Термин port — сокращение от portability,
портабельность, существует много программного обеспечения Freeware или под
лицензиями GPL (http://www.gnu.org/licenses/licenses.html) и «AS IS» BSD-лицензия (http://www.bsdnewsletter.com/bsd/license.html), команда разработчиков
FreeBSD занимается адоптацией или портированием такого программного обеспечения
для OS FreeBSD. Read the rest of this entry »

Шпионам за чужой консолью

В стандартный состав FreeBSD входит замечательная программа watch(8), которая позволяет подсматривать за чужой консолью.

Всё, что ей для этого необходимо это snp модуль, который достаточно собрать из сурцов а программа сама его подгрузит:

# cd /usr/src/sys/modules/snp/
# make && make install

Теперь выбираем цель:

# w
9:16PM up 55 days, 52 mins, 2 users, load averages: 0.08, 0.06, 0.00
USER TTY FROM LOGIN@ IDLE WHAT
nlo1 p0 nlo.habr.ru 9:06PM - w
nlo2 p1 nlo.habr.ru 9:16PM - -bash (bash)

И подсматриваем за интересной нам консолью(TTY).

# watch p1

SSH-туннелинг или замена VPN

В последнее время довольно большое распространение получила технология VPN (Virtual Private Networks). В большинстве случаев ее используют люди для шифрования передаваемой информации через локальную сеть (защита от снифанья трафика, что довольно легко осуществить в сети, даже на свичах) и/или последующей передачи информации через Интернет (тут уже целями будет скрытие своего IP-адреса, защита от глобального снифа трафика всей страны (aka СОРМ, он же нынешний СОРМ2) и.д.). Многие уже давно используют данную технологию VPN, но не многие знают об ее более дешевой и мобильной альтернативе. А называется это — SSH-туннелинг.

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

Теперь давайте разберемся с минимальным набором инструментов и сервисов необходимых для организации данного процесса. В первую очередь нам нужна программа для организации туннеля по SSH-протоколу. Для этой задачи мы можем применить VanDyke Entunnel (http://www.vandyke.com/products/entunnel/) или Putty (http://www.web-hack.ru/download/info.php?go=35) (вкладка Connection\SSH\Tunnels). В наших примерах я буду использовать оба клиента. Далее мы можем вручную прописывать в каждой программе работу через прокси или использовать специализированную программу для перенаправления запросов, такую как ProxyCap (http://proxylabs.netwu.com), SocksCap (http://www.socks.nec.com), FreeCap (http://www.freecap.ru) и т.п. В нашем примере будет использоваться ProxyCap, как наиболее удобная софтина (кстати, через ProxyCap мы сможем сделать туннерирование даже WebMoney, которая известна защитой от такого вида софта, для скрытия IP). Так же нам понадобится SSH-аккаунт (на сервере желательно расположенном за пределами вашей страны =), который можно без проблем достать (например, я покупаю VPS-хостинг для этого) и socks`ы.

Первым делом создаем SSH-аккаунт. Далее, я предлагаю вам использовать socks-сервер, а не proxy, т.к. не все прокси поддерживают туннелирование. Также может оказаться, что сегодня прокси анонимный, а завтра уже и не нет (если, конечно, не вы сами отвечаете за него). Кстати, проверить свою анонимность можно здесь (http://ip.xss.ru). Как я уж говорил, мы можем использовать сокс на удаленной машине (для большей безопасности). Для примера я покажу, как установить сокс-демон. Наиболее популярные и продвинутые демоны под никсы это socks5 от Permeo/NEC (http://freeware.sgi.com/source/socks5/), Dante (http://www.inet.no/dante/) и отечественный продукт 3proxy (http://www.security.nnov.ru/soft/3proxy/). Для примера я выбрал классический демон на FreeBSD — socks5.

Для тестирования использовалась FreeBSD 5-ой ветки. Я устанавливал socks5 из портов (/usr/ports/net/socks5/), но и из сорцов под фряхой тоже все хорошо собирается и ставится:

cd /usr/ports/net/socks5/
make install clean
rehash

Для нормальной работы демона необходим конфиг к демону socks5.conf и файл паролей socks5.passwd (если необходима аутификация к сокс-серверу по паролю):

touch /usr/local/etc/socks5.conf
touch /usr/local/etc/socks5.passwd

Далее добавляем в конфиг следующие строчки:

auth - - u
permit u - - - - -
SET SOCKS5_BINDINTFC 1.2.3.4:8080
SET SOCKS5_CONFFILE /usr/local/etc/socks5.conf
SET SOCKS5_PWDFILE /usr/local/etc/socks5.passwd
SET SOCKS5_MAXCHILD 128
SET SOCKS5_NOIDENT
SET SOCKS5_NOREVERSEMAP
SET SOCKS5_NOSERVICENAME
SET SOCKS5_V4SUPPORT
SET SOCKS5_ENCRYPT
SET SOCKS5_FORCE_ENCRYPT
SET SOCKS5_UDPPORTRANGE 1023-5000

Первые две строчки указывают, что необходима аутификация по логин/пароль. SOCKS5_BINDINTFC указывает на какой IP (если у сервера несколько алиасов) и порт повесить демон. SOCKS5_MAXCHILD по умолчанию 64, я советую увеличить до 128, чтобы всем юзерам (если их много) хватило потоков. Далее, идут строчки для ускорения работы демона. SOCKS5_V4SUPPORT — поддержка 4-ой версии протокола. SOCKS5_ENCRYPT и SOCKS5_FORCE_ENCRYPT поддержка шифрования, если клиент это поддерживает. За более подробной информацией по установка обращайтесь к файлам README и INSTALL, а за информацией по настройке к манам socks5(1) и socks5.conf(5).

Далее, заполняем файл паролей. Он имеет обычный текстовый формат и login/password разделяются в нем пробелами:

user password
root toor

Теперь можно запускать демон и приступить к настройке клиентского софта:

/usr/local/bin/socks5

Запускам ProxyCap (http://forum.web-hack.ru/index.php?showtopic=29262), кликаем правой кнопкой мыши на значке в трее, Preferences. На вкладке «Proxies» вписываем 127.0.0.1:8080 и устанавливаем в «Require Authorization» наш login/password на сокс. На вкладке «Rules» добавляем сначала правило для Entunnel, указав в «Rule Type» — Force direct connetion. Далее, создаем правило, для всего остального софта, трафик от которого будет шифроваться и туннелироваться через сокс. В правиле указываем «All Programs», «Tunnel through proxy» и в выпадающем меню наш сокс. Так же можно создать правило не для всего софта, а только выборочный софт пускать через туннель или наоборот, создать правило для всего софта, но для некоторого софта сделать прямой доступ в инет (Force direct connetion). В качестве дополнения могу сказать, что если ваша сетевая программа поддерживает работу через сокс/прокси (и нет необходимости пускать сразу весь сетевой софт через туннель), то в качестве настроек прокси вы можете указать забинденный Entunnel`ем адрес и порт — 127.0.0.1:8080.

Запускаем Entunnel и создаем в нем новое соединение по SSH. Далее, в свойствах соединения (Port Forwarding) добавляем наш сокс. В категории «Local» вписываем 127.0.0.1:8080, а в категории «Remote» вписываем IP и порт нашего сокс-сервера. Настройка закончена! Если что-то не работает, то еще раз перечитайте все пункты настройки.

В случае, если вы хотите использовать SSH-аккаунт, как конечную точку (т.е. не юзать соксы или прокси), то ваши настройки должны быть следующие (на примере для Putty): на вкладке Connection\SSH\Tunnels в строке «Source port» указываем порт, на который Putty забиндится на локалхосте (например, 8080), далее ставим влажок на «Dynamic» и идем на вкладку «Session» прописывать адрес и порт сервера с SSH. Коннектимся…

Какие плюсы данной системы:

1. Для организации данной схемы не нужно устанавливать серверный софт (т.к. SSH-аккаунт и сокс можно без проблем достать в инете);
2. Т.к. при SSH-соединении трафик шифруется и сжимается, то мы получаем небольшой прирост скорости работы в инете (это верно, когда сокс-демон находится на том же сервере);
3. В случае, когда сокс-сервер находится на другом хосте, то мы получаем дополнительную цепочку серверов, которые повышают нам безопасность и анонимность;

Nginx+Php-Fpm+Eaccelerator = Perfect Linux Server !

Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL

Cредства; 1, Достаточно мощный компьютер: — процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS (Domain Name Server). на котором этот домен припаркован,

Начали: Грузим OS http://www.ubuntu.com/getubuntu/download Здесь надо выбрать OS соответствующую архитектуре железа: x86 или AMD64. Я буду писать для AMD64, что впрочем подходит с небольшими изменениями и для x86 После того, как файл загрузился, надо записать его в том же формате т.е. .iso, чтобы с него можено было запускать компьютер.

Надеюсь всё прошло хорошо и сомпьютер запустился с СДишки. Предупреждаю, компьютер должен быть отведен специально для цели служить СЕРВЕРОМ. Т.е. всё, что было в нём прежде, будет утрачено !!!

Ubuntu установить очень просто, достаточно выбрать язык установки и следовать указаниям. Важно сделать правильную разметку диска. Для root или «/» достаточно 8 ГБ , swap расчитывается по формуле active RAM x 2. т.е. если общий размер оперативной памяти составляет 1 ГБ, то swap должен быть не меньше 2 ГБ. Остальное пространство отдадим /home. Там будет сидеть всё хозяйство сервера.

После того как система задышала и ты в неё вошёл первым делом добавь терминал на панель. Ну и понеслись: (Я буду писать коды для терминала, тебе надо их скопировать, вставить и нажать «enter». Свои пояснения я буду отделять запятыми, скобками или кавычками, чтобы программа их не распознала, даже если ты их по ошибке и введешь)

sudo apt-get update

sudo apt-get upgrade

(процесс получения обновлений, надо будет ввести пароль)

sudo aptitude install mysql-server

(ждём пока установится)

sudo mysql_secure_installation

(на все вопросы — yes и устанавливаем пароль, очень важно его не забыть и сделать достаточно сложныи)

(Установим дополнительные библиотеки)

sudo aptitude install build-essential libtool libltdl3-dev libgd-dev libmcrypt-dev libxml2-dev libmysqlclient15-dev flex m4 awk automake autoconf bison make libbz2-dev libpcre3-dev libssl-dev zlib1g-dev vim re2c libjpeg-dev libpng-dev

(Мы будем собирать PHP с PHP-FPM заплаткой из источника.)

cd /usr/local/src

wget http://us.php.net/get/php-5.2.10.tar.gz/from/ru.php.net/mirror

tar xzvf php-5..10.tar.gz

wget php-fpm.org/downloads/php-5.2.10-fpm-0.5.13.diff.gz

gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1

cd php-5.2.10

./configure —enable-fastcgi —enable-fpm —enable-exif —with-mcrypt —with-zlib —enable-mbstring —with-openssl —with-mysql —with-mysql-sock —with-gd —with-gettext —with-jpeg-dir=/usr/lib —enable-gd-native-ttf —without-sqlite —disable-pdo —disable-reflection —with-libdir=lib64 —with-pgsql=/usr/lib/pgsql —with-mysql=/usr/lib64/mysql

(Если сборка будет жаловаться, что не хватает чего то, то можно будет найти и установить недостающее через Synaptic)

make all install

strip /usr/local/bin/php-cgi

( Теперь отрегулируем PHP-FPM, о котором хочу сказать особо. Php-fpm — это продукт напряжённого бескорыстного труда нашего соотечественника Андрея Нигматулина, И этим продуктом, как и NGINXом от Игоря Сысоева, уже пользуются миллионы админов по всему миру, несмотря на то, что мало кто из из них говорит и понимает по русски и что отсутствует подробная документация. Золото видно издалека …. И цена его понятна на любых языкахMoney mouth )

sudo gedit /usr/local/etc/php-fpm.conf

(линия 63 убрать стрелки и тире перед и за кодом и поменять nobody на)

www-data

( то же самое для линии 66)

www-data

(Устанавливаем NGINX web server)

cd /usr/local/src

wget sysoev.ru/nginx/nginx-0.7.61.tar.gz

tar xzvf nginx-0.7.61.tar.gz

cd nginx-0.7.61

(нам не нужны почтовые функции NGINX потому, что мы будем использовать внешний почтовый агент чтобы не нагружать сервер)

./configure —sbin-path=/usr/local/sbin —with-http_ssl_module —without-mail_pop3_module —without-mail_imap_module —without-mail_smtp_module

make

make install

(настроим NGINX)

sudo gedit /usr/local/nginx/conf/nginx.conf

(см. прикрерплённый файл)

http://vkimo.org/files/nginx.txt

(Обрати внимание на «root /home/TVOI FOLDER/$host;» — здесь надо указать путь к папке, где будет сидеть всё содержание сайта. «$host» это абсолютное значение, которое вытащит и опубликует любой сайт если он зарегестрирован, находится на работающем домайн найм сервере и сидит в отдельной папке в твоей домашней папке «TVOI FOLDER» под названием твоего сайта т.е. «moisite.com». А также на «server_name » Символ » _ » — это Изумительное по простоте и удобству решение автора NGINX Игоря Сысоева http://sysoev.ru/nginx/ способа адресовать виртуальные хосты. Apache и даже Lighttpd здесь отдыхают плотно.

Теперь создадим место для содержимого нашего вебсайта и изменим соответственно /home/TVOI FOLDER/$host

sudo mkdir /home/www

sudo mkdir /home/www/точное название твоего сайта (мойсайт.ru)

sudo chmod -R tvoeimya:tvoeimya /home/www/moisite.ru (tvoeimya надо поменять на имя пользователя, под которым ты работаешь в своём сервере, Это даст тебе возможность управлять содержимым папки сайта без необходимости входить в сервер под привелегированным пользователем — root.

(Создадим также два файла внутри папки сайта)

gedit /home/www/moi site.ru/index.html

(вставить в пустой файл что-нибудь вроде — Это мой первый сайт !!! )

gedit /home/www/moisite.ru/info.php

(Вставить этот код в пустой файл сохранить и закрыть)

phpinfo();
?>

Продолжаем: надо отрегулировать fastcgi_params)

sudo gedit /usr/local/nginx/conf/fastcgi_params

(и в самый верх добавляем)

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

(а также выключаем, ставим «#» перед #fastcgi_param REDIRECT_STATUS 200; примочку для арача потому что мы его здесь не имеем )

(Полируем PHP код)

sudo gedit /usr/local/lib/php.ini

(вставить это в пустой файл)

_________________________________________________________________________________________

magic_quotes_gpc=0
[xcache-common]
#zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so
[xcache]
#xcache.shm_scheme = «mmap»
#xcache.size = 64M
default_charset = “utf-8″
[memcache]
#extension = memcache.so
#memcache.hash_strategy=»consistent»
[memcache]
[suhosin]
#extension = suhosin.so
#extension = apc.so
#apc.shm_size = 48
[suhosin]
; For Unix only. You may supply arguments as well (default: «sendmail -t -i»).
sendmail_path = /usr/sbin/sendmail -i -t
upload_max_filesize=8M
[eaccelerator]
#zend_extension=»/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so»
#eaccelerator.shm_size=»16″
#eaccelerator.cache_dir=»/tmp/eaccelerator»
#eaccelerator.enable=»1″
#eaccelerator.optimizer=»1″
#eaccelerator.check_mtime=»1″
#eaccelerator.debug=»0″
#eaccelerator.filter=»"
#eaccelerator.shm_max=»0″
#eaccelerator.shm_ttl=»0″
#eaccelerator.shm_prune_period=»0″
#eaccelerator.shm_only=»0″
#eaccelerator.compress=»1″
#eaccelerator.compress_level=»9″
[eaccelerator]

_________________________________________________________________________________________

(Как видно, большинство примочек выключено. Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже)

(Надо попробовать стартануть php-fpm)

php-fpm start

(Теперь NGINX)

nginx

(Если ошибок нет — будь горд собой !!!)

(Надо теперь сделать так чтобы оба сервиса запускались автоматически вместе с запуском сервера)

cd /etc/init.d/

ln -s /usr/local/sbin/php-fpm php-fpm

/usr/sbin/update-rc.d -f php-fpm defaults

(Это было просто для php-fpm, немного сложнее для NGINX)

sudo kill `cat /usr/local/nginx/logs/nginx.pid`
sudo gedit /etc/init.d/nginx
(и вставить этот код в пустой файл)

_________________________________________________________________________________________

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi

set -e

case «$1″ in
start)
echo -n «Starting $DESC: »
start-stop-daemon —start —quiet —pidfile /usr/local/nginx/logs/nginx.pid \
—exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
stop)
echo -n «Stopping $DESC: »
start-stop-daemon —stop —quiet —pidfile /usr/local/nginx/logs/nginx.pid \
—exec $DAEMON
echo «$NAME.»
;;
restart|force-reload)
echo -n «Restarting $DESC: »
start-stop-daemon —stop —quiet —pidfile \
/usr/local/nginx/logs/nginx.pid —exec $DAEMON
sleep 1
start-stop-daemon —start —quiet —pidfile \
/usr/local/nginx/logs/nginx.pid —exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
reload)
echo -n «Reloading $DESC configuration: »
start-stop-daemon —stop —signal HUP —quiet —pidfile /usr/local/nginx/logs/nginx.pid \
—exec $DAEMON
echo «$NAME.»
;;
*)
N=/etc/init.d/$NAME
echo «Usage: $N {start|stop|restart|force-reload}» >&2
exit 1
;;
esac
exit 0

_________________________________________________________________________________________

(разумеется его надо сохранить, закрыть и сделать исполняемым)

sudo chmod +x /etc/init.d/nginx
sudo /usr/sbin/update-rc.d -f nginx defaults

(Увидишь примерно такой выход):

Adding system startup for /etc/init.d/nginx …
/etc/rc0.d/K20nginx -> ../init.d/nginx
/etc/rc1.d/K20nginx -> ../init.d/nginx
/etc/rc6.d/K20nginx -> ../init.d/nginx
/etc/rc2.d/S20nginx -> ../init.d/nginx
/etc/rc3.d/S20nginx -> ../init.d/nginx
/etc/rc4.d/S20nginx -> ../init.d/nginx
/etc/rc5.d/S20nginx -> ../init.d/nginx

(Последнее в этом уроке:

Если мы ожидаем хорошее движение на сайте, то необходимо создать файл для logrotate, который автоматически будет сжимать и удалять старые файлы и давать нам возможность контролировать кто бывал на нашем сайте)
sudo gedit /etc/logrotate.d/nginx

(вставить это в пустой файл и сохранить)

_________________________________________________________________________________________

/usr/local/nginx/logs/*.log {
daily
missingok
rotate 9
compress
delaycompress
notifempty
postrotate
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}

Настройка безпарольной аутентификации по ssh

Допустим, вам необходимо настроить безпарольный вход по ssh (scp и sftp тоже) на удаленный сервер remote.org.ua под пользователем user.
Если ваш имя вашего локального пользователя совпадает с удаленным, то user@ везде можно опустить.

1) создаем открытый и закрытый ключ нашей локальной системы
$ ssh-keygen -t rsa
жмем энтер отказываясь от ключевой фразы

2) если в системе есть программа ssh-copy-id, то настраиваем удаленную систему на то, что бы оно авторизировало ssh по открытому ключу
$ ssh-copy-id -i ~/.ssh/id_rsa user@remote.org.ua
переходим к шагу 4)

3) если ssh-copy-id нет то можно сделать это ручками. вот последовательность действий с объяснениями

3.1) копируем открытый ключ на удаленную систему
$ scp ~/.ssh/id_rsa.pub user@remote.org.ua:~ незабываем ввести пароль. ведь мы еще не настроили беспарольный вход Ж:-)

3.2) логинимся на удаленный сервер
$ ssh user@remoute.org.ua

3.3) заносим открытый ключ нашей локальный системы в авторизированые ключи удаленной системы, устанавливаем правильные права и убираем за собой мусор:
remote$ [ -d ~/.ssh ] || (mkdir ~/.ssh; chmod 711 ~/.ssh) # создадим ~/.ssh директорию если ее нет и дадим нужные права
remote$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys # добавляем открытый ключ к авторизированым ключам
remote$ chmod 600 ~/.ssh/authorized_keys # и делаем правильные права(иначе ssh откажется брать отсюда ключи)
remote$ rm ~/id_rsa.pub # удаляем ненужное

4) проверяем что все работает. запускаем на локальном хосту
$ ssh user@remoute.org.ua
или например
$ scp .zshrc user@remoute.org.ua:~
должно сработать без пароля.