Март 9

Linux Truecrypt command line.

 

Загрузка с сайта

Несмотря на то, что я нашёл частный репозиторий с deb-пакетом truecrypt’а, предпочитаю использовать версию с сайта. Например, текущая, на момент написания статьи, консольная версия truecrypt’а:
# wget http://www.truecrypt.org/download/truecrypt-7.0a-linux-console-x64.tar.gz
Распаковал архив командой:
# tar zxvf truecrypt-7.0a-linux-console-x64.tar.gz
На выходе получил исполняемый файл truecrypt-7.0a-setup-console-x64.

Установка Truecrypt

Для работы truecrypt’а надо установить дополнительные пакеты:
# aptitude install libfuse2 fuse-utils dmsetup
После установки запускаю, ранее извлечённый из архива, файл truecrypt-7.0a-setup-console-x64:
# ./truecrypt-7.0a-setup-console-x64
TrueCrypt 7.0a Setup
____________________
Installation options:
1) Install truecrypt_7.0a_console_amd64.tar.gz
2) Extract package file truecrypt_7.0a_console_amd64.tar.gz and place it to /tmp
To select, enter 1 or 2: 1
Before you can use, extract, or install TrueCrypt, you must accept the
terms of the TrueCrypt License.
Press Enter to display the license terms...
Читаю лицензионное соглашение до самого конца и набираю yes
Requirements for Running TrueCrypt:
-----------------------------------
- FUSE library and tools
- device mapper tools
Press Enter to continue...
Uninstalling TrueCrypt:
-----------------------
To uninstall TrueCrypt, please run 'truecrypt-uninstall.sh'.
Installing package...
usr/bin/truecrypt
usr/bin/truecrypt-uninstall.sh
usr/share/truecrypt/doc/License.txt
usr/share/truecrypt/doc/TrueCrypt User Guide.pdf
Press Enter to exit...

Шифрование раздела и создание контейнера

Шифрование раздела и создание контейнера мало чем отличаются. В первом случае, как аргумент команды, указывается раздел, а во втором случае – файл. При шифровании раздела все данные на нём уничтожаются. Раздел не надо форматировать перед шифрованием.
Приведу, как пример, шифрование раздела.
# truecrypt -c /dev/sda8
Volume type:
1) Normal
2) Hidden
Select [1]: 1
На этом этапе выбирается тип создаваемого тома. Normal — обычный, полностью зашифрованный, том. Hidden — незаметный, скрытый том, внутри реального отформатированного раздела. Для реального раздела-донора желательно выбирать раздел с файловой системой FAT32, чтобы внутрь раздела поместилось больше информации и уменьшилась вероятность повреждения скрытого тома.
Encryption algorithm:

