Групповое переименовывание фотографий в Linux

С помощью утилиты exiv2, которая позволяет читать данные EXIF из файлов фотографий, я переименовываю фотографии, которые сделал фотоаппаратами Canon EOS 7D, из вида IMG02731.CR2 в вид, более удобный для сортировки и отображения, 20110719_114534_IMG02731.CR2. Теперь в имени файла присутствует год, месяц, число, время и первоначальное имя файла фотографии.

$ exiv2 -r'%Y%m%d_%H%M%S:basename:' rename *

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

Error: Directory (Last IFD item), entry 0x145f has invalid size 3062158522*1; skipping entry.
Warning: Directory (Last IFD item), entry 0x19b7 has unknown Exif (TIFF) type 48470; setting type size 1.
Error: Offset of directory (Last IFD item), entry 0x19b7 is out of bounds: Offset = 0xf35a8f80; truncating the entry
Error: Directory (Last IFD item) with 8532 entries considered invalid; not read.

Не обращаю внимания. Пока не заметил проблем.

Авторизация SSH по RSA ключу


Для начала создадим алиасы устройств — вместо длинной записи ssh -l user 192.168.0.1 будем использовать, например, ssh router. Красиво и эстетично! Для организации такой красоты достаточно создать конфигурационный файл SSH (если у вас его еще нет).

user$ mkdir ~/.ssh
user$ cd ~/.ssh
user$ nano config

Примерно такого содержания

Host router
    HostName 192.168.0.1
    User user
    Port 22

Немного поясню:

  • Host — наш алиас к устройству, по которому будем вызывать
  • HostName — имя или IP адрес устройства
  • User — имя пользователя для подключения к устройству
  • Port — номер порта SSH, если переопределено

Каждый алиас необходимо прописать соответствующим блоком, например, можно создать алиасы к одному устройству с разными именами пользователей. Теперь можно вызывать ssh router. Параметры для подключения к устройству router считаются из конфигурационного файла, который мы только что создали. Замечательно! Далее настроим, чтоб при подключении удаленное устройство не спрашивало пароль. Для таких целей достаточно создать пару RSA ключей и один из них поместить на удаленное устройство. Перед генерацией ключа проверим необходимые параметры в настройках системы на стороне клиента/etc/ssh/ssh_config.

user$ sudo nano /etc/ssh/ssh_config

Ищем нужный нам параметр, должно быть так

..
IdentityFile ~/.ssh/id_rsa
..

Подготовку сделали, можно генерировать пару RSA ключей

user$ ssh-keygen -t rsa

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

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user.ssh/id_rsa): <span style="color: red; font-weight: bold;"><-Enter</span>
Enter passphrase (empty for no passphrase): <span style="color: red; font-weight: bold;"><-Enter</span>
Enter same passphrase again: <span style="color: red; font-weight: bold;"><-Enter</span>
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
b6:a0:23:59:54:79:67:44:0f:e8:24:6b:5b:01:be:9b user@desktop
The key's randomart image is:
+--[ RSA 2048]----+
|  o++=*o         |
| . .oo.oo        |
|  + o  o.        |
| . =             |
|  o +   S        |
|   = + o         |
|  E o .          |
|   . .           |
|                 |
+-----------------+

Пара RSA ключей готова, теперь публичный ключ необходимо передать на удаленное устройство. Но перед этой операцией проверим настройки на удаленном устройстве /etc/ssh/ssh_config.

Ищем нужный нам параметр, должно быть так

..
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
..

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

  • PermitRootLogin no — разрешается ли пользователю root логиниться по SSH. Лучше запретить, при необходимости права себе можно повысить, например, sudo.
  • PermitEmptyPasswords no — разрешить использовать пустые пароли. Даже не знаю для чего такую опцию оставили, если только для лабораторных отладок.
  • AllowUsers — указывает список пользователей, под которыми можно входить по SSH. Очень полезная опция! Если таковой нет в вашем конфиге — создайте ее. Формат AllowUsers user1 user2. В качестве логинов можно указывать user1@example.com (или user1@192.168.0.22), позволит логиниться пользователю user1 только с адреса example.com и 192.168.0.22
  • Port — указывает прослушиваемый демоном SSHD порт. По-умолчанию  — 22, для повышения безопасности лучше сменить его на что-то выходящее за пределы 1024 или еще лучше, за пределы 10000. К примеру поставить 55555, легко запоминается, а вот nmap’ом не просканишь.

Все готово. Передаем ключ на удаленное устройство.

user$ ssh-copy-id router

После успешного прохождения аутентификации ключ будет передан на удаленное устройство

