Как закрыть sshd без iptables

Если лень возиться с iptables, то ограничить доступ к ssh (и не только) можно и без iptables.

Для этого достаточно дописать несколько строк в файлы
/etc/hosts.allow
/etc/hosts.deny

Например, открываем доступ к sshd с ip 192.168.1.12 и 192.168.250.250, а для остальных доступ к sshd будет закрыт.
Добавляем в файл /etc/hosts.allow строку, где указаны разрешенные ip:

sshd: 192.168.1.12, 192.168.250.250

А в файле /etc/hosts.deny закрываем доступ всем, кроме разрешенных:

sshd: ALL

При попытке подключения с неразрешенного хоста получим ответ:

# ssh 192.168.0.1
ssh_exchange_identification: Connection closed by remote host

А если подключаться с разрешенного, то увидим приглашение ssh.

# ssh 192.168.0.1
user@host's password:

Вот такой простой способ 🙂
Таким же способом, например, можно разрешить/запретить коннекты с mysqld, nfs или другим сервисам.

apache и mod_ruid — исполнение скриптов от имени пользователя

При использовании mod_php все скрипты исполняются от имени веб-сервера (www-data, apache, etc), из-за чего довольно трудно определить чем занят тот или иной процесс и кто делает нагрузку.
Да, можно использовать suPHP, fastCGI и т.д. Но в таком случае можно забыть про выставление параметров в .htaccess, потеря производительности, невозможность использования mod_php и другие фишки.
Можно использовать peruser или mpm-itk. В первом случае будут плодиться процессы, каждый из которых будет кушать память, что не особо хорошо.
Во втором случае - нужно пересобирать апач.

Как же быть ?
Как вариант - использовать модуль mod_ruid2. Почему именно mod_ruid ? Одна из причин - модуль поддерживается и развивается. Последний коммит в svn сделан неделю назад (от даты данного поста), это вселяет определенную надежду, что модуль и дальше будет развиваться, а найденные баги будут исправляться. mod_ruid не требует пересборки ни apache ни чего либо еще, будут нормально работать акселераторы (eAccelerator, xcache).

Читать дальше apache и mod_ruid — исполнение скриптов от имени пользователя

Directadmin+nginx полный автомат

Доброго всем LOCALTIME ! 🙂

Решил поделиться с общественностью своими скриптами для связки directadmin и nginx.

В свое время для снижения нагрузки на apache было решено поставить nginx. После некоторого гугления была сделана первая попытка связать панель и nginx. На тот момент скрипт умел совсем немного - только создавать и удалять конфигурационные файлы виртуальных хостов. Он не умел работать ни с поддоменами, ни с алиасами, не умел и переименовывать конфиги доменов.

Затем последовала вторая попытка. Этот скрипт уже был немного "умнее". Он умел создавать, удалять не только домены, но и поддомены. Однако, после того, как количество вирт. хостов выросло и управляться с большим количеством доменов стало как-то трудно, было решено полностью переписать всю схему работы связки directadmin и nginx. Все домены/поддомены/алиасы будут описываться в map-файле, а в конфиге будут использоваться соответствующие переменные, тем самым будет использоваться всего один небольшой общий конфиг, в котором и описывается виртуальный хост.
"Особые" домены описываются в отдельных конфигурационных файлах.
Кроме того, логи для всех вирт. хостов будет писать nginx, освободим нашего монстра apache от этой обязанности и оставим ему писать только error_log. Что положительно скажется на производительности.

Сказано - сделано.
По моей просьбе и некоторому подобию ТЗ, мой друг Александр Русских написал совсем новый и удобный скрипт, который и будет использоваться в этой статье.
Еще одна моя просьба была направлена Кириллу Коринскому, который написал небольшой патч для nginx. Данный патч выдает 503 ошибку, если уровень load average системы выше заданного в конфиге значения. Да, это грубо, но зато может уберечь сервер от ухода в глубокий своп. Поэтому уровень LA необходимо указывать заведомо высокий.

Итак, поехали.

Часть первая (Если nginx уже установлен - смотрим вторую часть)
У нас в распоряжении сервер с установленной панелькой DirectAdmin (отличная, кстати, панель). Чтобы не делать из системы свалку, nginx будет ставиться из репозитария.

Добавляем репозитарий в список, импортируем ключи и ставим nginx:

# echo "deb http://ftp2.debian.org.ua/debian-dou/ lenny main" >> /etc/apt/sources.list
# gpg --keyserver keys.gnupg.net --recv-keys 0A3D4789
gpg: requesting key 0A3D4789 from hkp server keys.gnupg.net
gpg: key 0A3D4789: public key "Debian.org.ua Custom Repository " imported
gpg: Total number processed: 1
gpg:               imported: 1
# gpg --armor --export 0A3D4789 | apt-key add -
OK
# aptitude update
# aptitude install nginx

Стоит заметить, что в этот пакет включено два неофициальных патча, которые описаны в блоге автора

После установки nginx не запустится - это нормально, так как на 80-м порту все еще работает apache.
Дальше будем приводить в порядок конфигурационные файлы apache и nginx.
Читать дальше Directadmin+nginx полный автомат

Свежие версии mysql/php для Lenny

На сервере вполне уютно живет Debian Lenny, однако хочется использовать более свежие версии софта, того же MySQL или PHP (речь идет о ветке 5.2). А учитывая, что в репозитарии ну очень уж древние версии, в бекпортах толком ничего нет, то возникает вопрос - как быть ?
Ставить из тестинга или собирать из сорцов как-то лениво, да 🙂
Однако есть люди, которым не лениво, за что им можно сказать "спасибо".

Итак, подключаем репозитарий dotdeb.org и ставим свежие версии нужного нам софта.

deb http://packages.dotdeb.org  lenny all
deb-src http://packages.dotdeb.org lenny all

Импортируем ключики:

gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | sudo apt-key add -

Обновляем списки пакетов

aptitude update

Теперь можно обновить устаревшие версии mysql и php на более свежие:

aptitude safe-upgrade

Если необходима версия php 5.3, тогда в source.list необходимо добавить:

deb http://php53.dotdeb.org lenny all
deb-src http://php53.dotdeb.org lenny all

В итоге получим мускуля версии 5.1.48-0.dotdeb.0-log
И php версии 5.2.13 или 5.3.2

Memcached master-to-master replication

Имеем два сервера (fail-over), на которых крутятся несколько веб сайтов. Естественно, оба mysql-сервера работают по схеме master-to-master replication. Все вроде бы хорошо, файлы автоматически обновляются раз в 15 минут (rsync), базы также (master-to-master replication). При падении одного из серверов - второй вполне нормально справляется. Для снижения нагрузки файлы сессий стали писать в мемкашед-сервер.
И вот тут столкнулись с проблемой потери сессий в случае сбоя одного из серверов.

Проблему решили благодаря использованию патча для мемкашед сервера - repcached
repcached - add data replication feature to memcached 1.2.x
Этот патч позволяет получить мульти-мастер репликации,
также поддерживается асинхронный режим репликаций,
поддерживаются все memcached команды: set, add, delete, incr/decr, flush_all, cas

Качаем уже патченые исходники и распаковываем.
Читать дальше Memcached master-to-master replication

Восстановление software raid после сбоя

На днях "выпал" из софтварного raid1 один из разделов.

# cat /proc/mdstat
Personalities : [raid1] md2 : active raid1 sdb3[1] 34178176 blocks [2/1] [_U]
md1 : active raid1 sda2[0] sdb2[1]
      19534976 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
      240832 blocks [2/2] [UU]

По данным smart-а диск в порядке, в логах ничего не замечено.

Пробуем восстановить. Помечаем диск как сбойный:

# mdadm /dev/md2 -f /dev/sda3

Удаляем его из рейда

# mdadm /dev/md2 -r /dev/sda3

И пробуем его добавить обратно

# mdadm /dev/md2 -a /dev/sda3
mdadm: re-added /dev/sda3

Статус раздела после добавления обратно в массив:

# mdadm --detail /dev/md2
/dev/md2:
        Version : 00.90
  Creation Time : Fri Mar 19 18:53:17 2010
     Raid Level : raid1
     Array Size : 34178176 (32.59 GiB 35.00 GB)
  Used Dev Size : 34178176 (32.59 GiB 35.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent
    Update Time : Sat May 15 01:42:31 2010
          State : active, degraded, recovering
 Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 7% complete
           UUID : d841d3cd:6e2537ed:02c08aff:db0fd513
         Events : 0.3905
    Number   Major   Minor   RaidDevice State
 2 8 4 0 spare rebuilding /dev/sda3
       1       8       19        1      active sync   /dev/sdb3

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

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

Помечаем все разделы сбойного диска как fail и удаляем их из рейда.


mdadm /dev/md0 -f /dev/sda1
mdadm /dev/md1 -f /dev/sda2
mdadm /dev/md2 -f /dev/sda3
mdadm /dev/md0 -r /dev/sda1
mdadm /dev/md1 -r /dev/sda2
mdadm /dev/md2 -r /dev/sda3

меняем диск на новый, стартуем.
Подготавливаем диск для добавления в рейд.

Копируем разметку с живого диска (sdb) на новый (sda)

# sfdisk -d /dev/sdb | sfdisk -f /dev/sda

Проверим, что оба диска имеют одинаковую разметку

# fdisk -l

Теперь добавим все разделы в массив рейда

# mdadm -a /dev/md0 /dev/sda1
# mdadm -a /dev/md1 /dev/sda2
# mdadm -a /dev/md2 /dev/sda3

Если сервер нагружен, можно указать максимальную скорость синхронизации дисков (указывается в кб/сек), это немного понизит нагрузку:

echo 3000 >/sys/block/md1/md/sync_speed_max

Не забываем установить grub на новый диск:

# grub
grub> root (hd0,1) # hd0 - указываем, что надо использовать диск sda, 1 - номер /boot раздела
grub> setup (hd0) # устанавливаем grub в MBR нового диска
grub> quit

Проверить текущий статус raid-массива можно так:

# cat /proc/mdstat

В принципе все ... ну или как-то так 🙂

Как добавить XSL без пересборки php на сервере с DirectAdmin

Если после сборки остался каталог с исходниками php, то включить модуль довольно просто:

# cd /usr/local/directadmin/custombuild
# cd php-5.2.12/ext/xsl
# phpize
# ./configure
# make && make install

после чего, модуль xsl.so будет находится в /usr/local/lib/php/extensions/no-debug-non-zts-20060613

Добавляем в php.ini

extension=xsl.so

И напоследок делаем "мягкий" рестарт апача:

apachectl graceful

Exim + Greylist + Directadmin

В предыдущей статье я описывал как ставил грейлист  на тазик с панелью directAdmin на CentOS-е.

Нашел время написать как я ставил greylist  под Debian
Итак, имеем: Debian Lenny, DirectAdmin, exim из комплекта панели. Потребуется установить демон greylistd и после чуть подправить конфиг ексима.
Приступаем:

aptitude update
aptitude install  greylistd

Теперь необходимо поправить конфиг ексима. Ищем первый accept  в acl_smtp_rcpt и добавляем перед ним:
[eng]Now need to change exim.conf. Find first 'accept' in 'acl_smtp_rcpt' and add before:

# GreyListing
    defer   message    = Sender verification for $sender_host_address in progress. Please try later.
        log_message    = greylisted.
        !senders       = :
        !hosts         = : +relay_hosts : +whitelist_hosts : +whitelist_hosts_ip
        !authenticated = *
        !domains       = : ${if exists {/etc/greylistd/skip-greylist}\
                                 {/etc/greylistd/skip-greylist}{}}
        domains        = +local_domains : +relay_domains
        verify         = recipient/callout=20s,use_sender,defer_ok
        condition      = ${readsocket{/var/run/greylistd/socket}\
                            {--grey \
                                  $sender_host_address \
                                  $sender_address \
                                  @$domain}\
                              {5s}{}{false}}
    deny   message = $sender_host_address is blacklisted
        log_message = blacklisted.
        !senders       = :
        !authenticated = *
        verify         = recipient/callout=20s,use_sender,defer_ok
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--black \
                                  $sender_host_address \
                                  $sender_address \
                                  $local_part@$domain}\
                                 {5s}{}{false}}

Далее, ищем в ACL acl_smtp_data первый accept и вставляем перед ним:
Next, find first 'accept' in ACL acl_smtp_data and add before this code:

     defer
        message        = Sender verification for $sender_host_address in progress. Please try later.
        log_message    = greylisted.
        senders        = :
        !hosts         = : +relay_hosts : +whitelist_hosts : +whitelist_hosts_ip
        !authenticated = *
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--grey \
                                  $sender_host_address \
                                  $recipients}\
                                  {5s}{}{false}}
    deny
        message = $sender_host_address is blacklisted from delivering \
                     mail from <$sender_address> to <$recipients>.
        log_message   = blacklisted.
        !senders       = :
        !authenticated = *
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--black \
                                  $sender_host_address \
                                  $recipients}\
                                  {5s}{}{false}}