1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:
Алгоритм шифрования AES самый быстрый и его, вероятно, лучше выбрать для томов, с которых будут запускаться программы. Для хранения информации можно выбрать любой алгоритм из представленного списка.
Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:
Просто нажимаю Enter. Первая хэш-функция в самый раз.
Filesystem:
1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4
Select [2]: 5
Файловая система для нового тома. Выбрал ext4.
Enter password:
Re-enter password:
Ввёл (и повторил вввод) достаточно длинный пароль: K.,k.nt,z?j.,rfljhjufz?Rjulf?vtyzgjldtxhj;blfz. Хочу заметить, что лучший пароль это не строфы из стрихотворений, а действительно случайный набор символов. Или псевдослучайный: Lxq-weqp=9Mhft9E&ad_W[\8^»,2nJqo-b$kQ[Hz[‘qV.
Enter keyfile path [none]:
Хорошая мысль создать ключевой файл на флэшке и указать его при шифровании. Главное в дальнейшем его не потерять. Но можно в качестве ключевого файла использовать простой текстовый файл с широко известным текстом. Например:
Статья 23
1. Каждый имеет право на неприкосновенность частной жизни, личную и семейную тайну, защиту своей чести и доброго имени.
2. Каждый имеет право на тайну переписки, телефонных переговоров, почтовых, телеграфных и иных сообщений. Ограничение этого права допускается только на основании судебного решения.
Статья 24
1. Сбор, хранение, использование и распространение информации о частной жизни лица без его согласия не допускаются.
2. Органы государственной власти и органы местного самоуправления, их должностные лица обязаны обеспечить каждому возможность ознакомления с документами и материалами, непосредственно затрагивающими его права и свободы, если иное не предусмотрено законом.
Статья 25
Жилище неприкосновенно. Никто не вправе проникать в жилище против воли проживающих в нем лиц иначе как в случаях, установленных федеральным законом, или на основании судебного решения.
Конечно лучше выбрать статьи из конституции другой страны или использовать другие тексты. Иначе можно обнаружить при потере ключевого файла и попытки его восстановления, что конституция уже изменилась и зашифрованный том не открывается.
Please type at least 320 randomly chosen characters and then press Enter:
(тут беспорядочно нажимаю на любые буквенные клавиши и иногда нажимаю Enter, чтобы увидеть сколько ещё раз надо долбить по клавишам, чтобы выполнить в сумме 320 случайных нажатий)
Characters remaining: 307
Characters remaining: 299
Done: 6,166% Speed: 81 MB/s Left: 5 minutes
The TrueCrypt volume has been successfully created.
Процесс завершился и зашифрованный том создан.

Монтирование зашифрованного тома

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

# truecrypt /dev/sda8 /mnt

Смена пароля на зашифрованном томе

# truecrypt --new-password=new1pass2word3 -C /dev/sdb3
Enter password: (вводим существующий пароль)
Enter new keyfile [none]:
Please type at least 320 randomly chosen characters and then press Enter:
(долбим по клавиатуре 320 раз и нажимаем Enter)
(ждём какое-то время)
Password and/or keyfile(s) successfully changed.

Пароль успешно сменили.

Добавление ключевого файла к зашифрованному тому

# truecrypt --new-keyfiles=/media/blabla.txt -C /dev/sdb3
Enter password: (вводим действующий пароль на том)
Enter new password: (вводим новый пароль на том или нажимаем Enter для отключения пароля)

Please type at least 320 randomly chosen characters and then press Enter:
(жмём триста двадцать раз по клавишам на клавиатуре)

Password and/or keyfile(s) successfully changed.
Теперь для монтирования зашифрованного с помощью ключевого файла тома с пустым паролем необходимо вводить команду:
# truecrypt --keyfiles=/media/blabla.txt --password="" --protect-hidden=no /dev/sdb3 /media/1
Если пароль не пустой и необходимо его указать прямо в командной строке, то записываем его вместо кавычек.
Если пароль не пустой, то опцию —password можно не писать и ввести пароль в ответ на запрос.

Можно ли понять, что раздел или файл зашифрован?

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

Ещё раз отвечаю, что в этой фразе заключён другой смысл. Тут ясно написано, что увидев раздел или файл со случайными данными нельзя сказать, что он точно зашифрован с применением программы Truecrypt. Просто читать надо до конца фразы.

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

Если очень упростить, то можно сказать, что случайные данные представляют собой набор повторяющихся  последовательностей символов, огрызков читаемых данных от каких-то файлов, пустые промежутки. Слишком случайные данные — это набор неповторяющихся символов. Это шум, хаос, всплеск энтропии. Сжать такие «слишком случайные» данные каким-либо архиватором не представляется возможным. Ни один обычный раздел на винчестере не будет содержать в себе кластеры, полностью забитые слишком случайными данными.

Некоторое подобие шифрованных файлов — архивы. Но у архивов есть заголовки, по которым можно идентифицировать программу-архиватор, при помощи которой был создан архив.

Март 9

How to save the session is active at break SSH connection

1

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

 

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

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

  1. При разрыве соединения, сессия не прерывается, а продолжает выполняться в фоновом режиме.
  2. Если вам нужно запустить несколько терминальных сессий на сервере —  запустите столько сессий, сколько вам заблагорассудится. Программа позволяет легко переключаться между сессиями, запускать новые и удалять ненужные.
  3. Каждую сессию вы можете назвать своим именем, после чего в дальнейшем, при работе, вам будет легче переключаться между окнами.

Установка screen

Если вы работаете с Ubuntu, или Debian сервером, выполните команду:

1
sudo apt-get install screen

После установки, вы можете запустить программу набрав в консоли screen.

Полезные комманды

Комманды внутри самой программы:

  • Ctrl_A и Ctrl_D: Закрыть программу с сохранением запущенных в ней сессий.
  • Ctrl_A и C — Создать новое окно внутри программы
  • Ctrl_A и A Изменить заголовок окна
  • Ctrl_A и » Отобразить список запущенных сессий

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

  • Подключиться к работающей программе: screen -r
  • Подключиться к работающей программе, или запустит новую, если нет ни одного запущенного экземпляра программы: screen -D -r

Помимо этих команд, в программе имеется много других, список их вы можете посмотерть набрав Ctrl_A и ?

2

Февраль 7

eJabberd with authorization of the GOSa

Ставим ejabberd на сервер, в нашем случае на почтовый сервер с IredMail

#apt-get install ejabberd

далее поправляем конфиг под наши нужды:

#mcedit /etc/ejabberd/ejabberd.cfg

[...]
%% Admin user вместо www указываем логин пользователя который будет админом, если их несколько строку дублируем несколько раз. Вместо example.com имя вашего домена.
{acl, admin, {user, "www", "example.com"}}.

%% Hostname (имя хоста=имени домена выше
{hosts, ["example.com"]}. 

[...]

%%{auth_method, internal}. 

[...] Add below at the botton.
%%% Authenticate against LDAP.
{auth_method, ldap}.
{ldap_servers, ["127.0.0.1"]}.
%%% {ldap_encrypt, tls}.
{ldap_port, 389}.
%%Параметры авторизации ниже "слизываем c настроек постфикса или довекота к примеру)
{ldap_base, "o=domains,dc=example,dc=com"}. 
{ldap_rootdn, "cn=vmail,dc=example,dc=com"}. 
{ldap_password, "InYTi8qGjamTb6Me2ESwbb6rxQUs5y"}. 
%%% Enable both normal mail user and mail admin.
{ldap_filter, "(&(objectClass=mailUser)(accountStatus=active)(enabledService=jabber))"}.
{ldap_uids, [{"mail", "%u@%d"}]}.

Далее запускаем жабу с нашим конфигом и проверяем стартанула ли она, если нет ищем ошибки в конфиге, лог в помощь.
# /etc/init.d/ejabberd start
Starting jabber server: ejabberd.
# ejabberdctl status
Node ejabberd@u910 is started. Status: started
ejabberd is running

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

#mcedit /etc/default/iptables

# ejabberd
-A INPUT -p tcp —dport 5222 -j ACCEPT
-A INPUT -p tcp —dport 5223 -j ACCEPT
-A INPUT -p tcp —dport 5280 -j ACCEPT

Для желающих использовать несколько серверов не забываем добавить порт 5269.

Перезапускаем фаервол

/etc/init.d/iptables restart
и идём в админку http://айпи серва:5280/admin под логином пароля админа указаного в конфиге (естественно он должен быть в лдапе) логин в виде почтового адреса. Дальше всё интуитивно.
Январь 13

LDAP filters

Основной формат

( filter )

Фильтры всегда заключаются в круглые скобки.

Простые фильтры с одним выражением

attr=value # соответствие (может содержать поисковые шаблоны)
attr~=value # примерное соответствие
attr>=value # больше чем
attr<=value # меньше чем
ИЛИ
objectclass=class

Примечание: Тип проводимого сравнения, например с учётом или без учёта регистра символов, определяется свойствами используемого в сравнении атрибута и формой поиска (может быть EQUALITYORDERING или SUBSTR). В некоторых случаях используемая при поиске строка называется substring, это верно лишь в том случае, если она содержит один или несколько поисковых шаблоновОпределение атрибута.

В приведённом выше листинге:

соответствие (=) считается истинным, если найдено либо совпадение EQUALITY (без поисковых шаблонов в value), либо совпадение SUBSTR (при наличии одного или нескольких поисковых шаблонов в value).

примерное соответствие (~=) считается истинным, если найдено совпадение с помощью одного из двух алгоритмов поиска ‘созвучных слов’. Требуется индекс типа approx.

больше чем (>=) считается истинным, когда при лексикографическом сравнении value с содержимым указанного атрибута последнее будет лексикографически равно или больше (то есть возвращаются все строки, в которых значение указанного атрибута лексикографически равно или больше value). Данная форма поиска работает только в том случае, если у атрибута есть правило ORDERING, то есть с очень немногими атрибутами.

меньше чем (<=) считается истинным, когда при лексикографическом сравнении value с содержимым указанного атрибута последнее будет лексикографически равно или меньше (то есть возвращаются все строки, в которых значение указанного атрибута лексикографически равно или меньше value). Данная форма поиска работает только в том случае, если у атрибута есть правило ORDERING, то есть с очень немногими атрибутами.

Поисковые шаблоны (wildcard)

Поисковый шаблон * может использоваться отдельно (самостоятельно) как индикатор наличия (то есть в данной записи существует такой атрибут, или в данной записи существует такой объектный класс), либо как классическое итерационное значение, в этом случае его присутствие означает «в позиции * могут находиться 0 или более любых символов». В форме objectclass=obj поисковые шаблоны могут использоваться только в качестве индикатора наличия.

Примеры простых поисковых выражений

(mail=*) # возвращает все записи, у которых есть атрибут mail
(objectclass=*) # возвращает все записи
(mail=*@*) # возвращает записи, значение атрибута mail которых соответствует правильному почтовому адресу формата RFC822
(sn=smith) # возвращает точное соответствие Smith, но НЕ Smit
(sn=s*) # возвращает записи с фамилиями, начинающимися на s или S
(cn=*a*i*) # возвращает записи, в общепринятых именах которых присутствуют сразу a и i в любом месте
(telephonenumber=*555) # возвращает записи с телефонными номерами, оканчивающимися на 555
(objectclass=person) # возвращает записи, в которых используется объектный класс person

Примечания:

  1. При поиске с фильтром objectclass=person также возвращаются записи с любыми объектными классами, использующими в своей иерархии person, например, записи с объектными классами inetOrgPerson или residentialPerson и т.д.
  2. Форма выполнения тестирования также зависит от определения атрибутов (определения ASN.1). Например, sn и cn являются частью семейства атрибутов name, при определении которого задано правило соответствия caseIgnoreMatch, означающее, что соответствие будет искаться БЕЗ учёта регистра символов, то есть при поиске с фильтром sn=a будут найдены и a, и A.

Простые фильтры с комбинированными выражениями

Два или более выражения могут быть объединены (или вложены) с помощью & (логическое И), ! (логическое НЕ) и | (логическое ИЛИ):

(&(exp1)(exp2)(exp3)) # exp1 И exp2 И exp3
(|(exp1)(exp2)(exp3)) # exp1 ИЛИ exp2 ИЛИ exp3
(!(exp1)) # НЕ exp1
(&(!(exp1))(!(exp2))) # НЕ exp1 И НЕ exp2

НЕ (!) смотрится несколько проблематично, зато логично (может быть), и работает только в приведённой выше форме. Смотрите также примеры ниже:

Примеры простых фильтров с комбинированными выражениями

(&(mail=*)(cn=*r)(sn=s*)) # есть атрибут mail И cn заканчивается на R И sn начинается с s
(|(sn=a*)(sn=b*)(sn=c*)) # sn начинается с a ИЛИ с b ИЛИ с c
(!(sn=a*)) # записи с sn НЕ начинающимся с a
(&(!(sn=a*))(!(sn=b*))) # записи с sn НЕ начинающимся с a И НЕ начинающимся с b
(|(sn=*a)(!(sn=s*))) # записи с sn, заканчивающимся на a И НЕ начинающимся с s
# классическия простая ошибка:
(&(sn=a*)(sn=b*)(sb=c*)) # условие невыполнимо, никогда ничего не возвращается

Поиск специальных символов

Если требуется поиск по шаблону, включающему специальные символы (* ) ( \ или NULL), эти символы должны быть экранированы с использованием формата ‘\code’, где code — два шестнадцатеричных символа, представляющие ASCII-код символа. Аналогично поиск по любому двоичному значению может быть осуществлён с помощью его шестнадцатеричного представления.

\2a заменяет или экранирует *
\28 заменяет или экранирует (
\29 заменяет или экранирует )
\5c заменяет или экранирует \
\00 заменяет или экранирует NUL
\xx поиск шестнадцатеричного значения
    где хх лежит в диапазоне 00 - FF

Примеры поиска с использованием экранирования

(cn=*\2a*) # поиск символа *, расположенного в любом месте в cn
(file=d:\5cmyfile.html) # поиск d:\myfile
(description=*\28*\29) # поиск ( и ), расположенных в любом месте, но в этой последовательности
(bin=\5b\04) # поиск двоичного значения 5b04

Расширение возможностей поиска соответствия

Поведение по умолчанию при поиске по любому атрибуту определяется правилами соответствия данного атрибута отдельно для разных типов поиска (EQUALITY, SUBSTR или ODERING). Это поведение может быть переопределено путём указания заменяющего правила соответствия (либо имени правила, либо его OID).

# для sn поведение по умолчанию при сравнении EQUALITY
# caseIgnoreMatch (2.5.13.2)
sn=smith

# переопределим соответствие EQUALITY, чтобы оно зависело от регистра символов
sn:caseExactMatch:=Smith
# то же самое с помощью OID
sn:2.5.13.5:=Smith

# если при поиске встречаются поисковые шаблоны,
# применяется правило соответствия SUBSTR

# для sn поведение по умолчанию при сравнении SUBSTR
# caseIgnoreSubstringMatch
sn=*s* # находит Smith или smith

# переопределим соответствие SUBSTR, чтобы оно зависело от регистра символов
sn:caseExactSubstringMatch:=*S* # находит только Smith
# то же самое с помощью OID
sn:2.5.13.7:=*S*

Используя данный процесс переопределения, можно задавать поисковые критерии, включающие возможности, не определённые в самом атрибуте, такие как ORDERING (которые очень редко встречаются в определениях атрибутов).

Компоненты DN

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

# указывает, что значение dc, соответствующее com, может присутствовать в DN 
# или конечная целевая запись определяется базовым DN и диапазоном
dc:dn:=com

Соответствие компонентов (Component Matching) определяется примерно по тому же принципу, что и расширенные фильтры. Оно описано отдельно.


Декабрь 6

Mail Server IredMail+Gosa+SOGo+eJabberd

Как я делал почтовый сервак %-):

Итак, поскольку я человек ленивый, то я пошёл путём максимальной автоматизации. Именно поэтому данная инструкция позволит поднять такой сервак даже начинающему Nix админу. Исходя из этих же соображений буду по максимуму разжовывать свои действия.

Итак техзадание:

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

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

Итак начнём:

За основу решил взять сборочку iRedMail (http://www.iredmail.org) на момент написания последняя версия iRedMail-0.8.6

Устанавливаем Debian 7.2 из сервисов ток базовый набор+сервер ssh

Далее все настройки я делаю от рута, sudo мне использовать лень 🙂.

Настраиваем сеть (у меня на айпи выданом DHCP нет инета

#nano /etc/network/interfeces

auto lo

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet static //dhcp меняем на static

address 192.168.0.220 //айпи

netmask 255.255.255.0 //маска

gateway 192.168.0.53 // шлюз

Далее прописываем ДНС сервера

#nano /etc/resolv.conf

nameserver 8.8.8.8

nameserver 192.168.0.20

nameserver 192.168.0.19

nameserver 192.168.0.29

nameserver 192.168.0.31

Далее рестартуем сеть для применения настроек, либо просто перезагружаемся

#reboot

После перезагрузки появился интернет, но поскольку при установке я не использовал интернет, список репозиториев у меня пуст. Поэтому идём на http://debgen.simplylinux.ch/index.php (если не работает то гуглим на тему «генератор sourse.list» ) и генерируем список репозиториев.

#nano /etc/apt/sources.list

# deb cdrom //единственная не закоментированая строка, её коментирую, поскольку в дальнейшем сидиром использовать не буду. Делее добавляю строки сгенерированы сервисом описаным выше.

deb http://ftp.ua.debian.org/debian stable main contrib non-free

deb-src http://ftp.ua.debian.org/debian stable main contrib non-free

deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free

deb-src http://security.debian.org/ wheezy/updates main contrib non-free

После добавления репозиторием обновляем список и систему и ставлю mc (мне с ним просто удобно работать, а так в принципе он не обязателен.

#apt-get update

#apt-get upgrade

#apt-get install mc

далее следуя инструкциям по установке iRedMail взятым отсюда: http://www.iredmail.org/install_iredmail_on_debian.html устанавливаем пакет iRedMail. В принципе там всё понятно, но специально для тех, кто боится английских букав продублирую процес установки здесь:

Сначала проверяем как выглядит имя нашего хоста (должно быть как ниже:)

$ hostname -f
mx.example.com

Если нет то приводим его в такой вид редактированием файлов /etc/hosts и /etc/hostname нужно их привести в такой вид:

# File: /etc/hostname
demo
# Part of file: /etc/hosts
127.0.0.1   mx.example.com demo localhost localhost.localdomain

Затем качаем последнюю версию сборки iRedMail-x.y.z.tar.bz2 ниже привожу пример с закачкой той что сейчас последняя:

# cd /root/

#wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.8.6.tar.bz2

Затем распаковываем скачаный архив, заходим в распакованую папку и запускаем инсталяцию iRedMail

# tar xjf iRedMail-0.8.6.tar.bz2
# cd /root/iRedMail-0.8.6/
# bash iRedMail.sh

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

Первое окно типа здрасте и т. д. Жмём есс

Далее спрашивает где будем хранить почту, предлагает var/vmail соглашаемся.

Далее спрашивает какую базу данных будем использовать выбираем LDAP

Далее погнали настройки базы, спрашивает суфикс базы вписываем свой домен в виде (к примеру домен test.com.ua) dc=test,dc=com,dc=ua

Далее спрашивает пароль для админа лдапа, пишем...

Следующим пунктом указываем пароль для рута скуля

Затем спросит доменное имя вписываем то что у нас будет в почте после @

Далее спросит пароль для postmaster (учётка куда все логи и т. д. Будут падать)

Следующий вопрос будет какие компоненты нужно ставить, ставим всё, лишнее потом можно грохнуть.

Затем пара глупых вопросов на которые отвечаем Y и собственно всё, утановка завершена, после установки перегружаем сервак:

#reboot

После установки к нашим услугам несколько вебморд, коротко о необходимых нам:

Webmail https://your_server/mail/ или просто http://наш_айпи - вебморда для работы с почтой Roundcube

iRedAdmin (admin panel) httpS://your_server/iredadmin/ - админка для добавления пользователе, за денюжку она ещё будет уметь много полезного, но мы хотим всё и бесплатно, поэтому мы от неё избавимся ))), но для простенького почтового сервера её вполне достаточно, можно дальше не продолжать.

phpMyAdmin httpS://your_server/phpmyadmin/ - вебморда для управления скулем, в дальнейшем пригодится

phpLDAPadmin httpS://your_server/phpldapadmin/ - наглядно пожно поковыряться в ldap базе, но поскольку наш ldap сервер переедет для нас не нужная здесь приблуда как и админ панель )

Policyd V2 (cluebringer) httpS://your_server/cluebringer/ - оч полезная админка, тут мы будем правила для почты ваять, ниже напишу как ей пользоваться, потому как гугль ничего толкового не подсказал, пришлось разбираться самому.

Итак погнали дальше!! GOSa!

Готовим 2-ой сервак опять на дебиане, задаём айпишники и репы как в начале статьи. Этот сервер мы будем использовать как сервер LDAP (второй сервер продиктован не только религией и удобством, а и тем что нет доков как ужить GOSa с iRedMail на одном серве, у меня по крайней мере не вышло, и жалобные ворчания на форумах ни к чему не привели :))

Инструкция чтобы не повторяться в отдельной статье по ссылке.

Всё Gosa установлена!

Заходим в админку и:

заходим в группы и создаём 2 группы (users и administrators), иначе iRedMail не захочет дружить с GOSa и этот момент нигде не описан.

Заходим в раздел Systems и добавляем сервер с айпи нашего iRedMail сервера и его мак адресом имя сервера для удобства делаем как наш почтовый домен.

#ifconfig на сервере iredmail нам подскажет эти параметры.

Затем нажимаем редактировать созданый сервер идём на вкладку services и добавляем сервис postfix в параметрах достаточно добавить в параметр «Domains to accept mail for» имя нашего почтового домена.

Жмём кругом ОК создаём в разделе пользователи пару юзверей, на вкладке mail добавляем свойства и пишем адрес почты.

Настройка сервера GOSa завершена!

Возвращаемся к iRedMail.

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

Сразу оговорюсь, нормально создать в лдапе юзверя vmail с нормальными правами мне не удалось, и упорно ничего работать не хотело, в итоге в поля bind_dn bind_pw я вписывал админа госы(созданого при установке) и его пароль, ну и естественно dc=example,dc=com меняем на свой домен

#nano /etc/postfix/ldap/virtual_alias_maps.cf

server_host = <GOSA-IP-OR-HOSTNAME>
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,dc=example,dc=com
bind_pw = <PASSWORD-FOR-VMAIL>
search_base = ou=people,dc=example,dc=com
scope = sub
query_filter = (&(objectClass=gosaMailAccount)(gosaMailForwardingAddress=*)(|(mail=%s)(gosaMailAlternateAddress=%s)))
result_attribute= gosaMailForwardingAddress
debuglevel = 0

#nano /etc/postfix/ldap/virtual_mailbox_maps.cf

server_host = <GOSA-IP-OR-HOSTNAME>
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,dc=example,dc=com
bind_pw = <PASSWORD-FOR-VMAIL>
search_base = ou=people,dc=example,dc=com
scope = one
query_filter = (&(objectClass=gosaMailAccount)(mail=%s))
result_attribute= uid
result_format = /var/vmail/%s/
debuglevel = 0

#nano /etc/postfix/ldap/sender_login_maps.cf

server_host = <GOSA-IP-OR-HOSTNAME>
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,dc=example,dc=com
bind_pw = <PASSWORD-FOR-VMAIL>
search_base = ou=people,dc=example,dc=com
scope = one
query_filter = (&(mail=%s)(objectClass=gosaMailAccount))
result_attribute= mail
debuglevel = 0

#nano /etc/postfix/ldap/virtual_group_maps.cf

server_host = <GOSA-IP-OR-HOSTNAME>
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=vmail,dc=example,dc=com
bind_pw = <PASSWORD-FOR-VMAIL>
search_base = ou=groups,dc=example,dc=com
scope = sub
query_filter = (&(objectClass=gosaMailAccount)(objectClass=posixGroup)(mail=%s))
result_attribute= memberUid
result_format = %u@example.com не забываем указать свой домен
debuglevel = 0

#nano /etc/dovecot/dovecot-ldap.conf

hosts = <GOSA-IP-OR-HOSTNAME>:389
ldap_version = 3
auth_bind = yes
dn = cn=vmail,dc=example,dc=com
dnpass = <PASSWORD-FOR-VMAIL>
base = ou=people,dc=example,dc=com
scope = subtree
deref = never
user_filter = (&(objectClass=gosaMailAccount)(mail=%u))
pass_filter = (mail=%u)
pass_attrs = userPassword=password
default_pass_scheme = PLAIN
user_attrs = uid=home=/var/vmail/%$,=mail=maildir:~/Maildir/,gosaMailQuota=quota_rule=*:bytes=%$M

Собственно после этих не сложных манипуляций можно забыть об админках лдапа на iRedMail сервере. Теперь добавление пользователей у нас происходит на сервере GOSa.

В принципе изначальные «хотелки» сделаны но мы пойдём дальше:

ПРИВЯЗЫВАЕМ SOGo (впоследствии я отказался от неё в пользу Roundcubemail+Plugins или Tine20)

Итак привязываем SOGo — альтернативная вебморда для пользования почтой, календарями и т. д.

Добавляем репозиторий для инсталяции:

#nano /etc/apt/sources.list

deb http://inverse.ca/debian wheezy wheezy

Добавляем ключи для репозитория и обновляем репы:

#apt-key adv --keyserver keys.gnupg.net --recv-key 0x810273C4
#apt-get update

Ну и собственно устанавливаем SOGo

#apt-get install sogo

Настройка довольно проста, редактируем /etc/sogo/sogo.comf

Всё в принципе хорошо комментировано, поэтому приведу только те моменты которые менял.:

#nano /etc/sogo/sogo.conf

// Поскольку скуль у нас уже есть, в него всё и селим, вместо pas_root естественно указываем свой пароль.

SOGoProfileURL = "mysql://root:pass_root@localhost:3306/sogo/sogo_user_profile";

OCSFolderInfoURL = "mysql://root:pass_root@localhost:3306/sogo/sogo_folder_info";

OCSSessionsFolderURL = "mysql://root:pass_root@localhost:3306/sogo/sogo_sessions_folder";

SOGoMailDomain = ВАШ ПОЧТОВЫЙ ДОМЕН;

SOGoLanguage = Russian;

SOGoTimeZone = Europe/Kiev;

//Для авторизации через наш LDAP сервер под управлением GOSa заполняем следующий раздел

/* LDAP authentication example */

SOGoUserSources = (

{

type = ldap;

CNFieldName = uid;

UIDFieldName = uid;

IDFieldName = uid;

bindFields = (uid,mail);

baseDN = "ou=people,dc=mku,dc=post";

bindDN = "cn=admin,dc=mku,dc=post";

bindPassword = пароль админа;

canAuthenticate = YES;

displayName = "Shared Addresses";

hostname = ldap://IP сервера GOSa:389;

id = public;

isAddressBook = YES;

}

);

Вуаля! Имеем рабочий альтернативный веб интерфейс.

Следующий наворот: ставим плагины календаря и задач в roundcubemail (аналогично можно привязать туеву кучу других плагинов)

Итак идём сюда: http://git.kolab.org/roundcubemail-plugins-kolab/

Качаем последнюю сборку плагинов (нам они нужны не все, это сборка для полноценного Groupware, я пока его ещё не осилил, это в планах.) на данный момент последний архив http://git.kolab.org/roundcubemail-plugins-kolab/snapshot/roundcubemail-plugins-kolab-3.1.10.tar.gz

Дальше всё просто, как и установка всех плагинов:

1. распаковываем, копируем нужные нам папки, а это: calendar(календарь), libcalendaring(библиотеки календаря), libkolab(библиотеки задач), tasklist(задачи). Копируем эти папки в папку с плагинами roundcubemail (/usr/share/apache2/roundcubemail/plugins/)

2. в конфиге roundcube прописываем скопированые плагины:

mcedit /usr/share/apache2/roundcubemail/config/main.inc.php

ищем параметр $rcmail_config[‘plugins’] = и добавляем туда наши плагины, получаем вот такую строку:

// List of active plugins (in plugins/ directory)
$rcmail_config[‘plugins’] = array(«password»,»managesieve»,»calendar»,»libcalendaring»,»tasklist»,);

Собственно заходим в почту и любуемся %-)

Дальше привязываем eJabberd с авторизацией из нашей GOSa.

Опять же опишу отдельной статьёй по ссылке.

Ноябрь 21

Postfix restrictionson transfer of mailto individual users

Ограничения на пересылку почты отдельным пользователям в postfix

Версия 2.

Ограничения на пересылку почты отдельным пользователям только внутри домена
средствами postfix

Иногда возникает необходимость ограничить пересылку ряду пользователей
электронной почты в мир. Например у нас ряд заявок оформляется в (на наш
отдел) в форме e-mail, тобишь пользователь просит сделать то-то и то-то. Мы
взглянув на проблему даем ответ, реализуемо это или нет. Если реализуемо
сообщаем о том, что это сделано. То бишь получается что все заявки есть,
учтены, ответы даны, можно предоставить отчет руководству в любом виде по
этим вопросам. Но ведь не все имеют право отправки писем в мир. Такова уж
политика компании.

Ну и для примера еще такой мой опыт — один товарищ решил отправить на mail.ru,
на свой почтовый ящик порнушный фильм. 90 метров мелочь, но неприятно.

В общем наша цель ясна — запретить ряду пользователей пересылку почты за
пределы домена или ряда доменов.

И так желание и цельесть. Взглянем, на то, что у нас есть под рукой. Это
настроенный(или не очень) и рабочий (надеюсь) почтовый сервер postfix. В моем
случае это:

root@ipps-1-66 :lf /var/db/pkg/| grep postfix
postfix-2.0.20,1/
root@ipps-1-66 :

Описывать предварительную установку почтового сервера приводить не буду, в
этом просто нет нужды. На том же www.postfix.org в разделе HOW-TO
http://www.postfix.org/docs.html примеров предостаточно, ну или например
поближе на www.opennet.ru вот пример поиска по этой теме
http://www.opennet.ru/cgi-bin/opennet/ks.cgi?mask=postfix

В общем установимся, что сервер вы настроили или сами или основываясь на одном
из HOW-TO, а теперь будем делать ограничения.

И так, мы рассмотрим два случая, первый — хранение пользователей с
ограниченными правами в базе mysql и второй в текстовом файле.
Для начала, прежде чем начать править конфиг, просмотрите внимательно, какие
базы данных поддерживает установленный вами postfix. В моем случае это:

root@ipps-1-66 :postconf -m
static
sdbm
pcre
regexp
environ
proxy
mysql
btree
unix
hash
root@ipps-1-66 :

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

В общем приступаем.

Если база пользователей находиться в mysq, нам потребуется внести следующие
изменения в файл main.cf:

check_sender_access = mysql:/usr/local/etc/postfix/restricted_senders
check_recipient_access = mysql:/usr/local/etc/postfix/local_domains
smtpd_recipient_restrictions = check_sender_access ,permit_mynetworks,reject_unauth_destination
smtpd_restriction_classes = local_only
local_only = check_recipient_access, reject_unauth_destination

Содержимое /usr/local/etc/postfix/restricted_senders

user = postfix
password = postfix
dbname = mail
table = restricted_senders
select_field = permission
where_field = usermail
hosts = localhost

Содержимое /usr/local/etc/postfix/local_domains

user = postfix
password = postfix
dbname = mail
table = local_domains
select_field = result
where_field = domain
hosts = localhost

Расмотрим значения каждого из параметров:

— user — имя пользователя для подключения к mysql
— password — соответственно пароль
— dbname — имя базы
— table — таблица
— select_field — поле в котором ищем
— where_field — правила отбора
— hosts — хост на котором крутиться база

А теперь создадим сами таблицы и их содержимое:

create table restricted_senders (
usermail varchar(255) primary key,
permission varchar(128)
);
create table local_domains (
domain varchar(255) primary key,
result varchar(8)
);

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

insert into restricted_senders values (‘pupkin@xxx.com.ua’,’local_only’);

теперь укажем, куда он может отправлять почту

insert into restricted_senders values (‘xxx.com.ua’,’OK’);

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

Все, теперь можем по выбору сделать или

root@ipps-1-66: postfix reload
или
root@ipps-1-66: postfix stop && postfix start

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

root@ipps-1-66: postconf | grep smtpd_restriction_classes

то увидите:
smtpd_restriction_classes =

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

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

Добавляем содержимое в main.cf

check_sender_access = hash:/usr/local/etc/postfix/restricted_senders
check_recipient_access = hash:/usr/local/etc/postfix/local_domains
smtpd_recipient_restrictions = check_sender_access ,permit_mynetworks,reject_unauth_destination
smtpd_restriction_classes = local_only
local_only = check_recipient_access, reject

Создаем указанные файлы, с нужным содержимым:

root@ipps-1-66 : touch /usr/local/etc/postfix/restricted_senders
root@ipps-1-66 : ee /usr/local/etc/postfix/restricted_senders
pupkin@xxx.com.ua local_only

Объясним. Первое поля — e-mail пользователя с ограниченными правами пересылки,
а второе указывает, что пересылать почту он может только локально

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

root@ipps-1-66 : touch /usr/local/etc/postfix/local_domains
root@ipps-1-66 : ee /usr/local/etc/postfix/local_domains
xxx.com.ua OK

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

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

Для начала мой любимый mysql:

smtpd_recipient_restrictions =
mysql:/usr/local/etc/postfix/protected_destinations, check_sender_access
mysql:/usr/local/etc/postfix/restricted_senders,
permit_mynetworks,reject_unauth_destination
smtpd_restriction_classes = local_only,insiders_only
local_only = check_recipient_access
mysql:/usr/local/etc/postfix/local_domains, reject_unauth_destination
insiders_only = check_sender_access mysql:/usr/local/etc/postfix/insiders, reject

Здесь стоит обратить внимание на то, что первый предложенный выше мной вариант
ограничения на пересылку в мир в паре с ограничениями на прием работать не
будет, увы. Что ж нет в мире совершенства. Но мы воспользуемся этим вторым
вариантом.

Так же обращу внимание на последнюю строку:

insiders_only = check_sender_access mysql:/usr/local/etc/postfix/insiders, reject

Почему? потому что заключительный параметр очень важен в данном случае, если
вы поставите, например reject_unauth_destination, то почта будет исправно
доходить до пользователя, а ведь нам этого не нужно, правда?

Теперь опишем содержимое файлов:

/usr/local/etc/postfix/insiders
user = postfix
password = postfix
dbname = mail
table = insiders
select_field = result
where_field = domain
hosts = localhost

/usr/local/etc/postfix/protected_destinations
user = postfix
password = postfix
dbname = mail
table = protected_destinations
select_field = permissions
where_field = mailuser
hosts = localhost

Ну, объяснять думаю не стоит, посему перейдем к созданию таблиц и внесению
данных:

create table protected_destinations (
mailuser varchar(255) primary key,
permissions varchar(128)
);
create table insiders (
domain varchar(255) primary key,
result varchar(8)
);

Так, создали, теперь вносим данные, ну проделаем это все над тем же нашим
пользователем по имени pupkin — бедный церковноприходской учебник математики:

insert into protected_destinations (‘pupkin@xxx.com.ua’,’insiders_only’);

теперь укажем, откуда он может получать почту

insert into restricted_senders values (‘xxx.com.ua’,’OK’);

Проверим, что же у нас получилось:

root@ipps-1-66 :telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.owe.
Escape character is ‘^]’.
220 ipps-1-66.xxx.com ESMTP Postfix (2.0.20)
mail from: pupkin@owe.com.ua
250 Ok
rcpt to: skif@xx.ua
454 <skif@xx.ua>: Relay access denied

Вот оно! за пределы домена мы ничего отправить не могем….

rcpt to: skif@xxx.com.ua
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: test
test
.
250 Ok: queued as 345BFC2A60
quit
221 Bye
Connection closed by foreign host.
root@ipps-1-66 :

А по домену почта гуляет просто на ура.

Что ж проверим нашего пользователя на получение почты из мира:

skif@ostwest :telnet ipps-1-66.xxx.com 25
Trying xxx.xxx.xxx.xxx…
Connected to ipps-1-66.xxx.com.
Escape character is ‘^]’.
220 ipps-1-66.xxx.com ESMTP Postfix (2.0.20)
mail from: skif@xx.ua
250 Ok
rcpt to: pupkin@xxx.com.ua
450 <pupkin@xxx.com.ua>: Recipient address rejected: Access denied
quit
221 Bye
Connection closed by foreign host.

Думаю комментарии излишни. Пользователь отныне может шалить только в пределах
отведенных ему ресурсов.

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

Чижиков Владимир (Skif)

Написано по мотивам:

http://www.postfix.org/RESTRICTION_CLASS_README.html — кстати, отнеситесь
несколько предвзято к этому документу ибо после манипуляций как там указано у
меня postfix отказался принимать все соединения.
и примеров идущих в комплекте с postfix, в частности:
/usr/local/etc/postfix/sample-smtpd.cf

Спасибо за статью http://bezopasnik.org

Ноябрь 21

Ubuntu config Network

Столкнулся что в Ubuntu немного через Ж настраивается вручную сеть.

Для настройки сети /etc/network/interfaces должен принять такой вид:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address xxx.yyy.zzz.sss
netmask 255.255.255.0
gateway xxx.yyy.zzz.aaa

dns-nameservers xxx.yyy.zzz.bbb #да да DNS сервера указываем именно тут и именно в таком виде. стандартный метод с resolv.conf не работает поскольку файл автоматом перезаписывается…. есть и другие методы решения, но ИМХО этот самый «кошерный».

Октябрь 21

Gosa+Ldap Debian 7 and 7.2

Вношу поправки в статью применимые к Debian 7.2, потому как по этой инструкции после установки наблюдались грабли с группами. В Debian 7.2 выполняем только ту часть статьи, которая отмечена цветом, остальное упускаем.

Ставим LDAP, GOSa, схемы для работы GOSa c LDAP и плагин для работы с почтой (эт сразу для будущих настроек :)) ну и миднайт, люблю я его ))