Now try logging into the machine, with "ssh 'router'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Пробуем подключится

user$ ssh router

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

Маршрутизатор на Debian

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

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

  • операционная система — Debian
  • набор железа — подойдет любой старенький компьютер PIII и выше с двумя сетевыми картами;
  • данные на имеющуюся сеть (провайдер, поставьте свои данные) eth0:

IP адрес: 192.168.10.5
шлюз: 192.168.10.254
DNS: 192.168.10.1

  • данные на внутреннюю локальную сеть (куда будем раздавать интернет) eth1:

IP адрес: 10.0.60.254 (наш новый шлюз)

С параметрами определились, можно начинать устанавливать. Систему ставим минимальную, из задач на сервере нам понадобится только OpenSSH, остальное нет необходимости ставить. Первым делом настроим сетевые интерфейсы, чтоб не сидеть за косолью, а подключиться с рабочей машины и все делать удаленно. Настройки сетевых интерфейсов находятся в файле /etc/network/interfaces, приводим примерно в такой вид, напоминаю, данные необходимо подставить свои.

user$ sudo nano /etc/network/interfaces
# Сетевая петля                 
auto lo
iface lo inet loopback
# Основной интерфейс от провайдера
auto eth0 eth1
iface eth0 inet static
        address 192.168.10.5
        netmask 255.255.255.0
        network 192.168.10.0
        broadcast 192.168.10.255
        gateway 192.168.10.254
        dns-nameservers 192.168.10.1
        dns-search localdomain.lan
# Дополнительный интерфейс локальная сеть
iface eth1 inet static
        address 10.0.60.254
        netmask 255.255.255.0

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

user$ sudo /etc/init.d/networking restart

Немного отредактируем некоторые файлы, чтоб потом все заработало без лишних «танцов с бубнами»

user$ sudo nano /etc/resolv.conf
search localdomain.lan
nameserver 192.168.10.1

С этого файла кэширующий сервер DNS будет брать настройки. Осталось совсем немного, настроить NAT и DNS. Это только слышать страшно, а делать просто. Для этого установим волшебный пакет — dnsmasq. Dnsmasq является простым в настройке кеширующим DNS и DHCP(опционально) сервером. Разработан специально для применения в небольших, в том числе и домашних сетях, использующих NAT и соединяющихся с Интернет посредством модема, ADSL и прочих вариантов.

user$ sudo aptitude install dnsmasq

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

user$ sudo touch /usr/local/bin/set_firewall
user$ sudo nano /usr/local/bin/set_firewall
#!/bin/sh
#
# Константы
# Интерфейс смотрящий в интернет
INET_IFACE="eth0"
#
# Сброс всех правил
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#
# Включаем режим прозрачности
iptables -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
#
# Включаем режим пересылки пакетов
echo "1" > /proc/sys/net/ipv4/ip_forward
user$ sudo chmod +x /usr/local/bin/set_firewall
user$ sudo /usr/local/bin/set_firewall

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

user$ sudo touch /etc/network/if-up.d/firewall
user$ sudo nano /etc/network/if-up.d/firewall
#!/bin/sh
/usr/local/bin/set_firewall
user$ sudo chmod +x /etc/network/if-up.d/firewall

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

Генератор записей файла sources.list

Для тех, кто только что установил систему, возникает вопрос … почему так мало программ в комплекте. Отсутствуют кодеки для декодирования видео и аудио, нет красивых и удобных проигрывателей, о которых рассказывал товарищ. Дело в том, что по умолчанию Debian подключает только раздел «main» в sources.list. После загрузки системы в «/etc/apt/sources.list» необходимо вручную добавить необходимые разделы репозиторий Debian — «non-free» и «contrib», но в этом посте я покажу вам более простой способ создания файла sources.list.

Для этого создан генератор, который генерирует содержимое для файла /etc/apt/sources.list, примечательно, что генерируется не только необходимые записи, но и строки для получения GPG-ключей (подписи для репозитория). Пользоваться генератором очень просто:

  • Выбираем страну для которой будем генерировать sources.list;
  • Выбираем кодовое имя дистрибутива;
  • Отмечаем разделы базового дистрибутива (main, contrib, non-free), «Sources Repository» отмечайте тоже (может понадобится при сборке пакетов вручную).
  • Далее отмечаем, что хотим получать пакеты системы безопасности и приоритетные обновления;
  • В самом большом разделе «3rd Parties Repos» отметьте необходимые репозитории. Каждый имеет небольшое описание, ссылку на домашнюю страницу и подробное описание. Если этот раздел не открылся, обновите страницу и повторите выше указанные действия;