В файле /etc/greylistd/skip-greylist можно прописать домены (локальные) для которых не включать грейлистинг. Формат файла простой - один домен на строчку.
Вот собственно все.

In file /etc/greylistd/skip-greylist you can write whitelisted domains. One domain per line.

Если будет свободное время, напишу как прикрутить DSPAM  + Exim + Directadmin

Обновление Debian Lenny до Squeeze

Решился я таки проапдейтить свою десктопную тачку ("тачка на прокачку" ? 🙂 ) с lenny на squeeze.

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

aptitude update && aptitude -f install

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

# aptitude update
Hit http://ftp2.debian.org.ua lenny Release.gpg
Ign http://ftp2.debian.org.ua lenny/main Translation-en_US
Ign http://ftp2.debian.org.ua lenny/non-free Translation-en_US
Ign http://ftp2.debian.org.ua lenny/contrib Translation-en_US
Hit http://ftp2.debian.org.ua lenny/updates Release.gpg
Ign http://ftp2.debian.org.ua lenny/updates/main Translation-en_US
Ign http://ftp2.debian.org.ua lenny/updates/contrib Translation-en_US
Ign http://ftp2.debian.org.ua lenny/updates/non-free Translation-en_US
Hit http://ftp2.debian.org.ua lenny/volatile Release.gpg
Ign http://ftp2.debian.org.ua lenny/volatile/main Translation-en_US
Ign http://ftp2.debian.org.ua lenny/volatile/contrib Translation-en_US
Ign http://ftp2.debian.org.ua lenny/volatile/non-free Translation-en_US
Hit http://ftp2.debian.org.ua lenny Release
Hit http://ftp2.debian.org.ua lenny/updates Release
Hit http://ftp2.debian.org.ua lenny/volatile Release
Ign http://ftp2.debian.org.ua lenny/main Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/non-free Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/contrib Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/main Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/non-free Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/contrib Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/main Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/contrib Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/non-free Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/main Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/contrib Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/updates/non-free Sources/DiffIndex
Ign http://ftp2.debian.org.ua lenny/volatile/main Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/volatile/contrib Packages/DiffIndex
Ign http://ftp2.debian.org.ua lenny/volatile/non-free Packages/DiffIndex
Hit http://ftp2.debian.org.ua lenny/main Packages
Hit http://ftp2.debian.org.ua lenny/non-free Packages
Hit http://ftp2.debian.org.ua lenny/contrib Packages
Hit http://ftp2.debian.org.ua lenny/main Sources
Hit http://ftp2.debian.org.ua lenny/non-free Sources
Hit http://ftp2.debian.org.ua lenny/contrib Sources
Hit http://ftp2.debian.org.ua lenny/updates/main Packages
Hit http://ftp2.debian.org.ua lenny/updates/contrib Packages
Hit http://ftp2.debian.org.ua lenny/updates/non-free Packages
Hit http://ftp2.debian.org.ua lenny/updates/main Sources
Hit http://ftp2.debian.org.ua lenny/updates/contrib Sources
Hit http://ftp2.debian.org.ua lenny/updates/non-free Sources
Hit http://ftp2.debian.org.ua lenny/volatile/main Packages
Hit http://ftp2.debian.org.ua lenny/volatile/contrib Packages
Hit http://ftp2.debian.org.ua lenny/volatile/non-free Packages
Reading package lists... Done

# aptitude -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 0B will be used.
Writing extended state information... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done

Убедились, что текущая версия обновлена и не имеет проблем с пакетами и их  зависимостями. Теперь в файле /etc/apt/sources.list  заменим где встречается lenny на squeeze.

# cat /etc/apt/sources.list
deb http://ftp2.debian.org.ua/debian/ squeeze main non-free contrib
deb-src http://ftp2.debian.org.ua/debian/ squeeze main non-free contrib

deb http://ftp2.debian.org.ua/debian-security/ squeeze/updates main contrib non-free
deb-src http://ftp2.debian.org.ua/debian-security/ squeeze/updates main contrib non-free