apt-get install mc slapd gosa-schema gosa gosa-plugin-systems gosa-plugin-mail ldap-utils

Останавливаем LDAP

service slapd stop

Настраиваем схемы:

rm /etc/ldap/slapd.d/cn=config/cn=schema/cn={2}nis.ldif
cp /etc/ldap/schema/gosa/rfc2307bis.ldif /etc/ldap/slapd.d/cn=config/cn=schema/cn={2}rfc2307bis.ldif
Редактируем
mcedit /etc/ldap/slapd.d/cn=config/cn=schema/cn={2}rfc2307bis.ldif 
Было:
cn=rfc2307bis,cn=schema,cn=config

objectClass: olcSchemaConfig
cn: rfc2307bis
Стало:
cn=rfc2307bis

objectClass: olcSchemaConfig
cn: rfc2307bis
Стартуем LDAP
service slapd start
Добавляем схемы для GOSa

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/gosystem.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/gofon.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/goto.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/goserver.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/samba3.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/gosa/gosa-samba3.ldif

Добавляем нужные поля:

ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uid eq
olcDbIndex: mail eq
olcDbIndex: cn eq
olcDbIndex: gosaMailAlternateAddress eq
olcDbIndex: postfixMyDestinations eq

Продолжаем настройку уже в браузере http://IP_серва_ldap+gosa/gosa

 

