Mailserver – Postfix, IMAP, Maildrop a MySQL


Září 2011: Novou verzi návodu najdete na BCVlogu: Mailserver – Postfix, Dovecot a MySQL.


Úvod

Když jsem si s kolegou začal zařizovat webhosting, zjistil jsem, že bez virtuálních uživatelů pro mailserver to nepůjde. Protože již delší dobu používám jako SMTP server postfix, tak jsem začal hledat vhodné řešení s jeho využitím. Popíšu tu řešení, které jsem si vybral. Postfix jako SMTP server, Courier-IMAP jako IMAP (IMAPs) a POP3 (POP3s) server a Courier-Maildrop pro třídění přijaté pošty, to vše využívající databázi MySQL pro vedení uživatelských účtů a autorizaci uživatelů. Všechna pošta se uchovává ve formátu Maildir. Nejprve jsem to rozeběhl na distribuci Slackware, ale protože mám na serveru Debian, tak jsem přemigroval svůj počítač na Debiana a všechny další věci, které zde budu popisovat se týkají jen a pouze Debiana (i když myslím, že pro Slackware jsou taky platný 🙂


„Changelog“

leden 2006 
        poznámky k RedHatu a jeho klonům
        přidány další postupy pro generování hesel pro uživatele
        změněna struktura databáze:
          přidány tabulky postfix_email a postfix_trash
          tabulce postfix_users přidány sloupečky
            bypass_... pro amavis (zatím tu není zapsán)
        přidán základ "uživatelského" manuálu

Reklama 🙂

Protože se mi v mailboxu schází čím dál tím víc dotazů na konfiguraci mailserveru s uživateli v MySQL a počet mých nekomerčních (i komerčních) instalací se pěkně rozrůstá, dovolím si malou reklamu :-).

Rozhodl jsem se nabízet konfiguraci mailserveru i za penízky. Pokud máte zájem o konfiguraci mailserveru, který obsahuje něco z následujích věcí, napište mi email a domluvíme se. Pracuji vzdáleně, ale pokud je potřeba mohu přijet i k vám. Mám živnostenský list, který pokrývá tuto činnost, takže vystavím doklad. Mailserver nainstaluji na většinu běžně používaných distribucí (Debian, Mandrake, Red Hat a jeho kolny, SuSE, Gentoo a další…)

  • SMTP server, umožňuje odesílání pošty odkudkoliv po ověření uživatelským jménem a heslem
  • POP3/IMAP server, slouží pro přístup k poště
  • Quoty
  • Antivir
  • Antispam
  • Webmail
  • Vygenerování SSL certifikátů – všechny služby fungují i přes SSL, takže je zajišťen bezpečný přístup uživatelů
  • Podle přání nakonfiguju tak aby se uživatelské účty uchovávaly v databázi MySQL, LDAPu nebo klasicky v konfiguračních souborech na disku. Antivir a antispam umožňují povolení pouze pro konkrétní uživatele.
  • V případě nějakých „nestandardních“ požadavků se nebojte napsat, určitě najdeme použitelné řešení.

Příprava všeho potřebného

  • Postfix je ke stažení na webu www.postfix.org, v Debianu stačí nainstalovat balíčky postfix (SMTP server), postfix-tls a postfix-mysql (Podpora MySQL v postfixu).
  • Spamassassin je v debiáních balíčcích, takže stačí apt-get install spamassassin
  • Courier-IMAP roste na sf.net/projects/courier/, pro Debiana potřebujeme balíčky courier-imap, courier-imap-ssl, courier-pop, courier-pop-ssl, courier-authmysql.
  • Courier-Maildrop lze stáhnout ze stránky sf.net/projects/courier/, Debianisti mě teď asi moc rádi mít nebudou, ale je ho potřeba zkompilovat, protože debiání balíček nepodporuje MySQL. Zda maildrop podporuje MySQL zjistíte spuštěním s parametrem -v:
    tsunami:~# maildrop -v
    maildrop 1.6.3 Copyright 1998-2003 Double Precision, Inc.
    GDBM extensions enabled.
    Maildir quota extension enabled.
    Virtual user database via MySQL extension enabled.
    This program is distributed under the terms of the GNU General Public
    License. See COPYING for additional information.
    
  • MySQL databázi stáhnete (překvapivě) na stránce www.mysql.com, v Debianu jsou to balíčky mysql-server, mysql-client, mysql-common (a pro méně zdatné nebo pohodlné adminy také phpmyadmin), také potrřebujete balíček libmysqlclient-dev, bez kterého nezkompilujete maildrop.
  • Apache + php – apache se nachází na www.apache.org a php na www.php.net, pro debiana je snad instalace jasná 🙂

Jediný skutečný uživatel který bude v systému potřeba je virtual, ktery bude ve skupině virtual, jeho UID bude 5000 a GID skupiny virtual bude také 5000. Domácí adresář tohoto uživatele je /home/virtual a práva na ten adresář nastavíme pomocí chmod 700 /home/virtual

Příprava SW pro RHEL/CentOS

Pokud se rozhodnete instalovat mailserver na nějakém Red Hatu nebo z něj odvozeném systému, tak se vám asi bude hodit následující popis.

Zdroje pro YUM

Do konfigurace YUMu je potřeba přidat Dagův repozitář:

$ cat > /etc/yum.repos.d/dag.repo <<<"
[dag]
name=Dag-RHEL-Yum
baseurl=http://dag.linux.iastate.edu/dag/redhat/el$releasever/en/$basearch/dag
http://www.mirrorservice.org/sites/apt.sw.be/redhat/el$releasever/en/$basearch/dag
http://mirrors.ircam.fr/pub/dag/redhat/el$releasever/en/$basearch/dag
http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
enabled=1
gpgcheck=1
includepkgs=clamav clamav-devel clamav-db unrar amavisd-new nomarch arc lzop unarj \
ripole freeze cabextract zoo lzo perl-Convert-UU perl-Unix-Syslog unarj \
perl-TimeDate perl-Net-Server perl-MailTools perl-MIME-tools \
perl-IO-stringy perl-Convert-UUlib perl-Convert-TNEF perl-Convert-BinHex \
perl-Config-IniFiles perl-Compress-Zlib perl-CPANPLUS perl-BerkeleyDB \
perl-Archive-Zip perl-Archive-Tar
"