обновляем списки пакетов:

# aptitude update

Теперь нужно поставить новые версии apt, dpkg и aptitude

# aptitude install apt dpkg aptitude
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following packages are BROKEN:
apt-utils libapt-pkg-perl
The following packages will be upgraded:
apt aptitude dpkg libept0
The following packages are RECOMMENDED but will NOT be installed:
aptitude-doc-cs aptitude-doc-en aptitude-doc-fi aptitude-doc-fr aptitude-doc-ja libparse-debianchangelog-perl
4 packages upgraded, 0 newly installed, 0 to remove and 802 not upgraded.
Need to get 7048kB of archives. After unpacking 471kB will be freed.
The following packages have unmet dependencies:
libapt-pkg-perl: Depends: libapt-pkg-libc6.9-6-4.7 which is a virtual package.
apt-utils: Depends: libapt-pkg-libc6.9-6-4.7 which is a virtual package.
The following actions will resolve these dependencies:

Remove the following packages:
libperl-dev

Upgrade the following packages:
apt-utils [0.7.21 (now) -> 0.7.23.1 (testing)]
libapt-pkg-perl [0.1.23 (now) -> 0.1.24 (testing)]
libperl5.10 [5.10.0-22 (now) -> 5.10.0-25 (testing)]
perl [5.10.0-22 (now) -> 5.10.0-25 (testing)]
perl-base [5.10.0-22 (now) -> 5.10.0-25 (testing)]
perl-modules [5.10.0-22 (now) -> 5.10.0-25 (testing)]

Score is 419

Accept this solution? [Y/n/q/?] Y
The following packages will be REMOVED:
libperl-dev{a}
The following packages will be upgraded:
apt apt-utils aptitude dpkg libapt-pkg-perl libept0 libperl5.10 perl perl-base perl-modules
The following packages are RECOMMENDED but will NOT be installed:
aptitude-doc-cs aptitude-doc-en aptitude-doc-fi aptitude-doc-fr aptitude-doc-ja libparse-debianchangelog-perl
10 packages upgraded, 0 newly installed, 1 to remove and 795 not upgraded.
Need to get 16.6MB of archives. After unpacking 5968kB will be freed.
Do you want to continue? [Y/n/?] Y
Writing extended state information... Done
Get:1 http://ftp2.debian.org.ua squeeze/main dpkg 1.15.3.1 [2164kB]
Get:2 http://ftp2.debian.org.ua squeeze/main perl-modules 5.10.0-25 [3199kB]
Get:3 http://ftp2.debian.org.ua squeeze/main perl 5.10.0-25 [4512kB]
Get:4 http://ftp2.debian.org.ua squeeze/main libperl5.10 5.10.0-25 [620kB]
Get:5 http://ftp2.debian.org.ua squeeze/main perl-base 5.10.0-25 [968kB]
Get:6 http://ftp2.debian.org.ua squeeze/main apt-utils 0.7.23.1 [193kB]
Get:7 http://ftp2.debian.org.ua squeeze/main libept0 0.5.29 [208kB]
Get:8 http://ftp2.debian.org.ua squeeze/main aptitude 0.4.11.11-1+b2 [3034kB]
Get:9 http://ftp2.debian.org.ua squeeze/main libapt-pkg-perl 0.1.24 [87.6kB]
Get:10 http://ftp2.debian.org.ua squeeze/main apt 0.7.23.1 [1642kB]
Fetched 16.6MB in 3min 0s (92.3kB/s)
(Reading database ... 148233 files and directories currently installed.)
Removing libperl-dev ...
(Reading database ... 148237 files and directories currently installed.)
Preparing to replace dpkg 1.14.26 (using .../dpkg_1.15.3.1_i386.deb) ...
Unpacking replacement dpkg ...
Processing triggers for man-db ...
Setting up dpkg (1.15.3.1) ...
Installing new version of config file /etc/logrotate.d/dpkg ...
(Reading database ... 148232 files and directories currently installed.)
Preparing to replace perl-modules 5.10.0-22 (using .../perl-modules_5.10.0-25_all.deb) ...
Unpacking replacement perl-modules ...
Preparing to replace perl 5.10.0-22 (using .../perl_5.10.0-25_i386.deb) ...
Unpacking replacement perl ...
Preparing to replace libperl5.10 5.10.0-22 (using .../libperl5.10_5.10.0-25_i386.deb) ...
Unpacking replacement libperl5.10 ...
Preparing to replace perl-base 5.10.0-22 (using .../perl-base_5.10.0-25_i386.deb) ...
Unpacking replacement perl-base ...
Processing triggers for man-db ...
Setting up perl-base (5.10.0-25) ...
(Reading database ... 148235 files and directories currently installed.)
Preparing to replace apt-utils 0.7.21 (using .../apt-utils_0.7.23.1_i386.deb) ...
Unpacking replacement apt-utils ...
Preparing to replace libept0 0.5.26+b1 (using .../libept0_0.5.29_i386.deb) ...
Unpacking replacement libept0 ...
Preparing to replace aptitude 0.4.11.11-1+b1 (using .../aptitude_0.4.11.11-1+b2_i386.deb) ...
Unpacking replacement aptitude ...
Preparing to replace libapt-pkg-perl 0.1.23 (using .../libapt-pkg-perl_0.1.24_i386.deb) ...
Unpacking replacement libapt-pkg-perl ...
Preparing to replace apt 0.7.21 (using .../archives/apt_0.7.23.1_i386.deb) ...
Unpacking replacement apt ...
Processing triggers for man-db ...
Processing triggers for menu ...
Setting up apt (0.7.23.1) ...
Installing new version of config file /etc/cron.daily/apt ...
gpg: key 6070D3A1: "Debian Archive Automatic Signing Key (4.0/etch) <ftpmaster@debian.org>" not changed
gpg: key ADB11277: "Etch Stable Release Key <debian-release@lists.debian.org>" not changed
gpg: key BBE55AB3: "Debian-Volatile Archive Automatic Signing Key (4.0/etch)" not changed
gpg: key F42584E6: "Lenny Stable Release Key <debian-release@lists.debian.org>" not changed
gpg: key 55BE302B: "Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>" not changed
gpg: key 6D849617: "Debian-Volatile Archive Automatic Signing Key (5.0/lenny)" not changed
gpg: Total number processed: 6
gpg: unchanged: 6
Setting up libperl5.10 (5.10.0-25) ...
Setting up apt-utils (0.7.23.1) ...
Setting up libept0 (0.5.29) ...
Setting up aptitude (0.4.11.11-1+b2) ...
Setting up libapt-pkg-perl (0.1.24) ...
Setting up perl-modules (5.10.0-25) ...
Setting up perl (5.10.0-25) ...
Processing triggers for menu ...
localepurge: Disk space freed in /usr/share/locale: 12488K
localepurge: Disk space freed in /usr/share/man: 444K