Май 27

VNC server Linux Mint 14 old

Итак задача: обеспечить доступ к машине через VNC даже если пользователь не зашел в систему. Использовать только один сеанс.
Решение:

1. Удаляем vino (чтобы не было проблем с занятием порта и т.п.)

sudo apt-get remove vino

2. Устанавливаем x11vnc

sudo apt-get install x11vnc

3. Делаем пароль для доступа к VNC. Тут надо быть очень внимательными вот почему. По-умолчанию VNC не использует туннель shh следовательно информация не шифруется, потому если машина для вас очень важная и критичная, надо погуглить на тему проброса VNC и его портов через туннель SSH

x11vnc -storepasswd

Пароль сохраняется в /home/ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ/.vnc/passwd (где ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ – имя пользователя, под которым вы выполнили команду). Важно выполнить эту команду не из под sudo иначе будут проблемы с правами доступа при логине.

4. Автозагрузка службы x11vnc. Очень важно (для меня) чтобы служба была уже доступна при загрузке Х т.е. пользователь еще не зашел в систему, но доступ к машине уже есть. Почему это важно? Ответ прост. В BIOS включено включение по питанию, следовательно если даже на «сервачке» пропало питание, то как только оно появится он включится сам опять и загрузится. Для этого и нужно иметь доступ уже на уровне GDM.