Nainstalovaný SW z repozitářů YUMu

cyrus-sasl
cyrus-sasl-devel
cyrus-sasl-md5
mysqlclient10
mysqlclient10-devel
expect
mysql-devel
mysql
gamin-devel
pcre
pcre-devel
spamassassin
procmail
clamav
clamav-db
perl-Date-Calc
perl-Bit-Vector
perl-DBD-MySQL
pam_mysql

Nainstalovaný SW z vlastních balíčků

courier-authlib
courier-authlib-userdb
courier-authlib-pipe
courier-authlib-mysql
courier-authlib-pipe
courier-authlib-mysql
courier-authlib-devel
courier-imap
maildrop-devel
maildrop-man
maildrop
postfix

Návod na kompilaci courieru je na jeho domácí stránce. Pro courier-imap a courier-authlib jsem si upravoval spec soubory, vykopal jsem z nich závislosti na postgresql(nebo tak něco, je to delší doba co jsem to dělal, až to budu dělat znova, tak si to pořádně zapíšu:-)). Soubory ke stažení: courier-imap.spec, courier-authlib.spec. Postfix je potřeba překompilovat, protože ten dodávaný v RHEL/CentOSu neumí spolupracovat s MySQL databází. Upravený spec souboru si můžete stáhnout: postfix.spec


Nastavení programů

MySQL

Instalaci a základní nastavení databáze MySQL do svého systému snad zvládne každý a kdo ne, tak ať si najde howto třeba na www.google.com.

Vytvoření databáze

Vytvoříme si databázi třeba s názvem postfix a dame na ní právo select uzivateli postfix s heslem postfix, kterého budeme používat pro přístup k datům.
Přihlásíme se k mysql serveru jako uživatel s potřebnými právy

$ mysql -u root -p
Enter password:

mysql> use postfix

Database changed
mysql>

a začneme vytvářet potřebné tabulky:

-- Databáze: `postfix`
-- 

-- --------------------------------------------------------

-- 
-- Struktura tabulky `maildrop_rules`
-- 

CREATE TABLE `maildrop_rules` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL default '0',
  `no` int(11) default NULL,
  `pravidlo` enum('if') NOT NULL default 'if',
  `hlavicka_pravidlo` enum('X-Spam-Flag','From','To','Cc','Bcc','List-Post','List-Id',
'Delivered-To','(From|Cc|To)','X-Listname') default 'From',
  `hlavicka_hodnota` varchar(255) NOT NULL default '',
  `akce` enum('to') NOT NULL default 'to',
  `cil` varchar(255) NOT NULL default '',
  `active` enum('y','n') NOT NULL default 'n',
  `komentar` varchar(255) NOT NULL default '',
  `mail2web` enum('y','n') NOT NULL default 'n',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_access`
-- 

CREATE TABLE `postfix_access` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `source` varchar(128) NOT NULL default '',
  `access` varchar(128) NOT NULL default '',
  `type` enum('recipient','sender','client') NOT NULL default 'recipient',
  PRIMARY KEY  (`id`), KEY `source` (`source`), KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_alias`
-- 