Total disk space freed by localepurge: 12932K

Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Reading task descriptions... Done

Current status: 795 updates [-11].

Все что нужно было, aptitude сделал сам. Теперь, собственно, делаем апгрейд всей системы

# aptitude full-upgrade

В процессе обновления возникнут проблемы с зависимостями, которые решаются подтверждением обновления версии. Так же будут установлены новые пакеты.

Как восстановить сохраненный пароль в kopete

Для восстановления сохраненного пароля в kopete для jabber-аккаунта  можно воспользоваться следующим кодом на питоне:

from ConfigParser import ConfigParser
import sys
from kdecore import KStringHandler
config = ConfigParser()
config.read(".kde/share/config/kopeterc")
cryptedpass = config.get("Account_JabberProtocol_" + sys.argv[1], 'Password')
print KStringHandler().obscure(cryptedpass.decode('utf-8'))

Сохраняем код в файле ~/getpass.py и затем выполняем его:

# python ./getpass.py userid@jabber.org

В итоге получаем расшифрованный пароль для аккаунта 🙂

Если в скрипте заменить Account_JabberProtocol_ на Account_ICQProtocol_ то можно вытянуть из конфига kopete пароль от icq

Код нашел на этом блоге.

Для KDE4 код такой:

from ConfigParser import ConfigParser
import sys
from PyKDE4.kdecore import *
config = ConfigParser()
config.read('./kopeterc')
cryptedpass = config.get('Account_JabberProtocol_' + sys.argv[1], 'Password')
print KStringHandler.obscure(cryptedpass.decode('utf-8'))

Этот код для KDE4 любезно предоставил Lex