Нажимаем кнопку «Generate List» и остается только скопировать сгенерированный sources.list в ваш (/etc/apt/sources.list). Этот генератор также поддерживает Ubuntu. Безглючных обновлений 🙂 на сборках отличных от «stable».

Ускорение запуска программ в Debian

Утилита preload ставилась и проверялась на Debian 5 Lenny, на других версиях Linux, наверняка, присутствует. Чем же она примечательна? Только тем, что позволяет производить в полуавтоматическом режиме анализ часто запускаемые программы и осуществлять кэширование части их кода в памяти. В среднем ускорение составляет около 45-50%. Для её установки не потребуется много времени, тем более она ставиться и настраивается сразу. Итак, устанавливаем:

[user]$su
[root]#apt-get install preload

Собственно, вся установка. После установки утилита запустится и начнёт уже работать. Как и у многих программ у неё есть свой конфигурационный файл /etc/preload.conf при желании можно изменить режим работы утилиты. Более детальное описание и детали конфигурации можно получить на сайте разработчика Techthrob.

Использование Cisco VPN Client на Linux

Стоит у меня несколько Cisco и прокинуты по ним туннели GRE между организациями, объединенные в свою сегментную сеть. Когда работал на форточках, проблем с подключением к сети не было. VPN клиент для Cisco под форточки работает прекрасно, но в связи с полным отказом от Windows возник вопрос запуска сие чуда на Debian. Как оказалось, стандартные средства организации vpn, входящие в состав репозитария системы, не обеспечивают решения данной задачи. Вот такую задачу мы и будем сегодня решать.

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

