2011年9月4日 星期日

辛苦的暑假,成功經驗紀錄文

這個暑假,買了新Server,廠商幫忙灌了VMWARE,我也開始了漫長的移機歲月。

一開始都很順,但到了samba server就卡關了,同樣的設定,同樣在centos6上,在一般機器上的samba server都可順利登入,但裝在VMWARE上的就是不行。

卡關卡了一個月,只好另尋出路,不再用本機認證,另裝一台server安裝ldap server,好在有VMWARE,讓我輕易地新增一台ldap server。

Server World真是個好站,讓我簡單的利用複製、貼上就架起了一台LDAP Server,在依樣畫葫蘆,架起了一直卡關的Samba PDC over LDAP,在登入的時候,眼淚幾乎奪眶而出,整整一個月卡關的悲憤,隨著顫抖宣洩而出…。




但是,問題來了,以前samba PDC 沒有搭配LDAP,可以搭配Openwebmail輕鬆修改密碼,但是現在搭配ldap之後,Openwebmail就無法順道修改Samba的密碼,雖然Openwebmail上有smbpasswd = yes這個參數,但是他是搭配auth_unix.pl的參數,在目前的auth_pam.pl上,根本派不上用場,還好,開放源碼的好處,就是讓使用者可以改程式,雖然我不懂perl語言,但還是讓我給試出來了,趕快在此記錄下來,以免未來忘記!

一、修改/var/www/cgi-bin/openwebmail/etc/openwebmail.conf
auth_module             auth_pam.pl

二、修改/var/www/cgi-bin/openwebmail/etc/auth_pam.conf

servicename             openwebmail
passwdfile_plaintext    /etc/passwd
check_nologin           no
check_shell             no
check_cobaltuser        no

三、增加/etc/pam.d/openwebmail檔
auth include system-auth
account include system-auth
password include system-auth
session include system-auth

四、修改/var/www/cgi-bin/openwebmail/etc/auth_ldap.conf
ldaphost        xx.xx.xx.xx     # LDAP SERVER IP
ou              people          # LDAP ORGANIZATIONAL UNIT
cn              管理者帳號        # LDAP USER
dc1             xxx             # FIRST DC
dc2             xxx            # SECOND DC
dc3             xxx
dc4             xxx
password        PASSWORD        # LDAP PASSWORD
change_smbpasswd        yes

讓Openwebmail可以修改samba密碼
五、修改/var/www/cgi-bin/openwebmail/auth/auth_pam.pl
在sub change_userpassword這個副程序下,在最後一行return之前,加上修改smbpasswd的程式碼,這段程式碼是從auth_unix.pl修改而來
#change smbpassword begin
      my $cmd = '/usr/bin/smbpasswd';
      $cmd=ow::tool::untaint($cmd);
      if (-x $cmd) {
         open(P, "|-") or
           do { open(STDERR, ">/dev/null"); exec($cmd, "-L", "-a", "-s", "$pam_user"); exit 9 };
         print P "$pam_newpassword\n$pam_newpassword\n";
         close(P);
      }
#change smbpassword end

至此,完全搞定!感謝諸佛菩薩加持!

另外,還有一個地方要注意,否則參數改到死都不會成功。
由於openwebmail都已經改跑speedy_suidperl,所以參數更改後,必須先將已在運行的speedy_suidperl給kill掉,否則使你改了參數,他還是執行cache的參數,改到死都沒用!

沒有留言:

張貼留言