Редактируем файл /etc/mdm/Init/Default  (не забываем выполнить это из под root или sudo иначе не сохраните изменения)
Добавить в конец файла до exit 0 следующую строку:

/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -rfbauth /home/ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ/.vnc/passwd

 Из ключевых параметров стоит обратить внимание на следующие:

-dontdisconnect — не отключать при простоях, что важно если свернули окно сессии
-forever — очень важный параметр. Без него x11vnc после завершения сеанса выключается и больше вы не зайдете пока по ssh опять не запустите его, что не удобно.
-rfbport — указываем на каком порту будет работать наш VNC

Далее сохраняем файл и перегружаем машину.

В некоторых статьях попадается что эту же строку надо добавить в файл /etc/gdm/gdm.conf-custom но его в Mint нет, но все работает и так.

Вот собственно и все, но стоило это долгих поисков в инете 🙂

Записки, чтобы помнить!

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

Май 27

Java+Chrome

Поставил себе на сервачок ProxMox, всё бы ничего но управляется он с вебморды на джаве которая…. Сама вебморда работала, пела и летала, пока дело не дошло до джавовской VNC консоли… вот она и вешала весь интерфейс… Победил я это дело так:

PPA-репозиторий поддерживает Ubuntu 12.10, 12.04, 11.10, 11.04, 10.10 и 10.04, а также соответствующие версии Linux. Чтобы добавить PPA и установить Oracle Java 8 (пакет содержит и JDK8, и JRE8), используйте следующие команды в вашем терминале:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

После установки, вы можете выполнить «java -version» в вашем терминале и получить что-то такое:

andrei@andrei-desktop:~$ java -version
java version «1.8.0-ea»
Java(TM) SE Runtime Environment (build 1.8.0-ea-b54)
Java HotSpot(TM) Server VM (build 24.0-b21, mixed mode)

Или «javac -version»:

andrei@andrei-desktop:~$ javac -version
javac 1.8.0-ea

После сих не сложных манипуляций консоль взлетело, но все равно осталось НО. поскольку я юзаю браузер Chrome — При запуске консоли выводилось сообщение что версия джава устарела и просило ткнуть кнопочку для запуска…

Поскольку мы ленивые, то добавляем к ярлыку запуска хрома параметр «—allow-outdated-plugins» и получам Щастие 🙂