четверг, 21 мая 2009 г.

SSH по ключу

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

Идеальным решением в данном случае будет использовать способ аунтификации по ключу. Его то я и настрою у себя на сервере.

Давайте сконфигурируем сервер таким образом, что бы пользовательские ключи хранились в домашних папках пользователей в файле
~/.ssh/authorized_keys

Для этого:
в файле
/etc/ssh/sshd_config
раскомментируем строчку
AuthorizedKeysFile %h/.ssh/authorized_keys

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

PermitRootLogin no # запрещаем логин под рутом
PasswordAuthentication no # запрещаем входпо паролю

Теперь, когда сервер сконфигурирован, добавим публичный ключ на сервер в файл /home/user_name/.ssh/authorized_keys
и поменяем права на файл:
chmod 600 /home/user_name/.ssh/authorized_keys

Подробно про настройку ssh можно почитать в этой статье.

среда, 20 мая 2009 г.

Как вывести конфиг без закомментированных строк

Часто при отладке работы приложений необходимо просмотреть конфиг файлы. Но интересуют нас естественно только раскомментированые правила.

В этом случае очень помагает подсветка синтаксиса в редакторе (о том как настроить подсветку синтаксиса в редакторе nano я писал в этом посте )

Но есть еще более простой и быстрый вариант. Нужно перенаправить вывод команды cat в команду grep которая отфильтрует все закомментированые строки.

cat /etc/ssh/sshd_config | grep -v '^#'

вторник, 19 мая 2009 г.

Как узнать версию дистрибутива Linux

Для того что бы узнать какая версия дистрибутива Linux установлени на сервере в большенстве дистрибутитивов можно прочитать файл в названии которого есть слово release:

cat /etc/*release*

или если это не сработает (например в Slackware), тогда

cat /etc/*version*


В FreeBSD сработает команда

uname -rs


Везде где я смог это потестить метод сработал:

Результаты команд на различных системах:

Ubuntu:

$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.10
DISTRIB_CODENAME=intrepid
DISTRIB_DESCRIPTION="Ubuntu 8.10"

ALT Linux:

$ cat /etc/*release*
ALT Linux Sisyphus (20081222)

Gentoo:

$ cat /etc/*release*
Gentoo Base System release 1.12.9

Fedora:

$ cat /etc/*release*

fedora-release:Fedora release 10 (Cambridge)

Slackware:

$ cat /etc/*version*
Slackware 12.2.0

FreeBSD:

$ uname -rs
FreeBSD 7.0-RELEASE-p5


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

понедельник, 18 мая 2009 г.

Настраиваем Samba server

Немного расскажу о том для чего мне нужна Samba. Мне нужно организовать доступ из домашней локальной сетки к двум папкам находящимся в /home

/pub - тут будет хранится кино, музыка и другие общие файлы
и
/www - тут будут хранится виртуальные хосты вебсервера

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

Доступ в /pub должен быть гостевым. В /www - по паролю.

Доступ на сервер должен быть ограничен локальной сетью.

Итак для организации вышесказанного делаем следующее:

Открываем конфикурационный файл Samba сервера для редактирования:

dimon@server:~$ sudo nano /etc/samba/smb.conf

Сначала парочку "косметических" настроек:

workgroup = WORKGROUP
server string = %h

Теперь несколько настроек аунтентификации:

security = user
encrypt passwords = true
smb passwd file = /etc/samba/smbpasswd
map to guest = bad user
usershare allow guests = yes
hosts deny = ALL
hosts allow = 10.10.10.

Нам нужно настроить гостевой аккаунт который будет пускать всех пользователей из нашей локальной сети в папку /pub без пароля.

[pub]
comment = Wellcome
browseable = yes
path = /home/pub/
guest ok = yes
read only = no
create mask = 0777
directory mask = 0777

а в www с паролем от имени пользователя dimon

[www]
comment = Web
browseable = yes
valid user = dimon
path = /home/www/
read only = no
create mask = 0755

На этом настройка конфига самбы закончена.

Теперь нам надо добавить пользователя dimon в файл паролей самбы:
dimon@server:~$ sudo smbpasswd dimon

Рестартим самбу:
dimon@server:~$ sudo service samba restart

И вуаля, в сетевом окружении в виндах находим наш сервер, заходим в него и видим 2 наших папочки :)

воскресенье, 17 мая 2009 г.

Создание пользователя MySQL

Мне понадобилось создать пользователя MySQL с правами доступа к конкретной базе данных.
Название базы ysa

Для этого позключаемся к MySQL rootом:

dimon@server:~$ mysql -u root -p

Проверяем, на всякий случай, существует ли нужная наб база:

mysql> show databases;

Если базы нету, создадим ее:

mysql>create database ysa;
и теперь создаем нового пользователя с правами на работу с базой ysa с помощь команды GRANT

mysql> GRANT ALL PRIVILEGES ON ysa.* TO ysa@localhost IDENTIFIED BY 'user_pass';

Неплохое How to можно найти по тут и тут

Пример настройки виртуального хоста Apache2 и с пояснениями


Как известно с выходом второй версии вебсервера Apache его разработчики приложили выносить все настройки виртуальных хостов непосредственно в файле конфигурации виртуального хоста. Ниже пример подобной настройки с пояснениями.


<VirtualHost *:80> # Адрес почты который будет показывать сервер пользователю например при ошибках ServerAdmin admin@site.com # Основной адрес по которому будет открыватся сайт ServerName site.com # Дополнительный адрес по которому будет открыватся сайт ServerAlias www.site.com # Папка в которойнаходятся файлы сайта DocumentRoot /home/www/www.site.com # Настройки поведения всех папок сайта <Directory /> Options FollowSymLinks AllowOverride None </Directory> # Настройки поведения основной папки сайта и подпапок <Directory /home/www/www.site.com/> # Настройки # -Indexes - запрещаем показывать содержимое папок если в них нет индексного файла. # Если бы впереди не было знака минуса, то показывать содержимое было бы разрешено # FollowSymLinks - данная деректива разрешает использование симлинков на сайте # -MultiViews - данная опция может показывать несуществующие страницы сайта # Например: если на сайте есть страница www.site.com/link.php, то в случии активации диррективы # MultiViews эта страница откроется и по такому адресу - www.site.com/link/ # Ничего полезного в данной опции не вижу, поэтому отключаю. Options -Indexes FollowSymLinks -MultiViews # Указываем кодировку по умолчанию IndexOptions Charset=UTF-8 # Разрешаем использование .htaccess AllowOverride All Order allow,deny allow from all </Directory>

# Указываем куда будем писать лог ошибок сайта ErrorLog /var/log/apache2/www.site.com-error.log

# Указываем какие ошибки писать # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. LogLevel warn

# Указываем куда записывать лог доступа к сайту CustomLog /var/log/apache2/www.site.com-access.log combined </VirtualHost>


Хорошый мануал по настройке http://rus-linux.net/MyLDP/BOOKS/MDKman/ch10s02.html

nano

Одним из первых вопросов которым я задался в самом начале работы с Linux - какой консольный редактор использовать. Сначала я попробывал vim, и, откровенно говоря, пришел в дикий ужас от совершенно непривычной, для человека которыйвсю жизнь проработал с Windows, логике работы с редактором и системой команд. И хотя на большинстве форумов которые я перелопатил сторонники этого редактора говорили что это лишь дело привычки научится работать с vim, я привыкать не стал.

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

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

Скачать архив можно по этой ссылке: http://bigvo.dyndns.org/nanosyntax.tar.bz2

Установка очень простая:

1. Скопируйе все файлы с расширением *.nanorc в /usr/share/nano
2. Скопируйте nanorc в /etc

четверг, 14 мая 2009 г.

Mounting CD-ROM

После того как предидущий сервер пал смертью храбрых в неравной борьбе с программой Partition Magic мне удалось все таки вытащить некоторую информацию с переразмеченного винта.

Эта информация была слита на CD котрый теперь надо подмаунтить к системе. Оказалось что это проще простого:

sudo mount /dev/cdrom

Не забываем sudo :)

и все, можно пользоватся:

mc /media/cdrom

Устанавливаем необходимый софт

По умолчанию в состав дистрибутива Ubuntu не включен такой полезный инструмент как конфольный файл менеджер Midnight Commander А зря :) Очень полезный инструмент.

Поэтому устанавливаем:

sudo apt-get install mc

Дальше
установим поддержку zip и rar архивов:

sudo apt-get install zip unrar-free

sudo

При установке Ubuntu я разрешил логин под рутом и создал обычного юзера. Проблема в том что этот юзер по умолчанию не может работать от имени рута с использованием команды sudo

dimon@server:~$ sudo ls
[sudo] password for dimon:
dimon is not in the sudoers file. This incident will be reported.

Для начала проверим к каким группам принадлежит пользователь dimon с помощью команды id

dimon@server:~$ id
uid=1000(dimon) gid=1000(dimon) groups=4(adm),20(dialout),24(cdrom),46(plugdev),122(sambashare),126(lpadmin),1000(dimon)

Мы видим что наш пользователь принадлежит к группе adm поэтому добавим эту группу в список разрешенных в конфиг файл программы sudo.

Вобще то в Linux обычно для таких целей используется группа wheel, но в моем файле /etc/group такой группы нет. И хоть ее и не сложно добавить, думаю что можно обойтись без этого - группа adm отлично подойдет для нашей цели.

Для того что бы добавить пользователя dimon в список пользователей которым разрешено использование команды sudo заходим под рутом (команда su) и открываем для редактирования файл /etc/sudoers

root@server:/home/dimon# nano /etc/sudoers

Добавляем такую строчку:

%adm ALL=(ALL) ALL


А для того что бы разрешить использование команды sudo без ввода пароля пользователю dimon добавим строчку

dimon ALL=NOPASSWD: ALL


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

%adm ALL=NOPASSWD: ALL

Но вообще, считается, что разрешать выполнение sudo без пароля не безопасно :) Так что решайте надо ли оно вам :)

Buffer I/O Error

После установки Ubuntu Server при загрузке системы начали появляться множественные ошибки Buffer I/O Error несмотря на которые линукс все же загружался.

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

В результате оказалось, что просто нужно было вытащить диск из CDRom! Зачем убунте понадобился сидиром при загрузке так и осталось для меня загадкой, но факт на лицо - без диска загрузка проходит без проблем :)

Что было раньше

Хочу сразу оговорится, что до домашнего сервера дела с Linux я практически не имел, если, конечно не считать периодическую работу с виртуальным хостингом по SSH, который ограничивался запуском MC и работой с архивами. Но и пару раз запускал Linux с LiveCD - так сказать для ознакомления.

Поэтому даже еще до покупки нового компа (сервер я сделал на базе своей старой машинки) я начал шататься по форумам и читать статьи в поисках подходящего дистрибутива. В конце концов было решено использовать Ubuntu Server. И был скачан образ Ubuntu Server версии 8,04

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

И тут и начался облом. Попытка установки Ubuntu обрывалась с самого с сообщением Kernel Panic. Никакие дополнительные опции при установке ни помогли. Поиск в интернете и вопросы на разных форумах также не дали результатов.

Тогда я стал пробовать разные дистрибутивы. Были испробованы Runtu, Ubuntu Desktop, Feodora, Gentoo, FreeBSD (описание ошибки), Mandriva 2009, Mandriva 2007.

Забегая вперед скажу что из всего вышеперечисленного установить удалось только 2 - Gentoo и старенький дистрибутив Mandriva 2007.

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

Вобщем от знакомства с Gentoo у меня осталось только одно воспоминание - красные глаза :)

Так у меня на сервере поселилась Mandriva 2007 И началась борьба с системой :) Начну с того что мне так и не удалось осилить ее менеджер пакетов - то ли репозитории не те указывал то ли еще что то, но обновить Apache, PHP, установить rTorrent мне так и не удалось.

Из того что мне все таки удалось в конце концов сделать - поднять http server с php4 и настроить Samba server. На первых порах меня это вполне устроило, но в конце концов необходимость установить сайт который требовал php5, а также разные мелкие глюки (например почему то постоянно работал винчестер, даже если сервер находился в покое описание проблемы на форуме) и неудобства заставили меня опять искать решения проблемы с установкой других дистрибутивов.

В конце концов после долгих мытарств ответ был найден. Вернее не найден, а подсказан хорошим человеком :) Unic привет

Всего на всего надо было взять 64битный дистрибутив! (у меня процессор Athlon64 3000+)

Вобщем в результате на сервере поселилась Ubuntu Server 8.10 которую через месяц я успешно запорол неудачным переразбиением винчестера :) И вот третяя реинкарнация :)

Для чего этот блог

Я решил поставить домашний linux сервер. Задчи вкратце: вебсервер, файл сервер, торренты.

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

Так получилось что к моменту когда я пишу этот пост, мне пришлось третий раз переустанавливать систему, причем в этот раз с потерей всех конфигов.

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

Ну и может кто то в процессе поиска мануала или ответа на вопрос набредет на эти записи и найдет необходимую информацию :)