среда, 16 марта 2011 г.

Удаленная работа

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

Первое требование оно простое. Я не доверяю каналу связи и хочу иметь возможность управлять сервером из любой точки мира. Почему из любой? А вдруг ты на Камчатке, а я в Москве. Всяко бывает. И бывает так, что подключаешься к халявному вайфаю, а у человека там tcpdump во всю играет. Вот твой пароль от сервера уже и у него. А значит и сервер его. Т.е. хочется иметь возможность авторизовываться и сообщать команды по шифрованному соединению.

Второе требование ещё проще. Я поехал в поездку и у меня из "ентернетов этих" только gprs. Да ещё и связь на одно деление. Вот тут сразу отпадают citrix, radmin, remote desktop аки присутствую в огромном количестве в виндоузе. Понятно, что текстовые команды тут на высоте. И дублировать на несколько серверов действия - легко.

За сим хочу представить такую вещь как ssh - security shell.
Разделяется она на две части. Нет не мужскую и женскую. Клиентскую и серверную.
Работают с этой штукой так же как и в обычной консоли, правда к удаленной консоли надобно нам подключиться:

ssh icegreg@example.com
Вот пользователь icegreg запрашивает подключению к серверу по адресу example.com. И запрашивает по 22 порту. Что такое порт? Приведу аналогию:
вот звоним мы в какую-нибудь контору. номер телефона - это адрес хоста. А нам в ответ говорят наберите добавочный номер. Вот добавочный номер и будет портом. И тот кто нам ответит на другом конце - сервер. Вот такая простая аналогия.

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

Настроек и дополнительных опций у ssh целая телега.
например ssh -X icegreg@example.com firefox
Запустит команду firefox на удаленном сервере и транслирует все запросы графического сервера на локальную машину. Т.е. будем работать в firefox, только будет он серверным.

ssh -L 4899: 192.168.1.2:4899 icegreg@example.com -Nf
если example.com так же подключен к сети 192.168.1.0/24 то он пробросит через себя все данные к порту 4899 компьютера 192.168.1.2 и обращаться к этому порту можно будет на прямую из локальной машины, по адресу 127.0.0.1:4899, а -Nf не откроет нам консоль.

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

Но минусы как всегда есть.
Если ты поднял этот сервер у себя на внешнем сервере, то готовься, что тебя начнут брутфорсить.
Т.е. будет валить гигантское кол-во запросов на авторизацию по справочникам.
Т.е. твои пароли не должны быть легкими и стоит в любом виде запретить пользователя root. Т.к. это точно единственно известный пользователь в системе.
А так же не давать больше 3-5 попыток авторизации на сервере.

Уф сколько всего. А теперь если подумать.
Вот веб-служба работает на 80 порту по умолчанию. ДНС на 53. ftp на 21/20.
Но это популярные общественные сервисы, а наш ssh нужен только админам.
А теперь давай подумаем. Раз атака работает автоматически и по порту 22, то если мы перекинем сервис ssh на 8022 или 9022, то и автоматический сервис по обнаружению ssh уже до нас не доберётся. И не будет атак с подбором, и не надо ставить fail2ban, для бана ip-адресов.
А т.к. пользоваться будет только узкий круг, то можно сказать всем, что по умолчанию у нас 8022. И всё. Но всё таки пароль надо сделать сильным.
Для того, что бы сервер стал работать по порту 8022
надо в файле /etc/ssh/sshd_config
строку: # Port 22
заменить на: Port 8022
и перезапустить сервер
/etc/init.d/ssh restart

Вот теперь, если зайдем на наш сервер, то ssh не зайдет.
Т.к. стучится он на порт 22, а ответа там нет.
тут есть два варианта
ssh icegreg@example.com -p 8022
или же поправить порт по умолчанию в файле /etc/ssh/ssh_config
И так же указать: Port 8022

В общем таким способом наш лог-файл /var/log/auth.log перестанет разрастаться прямо на глазах.
P.S.: хотя профит в fail2ban по ssh тоже есть :) Но он уже для профи так сказать.








Поговорим о рабочих командах.

Если спросить большинство людей, а сколько вы наизусть знаете "табличных интегралов". То мало народа скажут хотя бы 10 штук. Да же люди с высшим техническим или математическим образованием на этот вопрос большую цифру не ответят. Они как специалисты их просто выведут. Так и в любой области. Количество команд которое я использую даже считать не хочу.

Хорошо помогает в деле очистки мозгов от хлама две вещи:

man <имя_команды> # будет выдана документация по команде, если таковая имеется
<имя_команды> -h # часть выводится миниатюрная помощь.

А вот собственно и сами команды:
ls  # ls <имя каталога> выводит список файлов и каталогов в указанном месте
cd # cd <имя каталога> перейдет в каталог
find # команда поиска, find <имя каталого> -name "<имя файла>"
cp # копировать файл или каталог cp /home/icegreg/1.txt cp /home/icegreg/2.txt
mv # переместить файл или каталог mv /home/icegreg/1.txt /home/icegreg/2.txt
rm # удалить файл или каталог
mkdir # создать каталог
ln # создать ссылку на объект ln -sf /home/icegreg/2.txt /home/icegreg/3.txt
chmod # редактировать права chmod 765 /home/icegreg/2.txt
chown # редактировать владельца chmod icegreg:www-data /home/icegreg/2.txt
tar # очень мощная архивная утилита
su(sudo) # стать суперпользователем
grep, awk, sed # очень мощная связка для работы с текстом.

Если посижу, то, наверное ещё буду долго вспоминать всяко разное. Но это тот базис который я "немного знаю".