Решил я совсем оптимизировать свою работу. Задумка состоит в следующем. Создаем нового пользователя в домене (я создаю через ldapadmin), далее заходим этим пользователем на компьютер. И.. каждый раз приходится запускать обозреватель, прописывать там прокси-сервер, прописывать ограничения на размер кеша, добавлять еще какие-то опции.. затем запускать почтового клиента, в нем прописывать электронный адрес, имя пользователя т.п. В общем не айс. Хотелось бы, чтобы ничего на стороне клиентского компьютера делать не надо было.
Для автоматизации нам потребуется samba, openldap-server (+ssl), apache, perl. В качестве браузера и почты на клиентских машинах будем использовать Mozilla Seamonkey.
Поднимаем домен: http://www.lissyara.su/?id=1487
Устанавливаем Apache по статье Лиса: http://www.lissyara.su/?id=1360
После этого устанавливаем модуль NTLM для Apache2:
Код: Выделить всё
[f0s@mail] //> cd /usr/ports/www/mod_ntlm2
[f0s@mail] /usr/ports/www/mod_ntlm2/> make install clean
Код: Выделить всё
[f0s@mail] //> cd /usr/local/etc/openldap/ldif/
[f0s@mail] /usr/local/etc/openldap/ldif/> cat tmp.ldif
dn: relativeDomainName=mozilla,zoneName=artpaint,ou=dns,dc=artpaint,dc=spb,dc=ru
dNSClass: IN
objectClass: dNSZone
objectClass: top
relativeDomainName: mozilla
zoneName: artpaint
cNAMERecord: mail
Код: Выделить всё
[f0s@mail] /usr/local/etc/openldap/ldif/> ldapadd -x -D "cn=root,dc=artpaint,dc=spb,dc=ru" -W -H ldaps://192.168.10.8 -f tmp.ldif
Enter LDAP Password:
adding new entry "relativeDomainName=mozilla,zoneName=artpaint,ou=dns,dc=artpaint,dc=spb,dc=ru"
Код: Выделить всё
[f0s@mail] /usr/local/etc/openldap/ldif/> nslookup mozilla.artpaint
Server: 192.168.10.8
Address: 192.168.10.8#53
mozilla.artpaint canonical name = mail.artpaint.
Name: mail.artpaint
Address: 192.168.10.8
Код: Выделить всё
[f0s@mail] //> cd /usr/local/etc/apache2/Includes/
[f0s@mail] /usr/local/etc/apache2/Includes/> cat mozilla.artpaint
<VirtualHost *:80>
ServerAdmin admin@artpaint.spb.ru
DocumentRoot /usr/home/artpaint/www/data/mozilla.artpaint/
ServerName mozilla.artpaint
SuexecUserGroup artpaint artpaint
Alias /php-fcgi/ /usr/home/artpaint/www/cgi-bin/
ErrorLog /var/log/httpd/mozilla.artpaint-error.log
CustomLog /var/log/httpd/mozilla.artpaint-access.log combined
ScriptAlias /moz/ /usr/home/artpaint/www/data/mozilla.artpaint/moz/
AddHandler cgi-script mozilla.config printenv test
<Directory "/usr/home/artpaint/www/data/mozilla.artpaint/moz/">
AllowOverride None
Options ExecCGI
AuthType ntlm
AuthName "ARTPAINT Server"
NTLMAuth on
NTLMAuthoritative on
NTLMDomain ARTPAINT
NTLMServer mail.artpaint
require valid-user
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
[f0s@mail] /usr/local/etc/apache2/Includes/>
Код: Выделить всё
[f0s@mail] //> cd /home/artpaint/www/data/mozilla.artpaint/
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/> mkdir moz
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/> cd moz
Код: Выделить всё
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/> cat mozilla.pl
#!/usr/bin/perl
# Byteshifting program for mozilla's netscape.cfg files
# Old netscape 4.x uses a bytechift of 7
# To decode: moz-byteshift.pl -s -7 <netscape.cfg >netscape.cfg.txt
# To encode: moz-byteshift.pl -s 7 <netscape.cfg.txt >netscape.cfg
# Mozilla uses a byteshift of 13
# To decode: moz-byteshift.pl -s -13 <netscape.cfg >netscape.cfg.txt
# To encode: moz-byteshift.pl -s 13 <netscape.cfg.txt >netscape.cfg
use strict;
use Getopt::Std;
use vars qw/$opt_s/;
getopts("s:");
die "Missing shift\n" if (!defined $opt_s);
my $buffer;
while(1) {
my $n=sysread STDIN, $buffer, 1;
last if ($n eq 0);
my $byte = unpack("c", $buffer);
$byte += 512 + $opt_s;
$buffer = pack("c", $byte);
syswrite STDOUT, $buffer, 1;
}
Код: Выделить всё
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/> cat mozweb32.js
lockPref("general.config.vendor", "mozweb32");
lockPref("autoadmin.global_config_url", "http://mozilla.artpaint/moz/mozilla.config");
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/>
Код: Выделить всё
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/> ./mozilla.pl -s 13 < mozweb32.js > mozweb32.cfg
Создаем файл all.js в папке C:\Program Files\mozilla.org\Mozilla\defaults\pref следующим содержанием:
Код: Выделить всё
pref("network.automatic-ntlm-auth.trusted-uris","mozilla.artpaint");
pref("general.config.filename", "mozweb32.cfg");
pref("general.config.vendor", "mozweb32");
Код: Выделить всё
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/> cat mozilla.config
#!/usr/local/bin/perl
use CGI qw/:standard :cgi/;
use Net::LDAPS;
$user = $ENV{"REMOTE_USER"};
print header(
-type=>'application/x-javascript-config',
-expires=>'0'
);
$ldaphost="mail.artpaint";
$basedn="dc=artpaint,dc=spb,dc=ru";
$id=0;
$ldap=Net::LDAPS->new($ldaphost) or die $@;
$bind=$ldap->bind();
build_body($user,"uid");
if ($id>0)
{
$podval = <<"EOF";
lockPref("mail.accountmanager.accounts", "$accounts");
} catch(e) {
displayError("lockedPref", e);
}
EOF
print $podval;
};
$ldap->unbind;
sub build_body()
{
$userb=$_[0];
$attrb=$_[1];
$search=ldap_search($userb,"users",$attrb);
foreach $entry ($search->entries)
{
$mail=$entry->get_value('mail');
$mailhost='mail.artpaint';
$accstat=$entry->get_value('accountStatus');
$cn=$entry->get_value('displayName');
$o=$entry->get_value('o');
$uid=$entry->get_value('uid');
$gecos=$entry->get_value('gecos');
$mail_mod=$mail;
$mail_mod=~s/@/\%40/g;
if ($accstat eq "active")
{
$id=$id+1;
if ($id==1)
{
$header =<<"EOF";
try {
//displayError("$username");
lockPref("browser.bookmarks.added_static_root", true);
lockPref("browser.cache.disk.capacity", 10240);
lockPref("browser.download.dir", "H:");
lockPref("browser.download.save_converter_index", 0);
lockPref("browser.fixup.alternate.enabled", false);
lockPref("browser.link.open_external", 3);
lockPref("browser.link.open_newwindow", 3);
lockPref("browser.startup.homepage", "http://www.ya.ru/");
lockPref("browser.tabs.autoHide", false);
lockPref("browser.tabs.loadGroup", 1);
lockPref("browser.tabs.loadInBackground", true);
lockPref("browser.tabs.opentabfor.middleclick", true);
lockPref("browser.tabs.opentabfor.urlbar", false);
lockPref("browser.turbo.showDialog", false);
lockPref("general.smoothScroll", false);
lockPref("browser.enable_automatic_image_resizing", false);
lockPref("browser.chrome.site_icons", true);
lockPref("browser.chrome.toolbar_tips", true);
lockPref("browser.chrome.toolbar_style", 2);
lockPref("browser.history_expire_days", 5);
lockPref("browser.search.opensidebarsearchpanel", true);
lockPref("browser.search.opentabforcontextsearch", false);
lockPref("general.startup.chat", false);
lockPref("general.startup.editor", false);
lockPref("general.startup.addressbook", false);
lockPref("general.startup.browser", true);
lockPref("general.startup.mail", false);
lockPref("mail.accountmanager.defaultaccount", "account1");
lockPref("mail.smtp.defaultserver", "smtp1");
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.hostname", "$mailhost");
lockPref("mail.smtpserver.smtp1.port", 465);
lockPref("mail.smtpserver.smtp1.try_ssl", 3);
lockPref("mail.smtpserver.smtp1.username", "$uid");
lockPref("mail.smtpservers", "smtp1");
lockPref("mail.spam.logging.enabled", false);
lockPref("mail.spam.manualMarkMode", 0);
lockPref("mail.spam.markAsReadOnSpam", true);
lockPref("mail.spam.manualMark", true);
lockPref("mail.spam.version", 1);
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.artpaint");
lockPref("ldap_2.autoComplete.useDirectory", true);
lockPref("ldap_2.prefs_migrated", true);
lockPref("ldap_2.servers.artpaint.auth.savePassword", true);
lockPref("ldap_2.servers.artpaint.description", "mail.artpaint");
lockPref("ldap_2.servers.artpaint.filename", "abook-1.mab");
lockPref("ldap_2.servers.artpaint.maxHits", 500);
lockPref("ldap_2.servers.artpaint.position", 3);
lockPref("ldap_2.servers.artpaint.uri", "ldaps://$ldaphost:636/ou=users,$basedn??sub");
lockPref("ldap_2.servers.history.filename", "history.mab");
lockPref("ldap_2.servers.history.replication.lastChangeNumber", 0);
lockPref("ldap_2.servers.pab.filename", "abook.mab");
lockPref("ldap_2.servers.pab.replication.lastChangeNumber", 0);
lockPref("network.cookie.prefsMigrated", true);
lockPref("network.proxy.ftp", "router.artpaint");
lockPref("network.proxy.ftp_port", 8787);
lockPref("network.proxy.gopher", "router.artpaint");
lockPref("network.proxy.gopher_port", 8787);
lockPref("network.proxy.http", "router.artpaint");
lockPref("network.proxy.http_port", 8787);
lockPref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, 192.168.10.0/24, *.artpaint");
lockPref("network.proxy.share_proxy_settings", true);
lockPref("network.proxy.ssl", "router.artpaint");
lockPref("network.proxy.ssl_port", 8787);
lockPref("network.proxy.type", 1);
lockPref("update_notifications.enabled", false);
lockPref("mail.toolbars.showbutton.print", true);
EOF
print $header;
};
$account="account".$id;
$zp="";
$zp="," if ($id>1);
$accounts="$accounts".$zp.$account;
$identi="id".$id;
$serv="server".$id;
$body_account =<<"EOF";
lockPref("mail.account.$account.identities", "$identi");
lockPref("mail.account.$account.server", "$serv");
lockPref("mail.forward_message_mode", 2);
lockPref("mail.identity.$identi.doBcc", false);
lockPref("mail.identity.$identi.doBccList", "");
lockPref("mail.identity.$identi.draft_folder", "imap://$mail_mod\@$mailhost/Drafts");
lockPref("mail.identity.$identi.drafts_folder_picker_mode", "1");
lockPref("mail.identity.$identi.encryption_cert_name", "");
lockPref("mail.identity.$identi.encryptionpolicy", 0);
lockPref("mail.identity.$identi.fcc_folder", "imap://$mail_mod\@$mailhost/Sent");
lockPref("mail.identity.$identi.fcc_folder_picker_mode", "1");
lockPref("mail.identity.$identi.fullName", "$cn");
lockPref("mail.identity.$identi.organization","ARTPAINT" );
lockPref("mail.identity.$identi.reply_to", "$mail");
lockPref("mail.identity.$identi.sign_mail", false);
lockPref("mail.identity.$identi.signing_cert_name", "");
lockPref("mail.identity.$identi.smtpServer", "smtp1");
lockPref("mail.identity.$identi.stationery_folder", "imap://$mail_mod\@$mailhost/Templates");
lockPref("mail.identity.$identi.tmpl_folder_picker_mode", "1");
lockPref("mail.identity.$identi.useremail", "$mail");
lockPref("mail.identity.$identi.valid", true);
lockPref("mail.server.$serv.ageLimit", 30);
lockPref("mail.server.$serv.capability", 418609);
lockPref("mail.server.$serv.daysToKeepBodies", 30);
lockPref("mail.server.$serv.daysToKeepHdrs", 30);
lockPref("mail.server.$serv.download_on_biff", true);
lockPref("mail.server.$serv.check_new_mail", true);
lockPref("mail.server.$serv.check_time", 10);
lockPref("mail.server.$serv.cleanup_inbox_on_exit", true);
lockPref("mail.server.$serv.empty_trash_on_exit", true);
lockPref("mail.server.$serv.moveOnSpam", true);
lockPref("mail.server.$serv.hostname", "$mailhost");
lockPref("mail.server.$serv.login_at_startup", true);
lockPref("mail.server.$serv.max_cached_connections", 5);
lockPref("mail.server.$serv.name", "$gecos");
lockPref("mail.server.$serv.numHdrsToKeep", 30);
lockPref("mail.server.$serv.port", 10993);
lockPref("mail.server.$serv.socketType", 3);
lockPref("mail.server.$serv.realhostname", "$mailhost");
lockPref("mail.server.$serv.realuserName", "$mail");
lockPref("mail.server.$serv.type", "imap");
lockPref("mail.server.$serv.useSecAuth", false);
lockPref("mail.server.$serv.userName", "$mail");
lockPref("mail.server.$serv.spamActionTargetAccount", "imap://$mail_mod\@$mailhost");
lockPref("mail.server.$serv.spamActionTargetFolder", "imap://$mail_mod\@$mailhost/Junk");
EOF
print $body_account;
$searchg=ldap_search($userb,"Group","memberUid");
foreach $entryg ($searchg->entries)
{
$cng=$entryg->get_value('cn');
build_body($cng,"cn");
};
};
};
};
sub ldap_search ()
{
$attr=$_[2];
$val=$_[0];
$ou=$_[1];
$filter="($attr=$val)";
$searchs=$ldap->search(
scope =>'sub',
base =>"ou=$ou,".$basedn,
filter =>$filter,
attrs =>['mail','mailHost','accountStatus','displayName','o','uid','gecos']
);
return $searchs
};
[f0s@mail] /home/artpaint/www/data/mozilla.artpaint/moz/>
1) http://www.it-sudparis.eu/s2ia/user/pro ... ig-en.html
2) Артем Za.