CREATE TABLE `postfix_alias` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `alias` varchar(128) NOT NULL default '',
  `destination` varchar(128) NOT NULL default '',
  PRIMARY KEY  (`id`), KEY `alias` (`alias`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_relocated`
-- 

CREATE TABLE `postfix_relocated` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `email` varchar(128) NOT NULL default '',
  `destination` varchar(128) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_transport`
-- 

CREATE TABLE `postfix_transport` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `domain` varchar(128) NOT NULL default '',
  `destination` enum('local:','virtual:','maildrop:') NOT NULL default 'local:',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `domain` (`domain`),
  KEY `domain_2` (`domain`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_trash`
-- 

CREATE TABLE `postfix_trash` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `email` varchar(128) NOT NULL default '',
  `destination` varchar(128) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_users`
-- 

CREATE TABLE `postfix_users` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `email` varchar(128) NOT NULL default '',
  `crypt` varchar(128) NOT NULL default '',
  `clear` varchar(128) default NULL,
  `name` tinytext,
  `uid` int(11) unsigned NOT NULL default '5000',
  `gid` int(11) unsigned NOT NULL default '5000',
  `homedir` tinytext NOT NULL,
  `maildir` tinytext NOT NULL,
  `quota` tinytext,
  `access` enum('Y','N') NOT NULL default 'Y',
  `postfix` enum('Y','N') NOT NULL default 'Y',
  `spam_tag_level` int(11) default NULL,
  `spam_tag2_level` int(11) default NULL,
  `spam_kill_level` int(11) default NULL,
  `message_size_limit` bigint(20) default NULL,
  `bypass_virus_checks` enum('Y','N') default NULL,
  `bypass_header_checks` enum('Y','N') default NULL,
  `bypass_spam_checks` enum('Y','N') default NULL,
  `bypass_banned_checks` enum('Y','N') default NULL,
  PRIMARY KEY  (`id`), UNIQUE KEY `email` (`email`), 
  KEY `email_2` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_virtual`
-- 

CREATE TABLE `postfix_virtual` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `email` varchar(128) NOT NULL default '',
  `destination` mediumtext NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

-- 
-- Struktura tabulky `postfix_email`
-- 

CREATE TABLE `postfix_email` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `email` varchar(128) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Kdyby se vám zdálo, že je v nějaké tabulce sloupeček navíc, případně je celá tabulka zbytečná, tak je to v pořádku 🙂 Jsou to pozůstatky z nějaké první verze howto. Funkčně to ničemu nevadí.

Popis tabulek

postfix_alias

Tabulka se používá pouze při lokálním doručování, neuplatní se pokud doručujete virtuálním uživatelům. Je to také jediná tabulka, která umožňuje přímo spouštět externí skripty.

postfix_alias
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
alias Alias, který chcete přesměrovat.
destination Cíl přesměrování. Může se použít jedna či více emailových adres(oddělené čárkou), soubor pro doručení do souboru, roura „|“ pro spuštění příkazu a předání přez STDIN nebo lze použít :include:/file/name a email bude poslán na adresy uvedené v daném souboru.
postfix_relocated

Tato tabulka slouží pouze pro oznámení o tom, že na dané emailové adrese nelze uživatele zastihnout. Oznámí novou adresu kde se uživatel nachází.

postfix_relocated
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
email Originální emailová adresa.
destination Nová adresa. kde se uživatel nachází. Je také možné zadat unknown, když neznáme uživatelovu novou adresu.
postfix_transport

postfix_transport
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
domain Doména, pro kterou zpracovávám poštu.
destination Tato položka obsahuje cil doručení pro postfix. local: pro lokální doručování,maildrop: pro maily, které budou tříděny a virtual: pro přímé doručení virtuálním účtům. Lze použít i jiné cíly doručení, více viz man transport
postfix_users

postfix_users
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
email Email uživatel, zároveň slouží jako login pro imap/pop3
crypt Zašifrované heslo pro courier-imap a pop3, sifrovanou formu ziskame napriklad pomoci programu mkpasswd --hash=md5 heslo(jeden človíček měl problémy s tím, že mkpasswd připojovalo na konec vygenerovaného řetězce \n tak bacha na to), případně můžete použít i openssl passwd -1 nebo funkci crypt v php:crypt("foobar",'$1$blahblahg$')
name Jméno uživatele není důležité
uid The uid (User ID) of the vmail-user, that we are going to create. This is the only unix-user, that is needed for virtual-delivery, since there still must be some kind of ownership on the stored mails.
You can also create your local unix-users in this table, if you want to give them the possibility to use CRAM-MD5 challenging and maybe give them another password, than the one used for local access. The fun thing about Courier is, that it will check both this and the local password, so that the unix-user will be able to authentificate with both passwords, however CRAM-MD5 challenging can not be used on allready encryptet passwords.
gid GID virtuálního uživatele.
homedir Absolutní cesta k domácímu adresáři uživatele. V mém případě to je /home/virtual pro virtuální uživatele.
maildir Relativní cesta k maildiru. pro postfix je formát Maildir/ pro lokální uživatele. Používám formát domena.tld/user/. Cesta musí končit lomítkem, jinak by to nebyl maildir!
quota Quota pro postfix funguje pouze s mailboxem a ne s maildirem ktery tu používáme. Jestliže chceme použít quotu s maildirem, tak máme možnost zvolit maildrop (popíšu níž) nebo patch přímo pro postfix, který je na adrese http://web.onda.com.br/nadal/
access Povolení/zakázání imap, pop3 a smtp-auth
postfix Povolení/zakázání účtu pro postfix a maildrop.
antispam Povolení/zakázání spamassasina. Spamassasin se spouští jen přez maildrop a to ještě pro vybrané uživatele(výkon stroje je přeci jen limitován :-).
postfix_virtual

Tabulka slouží jako náhrada za /etc/aliases pro virtuální uživatele.

postfix_virtual
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
email Zde se píše alias pro cílovou adresu (políčko destination).
Formát:
„user@domena.tld“ – vše co přijde na tuto adresu bude přeposláno na cílovou adresu (políčko destination)
„@domena.tld“ – vše co přijde na tuto doménu se přepošle na na cílovou adresu (políčko destination)
destination Cíl přesměrovní v podobě jedné a více emailových adres (oddělují se čárkou)
postfix_trash
postfix_trash
Sloupec Popis
id Nění potřeba, je to jedinečný identifikátor
email Doména, pro kterou zapneme doménový koš. Zápis je ve tvaru @domena.tld, pokud chcete aby nějaká adresa z této doméney nekončila v doménovém koši, je třeba abyste ji uvedli v tabulce postfix_email
destination Cílová adresa, kam se přeposílá všechna pošta, která směřuje do doménového koše. Adresa může být z domény, pro kterou je nastavené doménový koš, hlavně je potřeba aby to byl existující uživatelský účet.
postfix_email
postfix_email
Sloupec Popis
id Nění potřeba, je to jedinečný identifikátor
email Emailová adresa, která je vyloučena z doménového koše a je doručovaná přímo do uživateli.
postfix_access
postfix_virtual
Sloupec Popis
id Není potřeba, je to jedinečný identifikátor
source If type is set as follows, this is what happens:

  • recipient
    – obsahuje domena.tld nebo uzivatel@domena.tld. Depending on your choice it allows discards either all mail that should go to „domain.top“ or overrides other filters to allow mail from that domain. Zadání samostatné emailové adresy dělá to samé, ale jen pro ni.
  • sender
    – to samé jako recipient, ale platí pro adresu odesílatele.
  • client
    domena.tld – přiřadím na whitelist/blacklist všechny emaily z počítačů. které patří do této domény.
access Možné hodnoty: OK, REJECT nebo třeba 550 Too much spam in this world. kde 550 je číslo chyby a Too much a spam in this world. je slovní informace.
type Možné hodnoty: recipient, sender, client.

Postfix

Základní nastavení

Konfigurační soubory postfixu jsou v adresáři /etc/postfix (nebo také v /usr/local/etc/postfix).

master.cf

V souboru jsou potřeba následující řádky:

smtp inet  n - - - - smtpd
virtual unix - n n - - virtual
main.cf

nastavíme schránky do formátu Maildir:

home_mailbox = Maildir/

Oznámíme postfixu kde má hledat potřebné tabulky:

alias_maps            = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps        = mysql:/etc/postfix/mysql-relocated.cf
transport_maps        = mysql:/etc/postfix/mysql-transport.cf
virtual_maps          = mysql:/etc/postfix/mysql-virtual.cf \
mysql:/etc/postfix/mysql-email.cf mysql:/etc/postfix/mysql-trash.cf

virual_maps má definovaných víc konfiguračních souborů, mysql-virtual.cf použijeme pro definici „aliasů“ pro virtuální uživatele (náhrada za /etc/aliases), mysql-email.cf je důležitý pro doručování v případě, že máte definovaný doménový koš. Pokud je v tabulce postfix_email uveden email a zároveň je na danou doménu definován doménový koš, bude email doručen do uživatelovy schránky a ne do doménového koše. No a v mysql-trash.cf je definována tabulka pro doménové koše.

a nastavíme lokální doručování:

local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

Dále nastavení pro virtuální uživatele:

virtual_mailbox_base = /home/virtual
virtual_mailbox_maps  = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_uid_maps      = mysql:/etc/postfix/mysql-virtual-uid.cf
virtual_gid_maps      = mysql:/etc/postfix/mysql-virtual-gid.cf
      
smtpd_recipient_restrictions = check_recipient_access mysql:/etc/postfix/mysql-recipient.cf,
                               reject_unknown_sender_domain,
                               permit_mynetworks,
                               permit_sasl_authenticated,
                               check_relay_domains,
                               reject
      
mysql-aliases.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_alias
select_field = destination
where_field  = alias
hosts        = 127.0.0.1
mysql-client.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_access
select_field = access
where_field  = source
additional_conditions = and type = 'client'
hosts        = 127.0.0.1
mysql-recipient.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_access
select_field = access
where_field  = source
additional_conditions = and type = 'recipient'
hosts        = 127.0.0.1
mysql-relocated.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_relocated
select_field = destination
where_field  = email
hosts        = 127.0.0.1
mysql-sender.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_access
select_field = access
where_field  = source
additional_conditions = and type = 'sender'
hosts        = 127.0.0.1
mysql-transport.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_transport
select_field = destination
where_field  = domain
hosts        = 127.0.0.1
mysql-virtual.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_virtual
select_field = destination
where_field  = email
hosts        = 127.0.0.1
mysql-virtual-maps.cf
user                  = postfix
password              = postfix
dbname                = postfix
table                 = postfix_users
select_field          = maildir
where_field           = email
additional_conditions = and postfix = 'y'
hosts                 = 127.0.0.1
mysql-virtual-gid.cf
user                  = postfix
password              = postfix
dbname                = postfix
table                 = postfix_users
select_field          = gid
where_field           = email
additional_conditions = and postfix = 'y'
hosts                 = 127.0.0.1
mysql-virtual-uid.cf
user                  = postfix
password              = postfix
dbname                = postfix
table                 = postfix_users
select_field          = uid
where_field           = email
additional_conditions = and postfix = 'y'
hosts                 = 127.0.0.1
mysql-email.cf
user         = postfix
password     = postfix
dbname       = postfix
table        = postfix_email
select_field = email
where_field  = email
hosts        = 127.0.0.1

SMTPs a AUTH

Nastavení tls pro postfix je celkem jednoduché, vytvoříme adresář /etc/postfix/ssl/ do kterého umístíme ssl certifikáty a upravíme soubor /etc/postfix/main.cf

Pro ověřování uživatelů použijeme SASL.

main.cf
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s 
tls_random_source = dev:/dev/urandom

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = mail.domena.tld
broken_sasl_auth_clients = yes
Generování certifikátu

Vygenerujeme certifikáty, které potřebujeme. Provádíme jako uživatel root.

openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

<- zadejte heslo pro smtpd.key

chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr

<- Zadejte heslo pro smtpd.key
<- Zkratka země („CZ“)
<- Název státu („Czech Republic“)
<- Město
<- Název organizace
<- FQDN („mail.domena.tld“)
<- Emailova@adresa.tld
Další informace jsou volitelé

openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt

<- zadejte heslo pro smtpd.key

openssl rsa -in smtpd.key -out smtpd.key.unencrypted

Zadejte heslo pro smtpd.key.

mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

<- Zadejte heslo pro smtpd.key
<- Zkratka země („CZ“)
<- Název státu („Czech Republic“)
<- Město
<- Název organizace
<- FQDN („mail.domena.tld“)
<- emailova@adresa.tld

SASL2

Pro ověření přihlášení uživatele při odesílání pošty přes SMTPs protkol použijeme stávající MySQL databázi. SASL2 nastavíme tak aby používal pam_mysql.

smtpd.conf

Nastavení SASL2 je v debianu v souboru /etc/postfix/sasl/smtpd.conf.

log_level: 3
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
main.cf

Je potřeba trochu upravit main.cf:

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject

smtpd_recipient_restrictions = permit_sasl_authenticated,...
saslauthd

Pro saslauthd je třeba přidat pár parametrů (hlavně jde o -r, který způsobí, že se bude předávat celá emailová adresa a ne jen username), buď je můžete na tvrdo napsat do spouštěcího skriptu nebo je v Debianu můžete zadat do soubouru /etc/default/saslauthd:

START=yes
PARAMS="-r -m /var/spool/postfix/var/run/saslauthd"
MECHANISMS="pam"

Adresář /var/spool/postfix/var/run/saslauthd si vytvořte, protože zřejmě nebude existovat. Během hraní si s saslauth jsem si ještě udělal symlink ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd.

/etc/pam.d/smtp

Konfigurace PAM knihovny je v souboru /etc/pam.d/smtp:

auth sufficient pam_mysql.so user=DBUZIVATEL passwd=DBHESLO host=localhost \
 db=postfix table=postfix_users usercolumn=email passwdcolumn=clear
auth sufficient pam_mysql.so user=DBUZIVATEL passwd=DBHESLO host=localhost \
 db=postfix table=postfix_users usercolumn=email passwdcolumn=crypt crypt=1 md5=y
auth required pam_deny.so

account sufficient pam_mysql.so user=DBUZIVATEL passwd=DBHESLO host=localhost \
 db=postfix table=postfix_users usercolumn=email passwdcolumn=crypt where=postfix=Y
account required pam_deny.so
          

Zalomení řádků v konfiguráku pamu zrušte, přidal jsem ho sem jen kvůli lepšímu formátování textu.

Řádek s passwdcolumn=clear můžete vynechat, mám ho tam z důvodu zpětné kompatibility s první verzí tohoto howto. Dřív jsem měl pro ověření SMTP heslo v plaintextu.

master.cf

Nutné úpravy v souboru master.cf, je potřeba povolit toto:

smtps  inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

Použití SMTPs a autorizace je velmi jednoduché, poštovním klientu si nastavte pro odchozí server (SMTP):

  • Port: 465
  • Uživatel: emailova@adresa
  • Heslo: to je snad jasne, ne? 🙂
  • Bezpečnost – šifrování: SSL
  • Metoda autentizace: LOGIN

SpamAssassin

Pěkný generátor konfigurace pro SpamAssassin je na stránce http://www.yrex.com/spam/spamconfig.php

Zastarelé: Spamassassina spouštím při startu jako démona (program spamd) a pak kontrolu pošty spouštím z maildropu pomoci programu spamc přímo pro konkrétního uživatele. Je to zahrnuto i do skript; pro generování konfiguračních souborů maildropu. Skript se koukne do tabulky postfix_users do sloupečku antispam a když tam najde y tak se bude spouštět spamassasin.

Maildrop

Pár lidiček se mě ptalo proč jsem si zvolil Maildrop pro lokální doručování? Odpověď je velmi jednoduchá: narozdíl od procmailu si umí základní informace o uživateli stáhnout z MySQL databáze, nezatěžuje při zpracovávání emailu počítač jako procmail (narozdíl od procmailu pasuje pouze hlavičku emailu) a taky se mi víc líbí zápis pravidel 🙂

Instalace


UPDATE: pro novější verze maildropu nemusíte provádět překompilvání s podporou MySQL (ono to ani nejde). Konfigurace maildropu byla přesunuta do authdaemona (takže používá stejný konfigurák pro připojení k MySQL jako courier-imap)


Použil jsem verzi 1.6.3, překlad ze zdrojového kódu byl bez problémů.

$ tar -xjf maildrop-1.6.3.tar.bz2
$ cd ./maildrop-1.6.3

$ ./configure --prefix=/usr --enable-maildropmysql \
--enable-maildirquota --with-devel \
--with-mysqlconfig=/etc/maildrop/maildropmysql.cf \
--enable-syslog=1 --enable-restrict-trusted=0 \
--enable-sendmail=/usr/sbin/sendmail --with-etcdir=/etc/maildrop \
--enable-maildrop-uid=virtual --enable-maildrop-gid=virtual

$ make
su - root
# make install
# make install-man

Nastavení

Do souboru /etc/postfix/master.cf přidejte tyto dva řádky:

maildrop  unix  -       n       n       -       -       pipe
    flags=R user=virtual:virtual argv=/usr/bin/maildrop -V1 -d ${recipient}

Konfigurace maildropu pro přístup k MySQL je uložená v souboru /etc/maildrop/maildropmysql.cf:

hostname localhost
port 3306
database postfix
dbuser login-maildropu-do-MySQL
dbpw heslo-maildropu-do-MySQL
dbtable postfix_users
default_uidnumber 5000
default_gidnumber 5000
uid_field email
uidnumber_field uid
gidnumber_field gid
maildir_field maildir
homedirectory_field homedir
quota_field quota
mailstatus_field postfix
where_clause and postfix='y'

Pro databázi MySQL musíme mít uživatele pro přístup maildropu k datům, můžem použít uživatele co máme pro postfix, ale já jsem si udelal jiného kvůli snadnějšímu ladění (z logu MySQL se pak snadno pozná jestli maildrop přistupuje k databázi a jak se jí dotazuje)

v adresáři /home/virtual vytvoříme soubor .mailfilter s obsahem:

LOGNAME=tolower($LOGNAME)
include "/home/virtual/.mailfilters/$LOGNAME"

.mailfilter vkládá konfigurační soubor pro každého virtuálního uživatele (/home/virtual/.mailfilters/uzivatel@domena.tld). Postfix použije maildrop v případě, že změníme transport pro doménu na "maildrop:".

Pro každého uživatele, který je v doméně s transportem maildrop: je potřeba mít alespoň minimální konfigurační soubor:

FROM='uzivatel@domena.tld'

to "/home/virtual/domena.tld/uzivatel/."

Pozor, maildrop narozdíl od procmailu sám od sebe nezakládá maildiry!

Pro uchováváni pravidel pro třídění pošty je v MySQL použita tabulka maildrop_rules z které pomocí skriptů můžem snadno vygenerovat konfigurační soubory maildropu.

Skripty se spouštějí pod uživatelem virtual, skript md-gen vygeneruje konfigurační soubory pro všechny uživatele. Skript md-gen-user jen pro uživatele, jehož emailovou adresu zadáme jako parametr při spouštění. Skripty automaticky ukládají konfigurační souboru do složky /home/virtual/.mailfilters/. Pokud nemá uživatel žádná pravidla pro maildrop nadefinvána, vytvoří skript minimální konfigurační soubor, který je potřeba.

Před prvním použitím skriptů si nastavte v jejich záhlaví jméno a heslo pro přístup do databáze. Uživatel pod kterým do databáze budete přistupovat musí mít právo na SELECT v tabulce postfix_users a maildrop_rules.

Quota

Nastavení quoty pro maildrop v tabulce postfix_users, buňce quota: S je použito pro maximální velikost všech zpráv v maildiru a C je použito pro počet zpráv v maildiru. Hodnota „5000000S,300C“ nastaví quotu quota na 5,000,000 bytů nebo 300 zpráv, záleží co se splní dřív. Jestliže je tento sloupec prázdný, quota se neuplatňuje.

Courier

Na Debianu se konfigurační soubory Courieru nacházejí v adresáři /etc/courier.

imapd

Do konfiguračního souboru imapd přidejte (případně pozměňte)

AUTHMODULES="authdaemon"
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
                THREAD=REFERENCES SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"
IMAPDSTART=YES

pop3d

Nastavení pop3 se provede v souboru pop3d

AUTHMODULES="authdaemon"
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
POP3DSTART=YES

authdaemonrc

authmodulelist="authmysql authpam"

authmysqlrc

MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_DATABASE postfix
MYSQL_USER_TABLE        postfix_users

MYSQL_LOGIN_FIELD       email
MYSQL_CRYPT_PWFIELD     crypt
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_HOME_FIELD        homedir
MYSQL_MAILDIR_FIELD     maildir
MYSQL_NAME_FIELD        name
MYSQL_WHERE_CLAUSE      access='y'

Uživatelský manuál

Přidání nové domény do obsluhy postfixu

  • tabulka postfix_access
  • source: domena.tld
  • access: OK
  • type: recipient
  • tabulka postfix_transport
    • domain: domena.tld
    • destination: maildrop: – je možné i lokální doručování, stačí zadat local: nebo jinou hodnotu, podle toho co chcete s poštou pro tuhle doménu dělat (třeba přeposlat na jiný SMTP server: smtp:jiny.server.tld).

    Založení uživatelského účtu

    • tabulka postfix_users
    • email: emailova@adresa
    • crypt: md5 hash hesla získaný z mkpasswd –hash=md5 heslo
    • name: Uzivatelovo Jméno nepovinné
    • uid: 5000
    • gid: 5000
    • homedir: /home/vritual
    • maildir: domena.tld/user/Maildir/
    • quota: S je pouzito pro maximální velikost vsech zpráv v maildiru a C je pouzito pro pocet zpráv v maildiru. Hodnota „5000000S,300C“ nastaví quotu quota na 5,000,000 byt nebo 300 zpráv, zálezí co se splní dív. Jestlize je tento sloupec prázdný, quota se neuplatuje. Je mozné nastavit napíklad jen 5000000S.
    • access: Y ­ je vzdy poteba jinak se nebude nic dorucovat
    • bypass_virus_checks: pokud vlozíte Y nebude se provádt kontrola vir
    • bypass_spam_checks: to samé pro spam
    • bypass_header_checks: to samé pro kontrolu hlavicek emailu

    Po zalození uzivatele do databáze je poteba spustit skript md-gen.pl nebo md-gen-user.pl aby se vytvoil konfiguracní soubor pro maildrop.

    Mám funkční řešení tak, že není nutné generovat uživateli filtr pro maildrop. Potřebné adresáře se založí samy při příchodu prvního emailu. Uživatelský soubor s pravidly maildropu se použije pouze v případě, že mu chcete umožnit jeho vlastní pravidla pro třídění.

    Přidání adresy nebo serveru na blacklist

    Někdy se hodí přidat adresu nebo rovnou celý server na blacklist tak aby byl odmítnut nějakým „chytrým“ hlášením.

    • tabulka postfix_access
    • source: emailova@adresa, jméno serveru nebo doména
    • access: 550 Nemam rad spam!
    • type: „sender“ nebo „recipient“, záleží odkud a kam daný email putuje

    Zdroje

    Autor

    $Id: mailserver.html,v 1.8 2006/01/13 21:48:45 tsunami Exp $

    Instalační server pro Solaris x86 na SPARC stroji

    • instalační server – Solaris 10, SPARC
    • instalovaný stroj – Solaris 10, x86

    Nainstalujte poslední verzi JET. Pokud máte možnost, tak z EISCD jinak použijte verzi stažitelnou ze stránek SUNu.

    Přidáme EISCD do JET:

    Pokud máte přístup k EISCD, tak je přidáme do JETu

    • z prvního EISCD spustíme install/copy-cd2sun.sh
    • z dalších spustíme install/add-cd2sun.sh
    • pak z adresáře /sun spustíme /opt/jet/bin/copy_eiscd

    Přidání Solarisu 10 x86 do JET

    Pro přidání Solarisu pro x86 platformu do JET, který běří na SPARC platformě potřebujeme už jeden nainstalovaný x86 stroj se Solarisem. Z něj si přečteme první instalační CD x86 Solarisu.

    Z nainstalovaného Solarisu x86 si vyexportujte adresáře s CD přes NFS:

    • v souboru /etc/dfs/dfstab:
    • share -F nfs -o ro,anon=0 /cdrom/cdrom0/s0
    • share -F nfs -o ro,anon=0 /cdrom/cdrom0/s2
  • a restartujte NFS server
  • na SPARC serveru s JET:
    • cd /net/x86-server/cdrom/cdrom0/s2
    • ./add_to_install_server

    První řádek z /opt/jet/Products/base_config/solaris/make_dhcp spustíme jako root:

    dhcpconfig -D -r SUNWfiles -p /var/tmp

    do /opt/jet/etc/jumpstart.conf dopište/změňte

    JS_DHCP_VENDOR="i86pc"
    JS_CLIENT_MANAGEMENT="dhcp bootp"

    Pokud chcete přidat dhcp pro další počítače na platformě SPARC, je třeba provést zápis ve stylu:

    JS_DHCP_VENDOR="i86pc SUNW,UltraAX-i2"

    ten divnej identifikátor získáte z příkazu uname -i spuštěném na daném stroji.

    Cestu /opt/jet/bin pridame uzivateli root do PATH

    Vlastní instalace

    Přidání šablony pro našeho klienta

    make_template -f -A i86pc -E 00:0d:60:5f:2b:0a jmeno-klienta

    Vyrobil jsem si výchozí šablonu s názvem sablona, použiju ji pak takhle:

    make_template -T sablona -f -A i86pc -O 10 -E 0:9:3d:12:f8:8e HOSTNAME eiscd

    Editace šablony

    vi /opt/jet/Templates/jmeno-klienta

    nastavím IP adresu klienta:

    base_config_sysidcfg_ip_address=

    případně zruším/nastavím přesměrování na seriový port:

    base_config_x86_console=““

    vyrobení klienta:

    make_client -F jmeno-klienta

    x86 stroj umí většinou bootovat pomocí PXE ze sítě. SPARC masiny je pro boot z dhcp potřeba bootovat pomocí:

    boot net:dhcp - install

    Instalace Solarisu 10 na V20z (vzdáleně):

    • Přihlásíme se na v20z do SP
    • získáme MAC adresu:
      platform get mac
    • nastavíme přesměrování seriové konzole
      platform set console -s sp -e -S 9600
      platform console
  • přihlásíme se podruhé do SP na v20z a zapneme ji
    platform set power state on
  • v konzoli si zvolíme boot ze sítě
  • pokud instalujeme na vytvořený RAID, může se na V20z stát, že solaris uvidí jen první 4 GB disku, potom je dobré z příkazového řádku instalátoru provést
    raidctl -d c1t0d0

    tím se raid zruší, pak provedeme reboot a znovu spustíme instalaci bootem ze sítě

  • až po nainstalování Solarisu se vytvoří RAID1 pomocí příkazu:
    raidctl -c c1t0d0 c1t1d0
  • instalace končí v okamžiku, kdys e na obrazovce objeví něco jako:
    JumpStart is complete @ Sat Oct  1 15:46:34 MEST 2005
  • heslo na uživatele root je root
  • Někdy je po instalaci potřeba přegenrovat klíče k ssh pomocí příkazu:
    /lib/svc/method/sshd -c
  • nahodíme ssh:
    svcadm clear ssh
    svcadm restart ssh
  • vytvoříme RAID1 na integrovaném řadiči:
    # raidctl -c c1t0d0 c1t1d0
    	# raidctl
    RAID            RAID            RAID            Disk
    Volume          Status          Disk            Status
    ------------------------------------------------------
    c1t0d0          RESYNCING       c1t0d0          OK
                                    c1t1d0          OK
  • vyčištění serveru od starých šablon:
    sh /tftboot/rm.XXXXXXXXX
    		dhtadm -D -m NAZEVSABLONY
                    pntadm -D NAZEVSABLONY 179.100.1.0
  • případně promazání /etc/hosts a /etc/ethers
  • stav DHCP overime prikazy
    dhtadm -P
    pntadm -P 192.168.1.0
  • stav JETu
    ls /opt/jet/Templates/
    ls /opt/jet/Clients/
  • LDAP jako zdroj adres pro poštovního klienta

    Většina poštovních klientů umí použít adresářový server jako zdroj pro získávání kontaktů. Protože používám Thunderbird a Mutt, uvedu zde jejich konfiguraci.

    Thunderbird

    Jako zdroj pro kontakty si přídáme LDAP následujícím postupem.

    • Pustíme Thunderbird a otevřeme adresář (Ctrl+2)
    • V adresáři zvolíme File->New->LDAP Directory…
      LDAP jako zdroj adres pro poštovního klienta
    • Vyplníme údaje potřebné pro připojení k LDAP serveru
      • Name: ldap.example.net
      • Hostname: ldap.example.net
      • Base DN: ou=people,dc=example,dc=net
      LDAP jako zdroj adres pro poštovního klienta
    • Na screenshotu je vyplněná ještě položka Bind DN. Tato položka umožní přihlášení k LDAPu pod konkrétním uživatelem. Využijete jí, pokud máte v LDAPu zakázán anonymní přístup. O heslo budete požádání při prvním přístupu do LDAPu.
    • Dále si zapneme automatické doplňování adres i pro LDAP
      • V Thunderbirdu zvolíme v menu Edit->Preferences
      • Na záložce Composition si zaškrtněte v sekci Address Autocompletion i položku Directory Server.
      LDAP jako zdroj adres pro poštovního klienta

    Mutt

    Mutt je jeden z nejpoužívanějších textových MUA v UNIXovém světě. I mutt umí spolupracovat s LDAPem při výběru adres během psaní nového emailu. Sice neumí s LDAPem spolupracovat nativně, ale přes pomocný skript, ale to nám přece nevadí :-). Na Internetu nalezenete různé skripty, jeden z nich sem dám jako příklad. Návod na rozchození je na začátku skriptu. Pokud se nemusíte k LDAPu přihlašovat jménem a heslem, nechte nastavení prázdné ($username = „“;, $password = „“;).

    #! /usr/bin/perl -Tw
    # 2005-02-24: Fixed for AD/Exchange 2003 & Unicode characters,
    # anders@bsdconsulting.no If you find this script useful, let me know. :-)
    #
    # 2000/2001: Original version obtained from Andreas Plesner Jacobsen at
    # World Online Denmark. Worked for me with Exchange versions prior to Exchange
    # 2000.
    #
    # Use it with mutt by putting in your .muttrc:
    # set query_command = "/home/user/bin/mutt-ldap.pl '%s'"
    #
    # Then you can search for your users by name directly from mutt. Press ^t
    # after having typed parts of the name. Remember to edit configuration
    # variables below.
    
    use strict;
    use Encode qw/encode decode/;
    use vars qw { $ldapserver $domain $username $password $basedn };
    
    # --- configuration ---
    $ldapserver = "domaincontroller.yourdomain.com";
    $domain = "YOURDOMAIN";
    $username = "myuser";
    $password = "mypassword";
    $basedn = "ou=companyxy,dc=companyxy,dc=tld";
    # --- end configuration ---
    
    #my $search=shift;
    my $search=encode("UTF-8", join(" ", @ARGV));
    
    if (!$search=~/[\.\*\w\s]+/) {
      print("Invalid search parameters\n");
      exit 1;
    }
    
    use Net::LDAP;
    
    my $ldap = Net::LDAP->new($ldapserver) or die "$@";
    
    $ldap->bind("$domain\\$username", password=>$password);
    
    my $mesg = $ldap->search (
      base => $basedn,
      filter => "(|(cn=*$search*) (rdn=*$search*) (uid=*$search*) (mail=*$search*))",
      attrs => ['mail','cn']
    );
    
    $mesg->code && die $mesg->error;
    
    print(scalar($mesg->all_entries), " entries found\n");
    
    foreach my $entry ($mesg->all_entries) {
      if ($entry->get_value('mail')) {
        print($entry->get_value('mail'),"\t",
          decode("UTF-8", $entry->get_value('cn')),"\tFrom Exchange LDAP database\n");
      }
    }
    $ldap->unbind;
    

    Tomcat a uživatelské SSL certifkáty

    Po nějaké době jsem se zase setkal s požadavkem na zabezpečení Tomcat serveru, tak aby na HTTPS mohl přistupovat pouze klient, který má správným SSL certifikát v browseru. Dělal jsem to několikrát, ale už je to trochu dýl a neměl jsem o tom žádný zápis, proto jsem napsal tento článek.

    Návod na použité SSL v Tomcatu najdete na jeho domácím webu v dokumentaci.

    Pro povolení HTTPS je třeba upravit konfigurační soubor server.xml, odkomentujte nebo tam dopište následující záznam. Předpokládám, že server běží pod uživatelem tomcat.

      <Connector port="8443" maxHttpHeaderSize="8192"
             maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
             enableLookups="false" disableUploadTimeout="true"
             acceptCount="100" scheme="https" secure="true"
             clientAuth="true" sslProtocol="TLS" keystorePass="HESLICKO" />
    
    • keystorePass: heslo k ~tomcat/.keystore
    • clientAuth: povolení nebo zakázání autorizace klientů x509 certifikátama

    Certifikát certifikační autority (ca.crt, ca.key) jsem měl už z dřívější doby a použiju ho dál pro podepisování klientských certifikátů.


    Certifikát pro server

    Vygenerování požadavku na certifikát pro server

    keytool -genkey -alias tomcat -keyalg RSA -keystore ~tomcat/.keystore

    vyexportování požadavku do .csr souboru

    keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore ~tomcat/.keystore

    certifikační autorita podepíše certifikát

    openssl x509 -CA cert/ca.crt -CAkey cert/ca.key -CAserial ca/serial \
     -req -in csr/server.req.csr -out cert/client/server.crt -days 365

    Import certifikátu certifikační autority

    keytool -import -alias root -keystore ~tomcat/.keystore \
     -trustcacerts -file ca.crt

    Pokud se chcete ověřovat certifkátama, je třeba přidat certifikát CA do $JAVA_HOME/jre/lib/security/cacerts (defaultni heslo je "changeit" :-) ):

    keytool -import -alias root -keystore $JAVA_HOME/jre/lib/security/cacerts \
     -trustcacerts -file ca.crt

    Import našeho certifikátu, který jsme dostali od CA na základě našeho requestu

    keytool -import -alias tomcat -keystore ~tomcat/.keystore \
     -trustcacerts -file certifikat.crt

    Je dobré zkontrolovat co je v .keystore pomocí

    keytool -list

    Certifikáty pro uživatele (do prohlížeče)

    vygenerovani pozadavku

    openssl req -new -newkey rsa:1024 -nodes -out client1.req -keyout client1.key

    podepíšeme žádost

    openssl x509 -CA ca.crt -CAkey ca.key -CAserial demoCA/serial \
     -req -in client1.req -out client1.pem -days 365

    vygenerujeme pkcs12 formát

    openssl pkcs12 -export -clcerts -in client1.pem -inkey client1.key \ 
    -out client1.p12 -name "my_client_certificate"

    a ten naimportujeme do browseru, do browseru se take musi naimportovat certifkat CA (ca.crt)

    Obnova path_to_inst v Solarisu

    Při velké změně hardware (třeba výměna FC-AL disků, ze kterých bootujete) se může v Solarisu stát, že nenabootujete. Velmi často to je způsobené neaktuálním soubourem /etc/path_to_inst. Způsob jak obnovit tento souboru je relativně snadný, jen si to chce párkrát zkusit 🙂

    Solaris 10

    1. Nabootujeme do single režimu z CD nebo sítě.
    2. přimountujeme root filesystem do /a
      • mount /dev/dsk/c1t0d0s0 /a
    3. Zazálohujeme starý soubour
      • mv /a/etc/path_to_inst /a/etc/path_to_inst-BAK
    4. Vygenerujeme nový path_to_inst a potřebná zařízení
      • devfsadm -C -r /a -p /a/etc/path_to_inst
    5. umount /a; reboot

    Solaris 8, 9

    V Solarisu 8 a 9 je obnova snadnější, stačí /etc/path_to_inst smazat a nabootovat s parametrem -ar, -a způsobí, se vás zeptá na pár věcí a jednou z nich je i to jestli chcete vytvořit nový /etc/path_to_inst. -r přegeneruje záznamy v /dev/ a /devices/.

    Pokud máte disky ze kterých bootujete zrcadlený pomocí SDS nebo jiné potvory, tak bacha na mazání /etc/path_to_inst, je dobré nejdřív rozbít mirror, provést změny a znovu mirror spojit