user$ su
root# cd /usr/src
root# wget http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.02/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
--2009-06-09 04:06:33--  http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.02/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
Распознаётся projects.tuxx-home.at... 88.198.57.56
Устанавливается соединение с projects.tuxx-home.at|88.198.57.56|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 2050813 (2,0M) [application/x-gzip]
Сохраняется в каталог: `vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz'.
36% [=============>                         ] 746 577     21,9K/s  ОВП 56s

Клиент загружен (эта копия того, который предлагает Cisco у себя на сайте), теперь распакуем и запустим установку. Стоит заметить, что перед запуском установки стоит проверить, есть у вас исходные коды ядра системы. Если нет, то их необходимо установить. Проверить это можно следующим способом.

root# ls /usr/src
vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz

Как видите, здесь лежит только загруженный нами ранее vpn клиент Cisco. Необходимо установить исходники ядра, но перед установкой рекомендую обновить пакеты, дабы не наставить дырявого и устаревшего ПО.

root# aptitude update
root# aptitude upgrade

Систему обновили, теперь посмотрим, что у нас есть по ядрам в пакетах.

root#aptitude search linux-image
v   linux-image                                        -                                                             
v   linux-image-2.6                                    -                                                             
p   linux-image-2.6-486                                - Linux 2.6 image on x86                                      
i   linux-image-2.6-686                                - Linux 2.6 image on PPro/Celeron/PII/PIII/P4                 
p   linux-image-2.6-amd64                              - Linux 2.6 image on AMD64                                    
p   linux-image-2.6-k7                                 - Linux 2.6 image on AMD K7 - transition package              
p   linux-image-2.6.26-1-486                           - Linux 2.6.26 image on x86                                   
i A linux-image-2.6.26-1-686                           - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4              
p   linux-image-2.6.26-1-686-bigmem                    - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4              
p   linux-image-2.6.26-1-amd64                         - Linux 2.6.26 image on AMD64                                 
p   linux-image-2.6.26-1-openvz-686                    - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ suppor
p   linux-image-2.6.26-1-vserver-686                   - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer
p   linux-image-2.6.26-1-vserver-686-bigmem            - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer
p   linux-image-2.6.26-1-xen-686                       - Linux 2.6.26 image on i686, oldstyle Xen support            
p   linux-image-2.6.26-2-486                           - Linux 2.6.26 image on x86                                   
p   linux-image-2.6.26-2-686                           - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
p   linux-image-2.6.26-2-686-bigmem                    - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4              
p   linux-image-2.6.26-2-amd64                         - Linux 2.6.26 image on AMD64                                 
p   linux-image-2.6.26-2-openvz-686                    - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, OpenVZ suppor
p   linux-image-2.6.26-2-vserver-686                   - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer
p   linux-image-2.6.26-2-vserver-686-bigmem            - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer
p   linux-image-2.6.26-2-xen-686                       - Linux 2.6.26 image on i686, oldstyle Xen support            
p   linux-image-686                                    - Linux image on PPro/Celeron/PII/PIII/P4

Имеется новое ядро. Вот его и поставим. Напомню, что мы работаем со стабильной веткой Debian, если вы ставите эксперименты на боевой машине (сервере), подумайте хорошо —  сделайте копию. Ставим новое ядро и исходники к нему. Необходимые дополнительные библиотеки aptitude подхватит и установит сам. На всякий случай проверьте установлена ли утилита сборки проектов make. У меня ее почему-то не оказалось.

root# aptitude install linux-image-2.6.26-2-686 linux-headers-2.6.26-2-686 make

Проверяем содержимое …

root# ls -l /usr/src
итого 2020
drwxr-xr-x  4 root root    4096 Июн  9 06:30 linux-headers-2.6.26-2-686
drwxr-xr-x 18 root root    4096 Июн  9 06:30 linux-headers-2.6.26-2-common
drwxr-xr-x  3 root root    4096 Июн  9 06:30 linux-kbuild-2.6.26
-rw-r--r--  1 root src  2050813 Май 20 19:16 vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz

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

root# reboot

Рестарт системы сделан. У нас имеется архив с клиентом, надо его распаковать и запустить сборку. Приступаем.

user$ su
root# cd usr/src
root# tar xzvf vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
root# cd vpnclient

Далее идут вопросы установщика и сборщика, отвечаем утвердительно.

root# ./vpn_install
Cisco Systems VPN Client Version 4.8.02 (0030) Linux Installer
Copyright (C) 1998-2006 Cisco Systems, Inc. All Rights Reserved.
By installing this product you agree that you have read the
license.txt file (The VPN Client license) and will comply with
its terms.
Directory where binaries will be installed [/usr/local/bin]
Automatically start the VPN service at boot time [yes]
In order to build the VPN kernel module, you must have the
kernel headers for the version of the kernel you are running.
Directory containing linux kernel source code [/lib/modules/2.6.26-2-686/build]
* Binaries will be installed in "/usr/local/bin".
* Modules will be installed in "/lib/modules/2.6.26-2-686/CiscoVPN".
* The VPN service will be started AUTOMATICALLY at boot time.
* Kernel source from "/lib/modules/2.6.26-2-686/build" will be used to build the module.
Is the above correct [y]
Making module
make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/usr/src/vpnclient modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
  CC [M]  /usr/src/vpnclient/linuxcniapi.o
  CC [M]  /usr/src/vpnclient/frag.o
  CC [M]  /usr/src/vpnclient/IPSecDrvOS_linux.o
  CC [M]  /usr/src/vpnclient/interceptor.o
  CC [M]  /usr/src/vpnclient/linuxkernelapi.o
  LD [M]  /usr/src/vpnclient/cisco_ipsec.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/src/vpnclient/cisco_ipsec.mod.o
  LD [M]  /usr/src/vpnclient/cisco_ipsec.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
Create module directory "/lib/modules/2.6.26-2-686/CiscoVPN".
Copying module to directory "/lib/modules/2.6.26-2-686/CiscoVPN".
Already have group 'bin'
Creating start/stop script "/etc/init.d/vpnclient_init".
    /etc/init.d/vpnclient_init
Enabling start/stop script for run level 3,4 and 5.
Creating global config /etc/opt/cisco-vpnclient
Installing license.txt (VPN Client license) in "/opt/cisco-vpnclient/":
    /opt/cisco-vpnclient/license.txt
Installing bundled user profiles in "/etc/opt/cisco-vpnclient/Profiles/":
* New Profiles     : sample
Copying binaries to directory "/opt/cisco-vpnclient/bin".
Adding symlinks to "/usr/local/bin".
    /opt/cisco-vpnclient/bin/vpnclient
    /opt/cisco-vpnclient/bin/cisco_cert_mgr
    /opt/cisco-vpnclient/bin/ipseclog
Copying setuid binaries to directory "/opt/cisco-vpnclient/bin".
    /opt/cisco-vpnclient/bin/cvpnd
Copying libraries to directory "/opt/cisco-vpnclient/lib".
    /opt/cisco-vpnclient/lib/libvpnapi.so
Copying header files to directory "/opt/cisco-vpnclient/include".
    /opt/cisco-vpnclient/include/vpnapi.h
Setting permissions.
    /opt/cisco-vpnclient/bin/cvpnd (setuid root)
    /opt/cisco-vpnclient (group bin readable)
    /etc/opt/cisco-vpnclient (group bin readable)
    /etc/opt/cisco-vpnclient/Profiles (group bin readable)
    /etc/opt/cisco-vpnclient/Certificates (group bin readable)
* You may wish to change these permissions to restrict access to root.
* You must run "/etc/init.d/vpnclient_init start" before using the client.
* This script will be run AUTOMATICALLY every time you reboot your computer.

Клиент собрался и установлена поддержка в ядро необходимых протоколов для работы VPN клиента Cisco. Далее необходимо создать конфигурацию и инициализировать клиента. Инициализация требуется один раз, если вы после этого перезапустите систему, то клиент инициализируется сам и при последующих запусках тоже. Если этого не происходит (как в моем случае), то можно произвести инициализацию вручную. Пока не стал разбираться, почему автомат не работает.

root# /etc/init.d/vpnclient_init start

Теперь готовим файл конфигурации:

root# cd /etc/CiscoSystemsVPNClient/Profiles
root# cp sample.pcf имя_нового_профиля.pcf

Если по каким-либо причинам профиль примера не создался, то вот его примерное содержимое:

root# cat sample.pcf
[main]
Description=sample user profile
Host=10.212.20.52
AuthType=1
GroupName=monkeys
EnableISPConnect=0
ISPConnectType=0
ISPConnect=
ISPCommand=
Username=chimchim
SaveUserPassword=0
EnableBackup=0
BackupServer=
EnableNat=1
CertStore=0
CertName=
CertPath=
CertSubjectName=
CertSerialHash=00000000000000000000000000000000
DHGroup=2
ForceKeepAlives=0

Собствено редактирование профиля сводится к некоторым изменениям (чтоб их не вводить вручном режиме постоянно). Ниже выдержка, что необходимо поправить:

root# pwd
/etc/CiscoSystemsVPNClient/Profiles
root# mcedit имя_нового_профиля.pcf

строки для правки:

Description=Краткое описание вашего профиля

Host=IP_адрес_вашей_Cisco

GroupName=Имя_вашей_группы_в_домене

Username=Ваше_имя_в_домене_NT

NTDomain=Имя_вашего_домена

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

root# # vpnclient connect имя_вашего_профиля
Cisco Systems VPN Client Version 4.8.01 (0640)
Copyright (C) 1998-2007 Cisco Systems, Inc. All Rights Reserved.
Client Type(s): Linux
Running on: Linux 2.6.26-2-686 #1 SMP Thu May 28 15:39:35 UTC 2009 i686
Config file directory: /etc/opt/cisco-vpnclient
Initializing the VPN connection.
Contacting the gateway at <span style="color: red; font-weight: bold;">IP_адрес_вашей_Cisco</span>
User Authentication for <span style="color: red; font-weight: bold;">имя_вашего_профиля</span>...
The server has requested the following information to complete the user authentication:
Username [<span style="color: red; font-weight: bold;">Ваше_имя_в_домене_NT</span>]:
Password []:
Authenticating user.
Negotiating security policies.
Securing communication channel.
Your VPN connection is secure.
VPN tunnel information.
Client address: <span style="color: red; font-weight: bold;">Ваш_локальный_адрес</span>
Server address: <span style="color: red; font-weight: bold;">IP_адрес_вашей_Cisco</span>
Encryption: 168-bit 3-DES
Authentication: HMAC-SHA
IP Compression: None
NAT passthrough is active on port UDP 4500
Local LAN Access is disabled

Подключение успешно выполнено. Как видим туннель на удаленную сеть открыт и готов к транспорту пакетов. Отключение можно выполнить банальным сочетанием Ctrl+C или в другой консоли вводом команды разрыва соединения.

root# vpnclient disconnect

В другой консоли можно проверить ping любого адреса в удаленной сети. Можете запускать RDP, VNC или другую систему управления серверами или компьютерами. Адреса указывайте такие, как будто вы находитесь в домашней сети. Все это можно оформить аккуратней, но как всегда лень. Зато у вас будет желание сделать все красивее и качественней. Удачи с экспериментами.

http://www.qdesnic.ru/page/cisco_vpnclient.html

Использование NFS

Файловая система NFS (Network File System) позволяет предоставлять файловые ресурсы одних компьютеров в сети для других. Файловая система NFS позволяет монтировать сетевые дисковые ресурсы с помощью обычной команды «mount», поэтому с точки зрения пользователя сетевые ресурсы NFS не отличаются от локальных дисковых ресурсов. Для настройки нам понадобится как серверная, так и клиентская часть файловой системы NFS.

Серверная часть

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

user$ su
root# aptitude update
root# aptitude safe-upgrade
root# aptitude install nfs-kernel-server

Все зависимости подтянутся автоматически. После установки основного пакета, необходимо определить какие именно файловые ресурсы будут предоставлены пользователям. Настройки доступа определяются в файле «/etc/exports».

root# mcedit /etc/exports

Каждый разделяемый ресурс пишется с новой строки, ниже пример разделяемого ресурса

...
/home/user  192.168.1.0/24(ro, async, no_subtree_check)
...

Некоторое пояснения формата строки:

  • /home/user — предоставляемый ресурс другим пользователям в сети, директория не обязательно должна находиться в каталоге /home предложено как пример;
  • 192.168.1.0/24 — адрес сети с префиксом или 192.168.1.0/255.255.255.0 так же может быть указан конкретный IP адрес (например 10.0.0.145) или имя узла с применением шаблонов (например *.comp?.mynet.lan — разрешено использование ресурса всех узлов из поддоменовcomp1, comp2, compd и т.д. домена mynet.lan);
  • ro — указывает, что ресурс предоставляется только для чтения. Если необходимо предоставить режим чтение/запись необходимо указать — rw;
  • async — разрешает отвечать клиенту до того, как будут завершены предыдущие операции записи (в оригинальном протоколе NFS это запрещено), что повышает быстродействие;
  • no_subtree_check — не осуществлять проверку вложенных каталогов;
  • no_root_squash – по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать.

Когда будут завершены определения всех ресурсов — сохраняем файл «/etc/exports» и перезапускаем службу NFS.

root# /etc/init.d/<span id="fullpost">nfs-kernel-server</span> restart

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

root# showmount -e

Если вы только добавляли ресурсы в файл «/etc/exports», то их можно активировать без перезапуска службы NFS. Команда полезна при длительных операциях чтения/запись.

root# exportfs -a

На этом настройку серверной части файловой системы NFS можно завершить и приступить к настройке клиентской части.

Клиентская часть

Устанавливаем клиента файловой системы NFS

user$ su
root# aptitude install portmap nfs-common

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

Для ручного монтирования необходимо определить точку монтирования, либо использовать уже имеющуюся, для наглядности создадим в домашнем каталоге папку «testmount»

user$ mkdir ~testmount

Теперь можно приступать к непосредственному монтированию файловой системы NFS.

user$ su
root# mount 10.0.0.10:/home/user /home/user/testmount

Файловая система смонтирована, стоит прокомментировать последнюю команду:

  • mount — команда монтирования;
  • 10.0.0.10:/home/user — здесь 10.0.0.10 адрес удаленного узла (может быть имя см. выше),:/home/user — ресурс, который предоставляет сервер (вы должны его знать);
  • /home/user/testmount — точка монтирования, созданная нами;

Для автоматического монтирования файловых систем NFS можно их прописать в файл «/etc/fstab», тогда во время загрузки системы они будут смонтированы автоматически.

root# mcedit /etc/fstab

Добавляем запись с нашими настройками

..
10.0.0.10:/home/user /home/user/testmount nfs intr,soft
..

Напоминаю! Что после всех добавленных строк в файл «/etc/fstab» последняя строка должна быть пустой, иначе можно схватить очень неприятный глюк в виде не загружаемой системы (когда его поправят не ясно). Рассмотрим опции монтирования.

  • 10.0.0.10:/home/user — монтируемый ресурс, детально см. выше;
  • /home/user/testmount — точка монтирования;
  • nfs — тип монтируемой файловой системы, в нашем случае NFS;
  • intr — позволяет прерывать процесс, работающий с файловой системой;
  • soft — спасает от безнадежного зависания, если удаленный ресурс не доступен;

Теперь при следующем запуске системы файловые системы NFS смонтируются автоматически, а если они будут не доступны на момент монтирования, то загрузка продолжится с пропуском монтирования. По требованию их можно будет смонтировать вручную или вызвать команду монтирования файловых устройств описанных в «/etc/fstab»

root# mount - a

Консольный менеджер screen

Тема этой заметки будет полезна не только начинающим системным администраторам, работающим в консоли, но и будет познавательно рядовым пользователям, которые знают о существовании консоли и иногда, 🙂 ее даже запускают. Речь пойдет о замечательном и очень простом в использовании консольном менеджере окон GNU Screen. Возможности Screen впечатляют и позволяют эффективно работать в консоли. Основными возможностями Screen можно отметить следующее: создание и управление консольными окнами в пределах одной сессии, Screen позволяет быстро переключаться между окнами, сохранять состояние сессии и позднее подключаться к ней, также предоставлять доступ к этой сессии другим пользователям, обмениваться содержимым окон посредством copy/paste.

Одновременно в окне терминала может находится одно текстовое окно Screen, либо несколько (в этом случае окно терминала будет поделено на регионы). Однако, самая «вкусная» возможность Screen заключается в поддержке сессии. Сессия сохраняется на стороне сервера, поэтому не важно сессия была разорвана в результате сбоя или прервана сознательно, в любой момент времени и с любого устройства можно подключится к имеющейся рабочей сессии с сохранение состояния при отключении, т.е. все консольные окна восстановятся, а приложения запущенные в этих окнах продолжают работать не прерываясь. Очень удобно когда открытую сессию, например на работе, можно продолжить дома.

Перед запуском проверим установлен ли screen в системе

user$ which screen

Если в ответ получено примерно такое:

/usr/bin/screen

Значит screen установлен в системе и можно продолжать, иначе необходимо установить обычным для вас способом из репозитария системы. Можно и так …

user$ sudo apt-get install screen

Запускаем .. появится информация о лицензии и версии, нажимаем «Пробел». Этот вывод можно отключить в конфигурационном файле, далее мы это сделаем. Внешне ничего не изменилось. Секрет в том, что screen передает активному окну все команды оставляя для себя только комбинацию Ctrl+a (ее тоже можно переопределить). Все команды screen состоят из комбинации, по-умолчанию Ctrl+a и непосредственно клавиши. Почти у каждой команды имеется текстовый аналог. Для простоты буду использовать следующее сокращение:

  • [Определенная комбинация]+[клавиша] {текстовая команда} — Описание команды
  • [Ctrl+a]+[:] {colon} — Вывести приглашение для ввода текстовых команд в интерактивном режиме;

Управление окнами

У нас имеется уже одно активное окно, оно создается при запуске screen и ему автоматически присваивается номер 0, создадим еще одно:

  • [Ctrl+a]+[c] {screen} — Создать новое окно и присваивает ему следующий порядковый номер;

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

  • [Ctrl+a]+[w] {windows} — Выводит список номеров и заголовков всех окон в нижней строчке экрана;
  • [Ctrl+a]+[«] {windowlist} — Выводит интерактивное меню номеров и заголовков всех окон из которого можно выбрать окошко для переключения;
  • [Ctrl+a]+[Номер окна] {select} — Выбор окна по номеру. Например, команда Ctrl+a и 2 делает текущим окно с номером 2;
  • [Ctrl+a]+[N] {number} — Показать номер и заголовок текущего окна;
  • [Ctrl+a]+[A] {title} — Установить заголовок текущего окна;
  • [Ctrl+a]+[k] {kill} — Принудительное закрытие окна, например, в случае если приложение не удается закрыть обычным способом, равносильно разрыву сессии;

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

  • [Ctrl+a]+[S] {split} — Разделить текущее окно, или регион на два новых региона. При этом размеры всех регионов меняются для получения дополнительного пространства на экране и в новом регионе отображается пустое окно;
  • [Ctrl+a]+[Tab] {focus} — Переместить текущий фокус отображения на регион ниже, или на верхний регион если текущим является самый нижний регион;
  • [Ctrl+a]+[Q] {only} — Закрыть все регионы кроме текущего;
  • [Ctrl+a]+[X] {remove} — Закрыть текущий регион;

После разделения окна на регионы в одном регионе остается активное окно, а появившийся новый регион пустой. В новом регионе можно переключится на другое окно или выполнить иные действия. В случае, если вы закрываете какое-то окно, нумерация окон не меняется, новые создаваемые окна занимают пропущенные номера. Например, имелась последовательность открытых окон — [0,1,2,3,4,5], вы закрыли 1 и 4 — нумерация будет следующей [0,2,3,5]. При создании нового окна ему будет присвоен номер 1, а следующему 4. Если вы закрываете все окна screen завершает свою работы и выводит сообщение — [screen is terminating].

Работа с текстом

При работе в консоли часто возникает задача скопировать часть кода или длинную shell команду, в этом может помочь screen. У него в запасе много разных возможностей и такие как copy/paste между окнами не исключение.

 

  • [Ctrl+a]+[[] {copy} — Войти в режим копирования;
  • [Ctrl+a]+[]] {paste} — Вставить текст из регистра обмена;

В режиме copy/paste screen запускает встроенный редактор, который напоминает vi.

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

Консольные сессии

Поддержка сессий одна из самых популярных возможностей screen. Рассмотрим банальную ситуацию: вы, находясь в точке A, подключаетесь к удаленному серверу запускаете некоторое количество задач в разных окнах, закрываете соединение и спокойно занимаетесь своими делами. Через некоторое количество времени (возможно несколько дней), подключаетесь к этому же серверу но уже с точки Б (можно и с точки А, Д и т.д. откуда угодно) восстанавливаете все окна с результатами выполненных задач. Думаете такое не возможно? Как раз консольные сессии screen предназначены для таких возможностей. Они позволяют отключить от терминала текущую сессию со всеми созданными окнами и запущенными в этих окнах приложениями, а через некоторое время подключится к этой сессии с восстановлением состояния окон после отключении. При этом все запущенные в окнах приложения продолжают работать и используют для вывода свои окна. Плюс ко всему таких сессий может быть несколько.

  • [Ctrl+a]+[d] {detach} — Отсоединить консольную сессию и оставить ее запущенной в фоновом режиме;
  • [Ctrl+a]+[D D] {pow_detach} — Отсоединить консольную сессию, оставить ее запущенной в фоновом режиме и послать родительскому процессу screen сигнал HANGUP. При запуске screen из удаленного терминала это означает отсоединение screen и затем закрытие соединения;
  • [Ctrl+a]+[z] {suspend} — Отсоединить консольную сессию и оставить ее запущенной как фоновый процесс родительской командной оболочки. В этом случае для восстановления сессии кроме команд описанных ниже могут быть использованы стандартные команды управления фоновыми процессами командной оболочки;
  • [Ctrl+a]+[Ctrl +] {quit} — Закрыть все окна сессии и выйти из screen. Надо заметить, что многие дистрибутивы переопределяют клавишную комбинацию для этой команды, но текстовую команду можно использовать в любом случае;

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

user$ screen -ls
There are screens on:
    13695.pts-1.user-desktop    (30.08.2010 09:41:30)    (Detached)
    13051.pts-1.user-desktop    (01.09.2010 12:40:51)    (Detached)
    18595.pts-1.user-desktop    (01.09.2010 11:15:49)    (Detached)
3 Sockets in /var/run/screen/S-user.

Здесь видно, что открыто 3 сессии, причем, у каждой есть информация об имени, дате, времени и состоянии. Как отмечалось ранее, к открытой сессии можно подключиться в любое время и даже через несколько дней. Для подключения к имеющейся сессии существует ключ -r. Подключимся к сессии с именем 13051.pts-1.user-desktop.

user$ screen -r 13051.pts-1.user-desktop

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

user$ screen -x 13051.pts-1.user-desktop

Всего делов то. Есть конечно еще много всяких параметров работы с screen, но в своей работа мне описанного выше хватает, для тех кто хочет узнать больше существует волшебная команда 🙂 man screen или почитать перевод тут.

Конфигурация

Параметры заданные по-умолчанию к любой программе можно изменить под свои требования и предпочтения, утилита screen не исключение. Как и полагается для *nix приложения у нее имеется конфигурационный файл. Он находится в домашней директории пользователя — ~/.screenrc, если отсутствует это означает, что настройка не производилась, просто создайте его и опишите все необходимые настройки сами, руководствуясь документацией или 🙂 знаниями. Приведу пример простого конфигурационного файла, все подробности в #комментариях.

user$ cat ~/.screenrc
# Отключаем приветствие при запуске
startup_message off
# Перейти в домашний директорий и создать окно с именем Work
chdir
screen -t Work
# Перейти в директорий /etc и создать окно с именем Config
chdir /etc
screen -t Config
# Перейти в директорий /etc и создать окно с именем Logs
chdir /var/log
screen -t Logs
# Активировать окно с номером 0 после старта
select 0
# Включаем utf8 полезно на некоторых терминалах
defutf8 on
# Использовать визуальный сигнал (мигание экрана) вместо писка динамика
vbell on
# Активировать возможность прокрутки в xterm (и других эмуляторах терминала)
termcapinfo xterm* ti@:te@
# Размер буфера прокрутки
defscrollback 1000
# Производить отключение сессии при разрыве связи с терминалом
autodetach on
# Строка состояния
hardstatus alwayslastline "%{+b wk} %c $LOGNAME@%H %=[ %w ] "
# По клавише <Esc> создать окно с именем root и запустить в нем команду su
# по аналогии с этой командой можно создать команды для запуска приложений
# в разных окнах
bind \033 screen -ln -t root 9 su

Пожалуй для минимального конфигурационного файла этого достаточно. Теперь при запуске у вас будет создано три окна с именами Work, Config и Logs и появится строка статуса.

<span style="font-weight: bold;">15:27 user@hostname             [ 0* Work 1 Config 2 Logs ]</span>

Слева будут располагаться текущее время и имя_пользователя@имя_хоста, а справа — имена всех открытых окон в квадратных скобках. При этом текущее активное окно будет помечено звездочкой. Для задания строки статуса screen использует специальные символы, похожие на те, что применяются для формирования приглашения командного интерпретатора. Разукрасить можете по своему усмотрению прочитав руководство.