近來在寫一個 PHP 程式,想說要防護一些網頁惡意攻擊

目前用了一個套件是 PHPIDS,可以參考這篇 網站安全的監控平台—PHPIDS文章 來使用

話說我 include 了 example.php 進來後,還是有稍微改了一點程式

把記錄 Log 的部份關了,若有偵測到攻擊也直接 exit 掉程式 !

另外也可以再研究一下這篇 PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008 ,還蠻詳盡提醒要注意的有哪些

Bojack 發表在 痞客邦 留言(2) 人氣()

先前都沒遇到過,這二天在機器上裝了 Appserv 就出現了,搜尋了一下解決了這問題

/* 時間校時,不然會差8小時 */
date_default_timezone_set("Asia/Taipei");

PHP.LA - 解决PHP的date函數差8個小時的方法

2010-06-15 補充

或是修改 php.ini 就好了

php 5.10 (含)以上的版本

date.timezone = Asia/Taipei

php 5.10 以前的版本

putenv ('TZ=Asia/Taipei');

Bojack 發表在 痞客邦 留言(0) 人氣()

因為自己學校目前是使用 Openwebmail + LDAP 驗證

然而 LDAP 是不分大小寫的,所以就算英文 key 大寫的也可以驗證通過

今天 Google 了一下 Perl 程式的語法,發現將英文轉大寫的語法是 uc,轉成小寫的語法是 lc

所以編輯 .openwebmail.pl 檔案找到下面二段的語法

sub login {
   my $clientip=ow::tool::clientip();
   $loginname=param('loginname')||'';
   $loginname=lc $loginname;
   $loginname=~s/\s//g; # remove space,\t,\n,\r
   $default_logindomain=safedomainname(param('logindomain')||'');

sub autologin {
#auto login with cgi parm or cookie
   $loginname=param('loginname')||cookie('ow-loginname');
   $loginname=lc $loginname;
   $loginname=~s/\s//g; # remove space,\t,\n,\r

這樣就可以了!再也不會有學生因為登入輸入大寫的字母而有問題啦!

Bojack 發表在 痞客邦 留言(1) 人氣()

自從 Mail Server 的帳號整合到 LDAP 後,從此就不必在 Mail Sever 上倒帳號了

而使用者登入透過 Openwebmail 登入系統時,自動就會建立 /home/user_account/mail 這路徑了 ( 紅色的字為自動建立出來的 )

上星期接到學生反應說,為什麼個人網頁空間不能使用,看了一下系統

使用者確實有在自己的目錄下建立 www 這目錄,並將檔案放至此目錄中,但老是一直出現 403 沒有權限存取的訊息

本來一直以為是 Apache 設定的問題,但也不是所有使用者會這樣,而是移轉到 LDAP 後的使用者才會發生此情形

後來查啊查的,才發現原來在 /home/user_account 這裡的權限被設為 700,難怪我不論在 /home/user_account/www 改成 777 的權限仍不可瀏覽 ( 一度以為自己見到鬼 )

原來,Openwebmail 有一個設定參數為 create_syshomedir,而我目前是設定為 yes 的屬性,也就是登入系統時自動建立相關檔案

然而這個自動建立出來的目錄,預設權限都會設定成 700

解決辦法是,去修改 .openwebmail.pl 這程式,將此部份改成 755 就好了!

# create the user's syshome directory if necessary.
# this must be done before changing to the user's uid.
   if (!-d $homedir && $config{'create_syshomedir'}) {
      if (mkdir($homedir, 0755)) {

總算解決這個見鬼的問題了 :-p

Bojack 發表在 痞客邦 留言(0) 人氣()

目前系統的環境是 Postfix + Dovecot

這是最近出現在 maillog 訊息

Mar 15 08:49:49 mail postfix/local[4491]: C7EFD2B7C9D: to=<xxx@xxx.edu.tw>, orig_to=<xxx2008>, relay=local, delay=21, delays=0.06/0/0/21, dsn=4.2.0, status=deferred (cannot update mailbox /var/mail/xxx for user maxling. unable to lock for exclusive access: Resource temporarily unavailable)

因為郵件系統內設定有許多 Aliases,當有人正在針對特定的 Aliases 寄送信件,且此群組內某一個人正好在使用 POP3 收信時,可能就會發生 Lock 的情況,導致系統會重新再寄信該封信件,變成同一封信會收到 2 次以上 ( 大容量信件更是可怕 )

目前查了相關資訊,建議是將 Postfix 和 Dovecot Lock 的機制都設定為一樣,還不確定是否可以解決,正在觀察是否會出現相同的情況

Postfix 目前的設定

mailbox_delivery_lock = flock, dotlock

Dovecot 目前的設定

mbox_read_locks = flock dotlock
mbox_write_locks = flock dotlock

參考的資料如下

酷學園 - postfix 產生cannot update mailbox 和 Resource temporarily unavailable

Mool - maillog 出現 Resource temporarily unavailable

記。回憶 - Postfix + Dovecot , mbox Lock 問題

Dovecot - Mbox Locking

Bojack 發表在 痞客邦 留言(0) 人氣()

距離上次寫 Blog 居然有4個多月了,中間有一段時間被 Facebook 給吸引走了 :p

這 4 個月來說,也發生不少事情

首先我工作上的夥伴 + 師傅在九月底離職了,而學校也不打算補人,開始學習做一些不太熟悉的業務,但每個人都有自己的規劃,離開這兒或許也會有更好的發展!

另外也檢視了半年前訂的工作目標,就在 12/22 終於完成中心 ISMS 驗證作業,這項費時約半年期的導入作業,還真是漫長,未來真的希望能有一個專職的人員來承接這項業務

要網管人員再身兼文管人員真的會分身乏術

有趣的是 12/22 當天要正式評鑑,而我 12/19 ~ 12/21 人在香港玩,說實在的我的心情多少還是有放在工作上面,回到台灣時已經時 12/22 00:10 分了

還好中心同事都有按照說明準備,這次驗證才得以順利通過

一下子 2009 即將過去了,希望明年工作能順利!我還想再學一些技術再投向業界!

Bojack 發表在 痞客邦 留言(1) 人氣()

今天要謝謝非常很多人 ~

謝謝郁涵一早給我的卡片

謝謝中心同仁:主任、副座、組長、Sam、隆哥、惇信、圳男、小白、葦怡、豐瑜、阿鴻及政謙

謝謝 Emma、葦葦、Dennis、小白、瑞芬、Betty、方、Irene、佳妹、欣怡、安妮、佳慧老師 MSN 上給我的祝福

謝謝 Y.L 老師、 Betty 的簡訊

謝謝 uin & Hifa 電話那頭的祝福及生日快樂歌

謝謝隆哥、Miss Ruo、Yumi 和 Betty 陪我享用各種美食

謝謝 Rita & 園長的小禮物,一瓶很棒的 Ferrari 香水

記得很小很小很小的時候,家人才有幫我過生日

至今依舊忘不了那盒冰淇淋蛋糕,小時候的我很開心的把它從冰箱上層給拿了下來,吃了好幾天才把它給吃完

長大後其實很少有機會吃到自己的蛋糕,而今年我得到了好多好多人的祝福

2009 年的今晚是笑著入睡的 ^^

謝謝大家,真的

Bojack 發表在 痞客邦 留言(2) 人氣()

http://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc

今天 DNS 有點小問題,更新完就 OK 了

Bojack 發表在 痞客邦 留言(0) 人氣()

首先不用說,先把 openwebmail 裝起來!

要讓 openwebmail 可以去向 LDAP 做驗證,在安裝時記得要勾選 PAM 的選項

接下來設定 openwebmail.conf

將原本的

auth_module auth_unix.pl

改成

auth_module auth_pam.pl

另外再新增一行,這樣讓使用者登入時可以自動建立相關的目錄與檔案

create_syshomedir yes

接下來要來設定 PAM 這部份,我用的版本是 2.53,在 openwebmail 裡面有個 auth 的目錄,裡面有個 auth_pam.pl

其中裡面有一行就是說要去看 pam.d 裡面哪個檔案,預設是 login

my $servicename = $conf{'servicename'} || "login";

所以我去編輯 /etc/pam.d/login 並修改 auth 那區塊

# auth
auth            sufficient      pam_self.so             no_warn
auth            sufficient      /usr/local/lib/pam_ldap.so      no_warn try_first_pass
auth            include         system

改好後這樣就可以和系統做驗證了!

ps. 待補上修改密碼的設定

Bojack 發表在 痞客邦 留言(0) 人氣()

最近學校的 E-mail Server 即將在七月要轉移,本次將轉往 HP 刀鋒系列的伺服器,本來預計主機一台要裝 FreeBSD 7 64 bit

裝了 64 位元的版本可以突破記憶體 4G 的上限,這樣系統的效能也會有所提升

但經過測試,Nopam 這個防廣告的套件在 64  位元的版本怎麼裝就是裝不起來,所以本次的架構如圖所示

See ~ Postfix 那台主機仍用 FreeBSD 7 64 位元版,而 Nopam 主機則安裝 32 位元版,這樣才能達到我們的需求!

Postfix + SASL2 安裝我先略過再補上,接下來僅談 Nopam 安裝的部份,這邊有安裝使用手冊

在安裝 Nopam 時,incoming MTA Server IP 和 outgoing MTA Server IP 都記得填 Postfix 的 IP 就是了

在 main.cf 要加入這一行

content_filter = smtp:[10.1.17.4]:10024

在  master.cf 要加入這些

10.1.17.18:10023 inet n - - - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o myhostname=localhost

IP 就參考上述的架構圖來填寫吧 !! BTW,PostfixNopam 的整合真的還蠻簡單的 ^^

接下來談和 LDAP 整合的部份,我希望使用者寄信時透過 SASL -> PAM ( SMTP ) -> LDAP 驗證帳號和密碼正不正確

而收信時透過 Dovecot -> PAM ( POP3 ) -> LDAP 來驗證,總之就是不要再看 /etc/passwd 啦!

首先要先安裝 openldap-client ,因為我的 LDAP Server 用的是 2.3,所以 Client 也用 2.3-client

# cd /usr/ports/net/openldap23-client

# make install clean

接下來要安裝 nss_ldap ( 可以取得使用者帳號、群組 )、pam_ldap( 用來驗證使用者的、pam_mkhomedir ( 可以自動建立目錄 )

# cd /usr/ports/net/nss_ldap/

# make install clean

# cd /usr/ports/security/pam_ldap

# make install clean

# cd /usr/ports/security/pam_mkhomedir

# make install clean

接下來來去修改相關設定,首先去設定 /usr/local/etc/openldap/ldap.conf

必須設定好 BASE 和 URI !請依您的 LDAP 架構做調整

然後再來去設定跟 NSS、PAM 有關的設定

# cp /usr/local/etc/ldap.conf.dist /usr/local/etc/ldap.conf

 host LDAP_Server_IP or LDAP_Server_Domain_Name
 uri ldap://LDAP_Server_IP or ldap://LDAP_Server_Domain_Name
 base ou=employee,dc=ldap,dc=bojack,dc=edu,dc=tw
 rootbinddn cn=root,dc=ldap,dc=bojack,dc=edu,dc=tw
 pam_filter objectclass=posixAccount
 pam_login_attribute uid

接下來做一個 Symbol Link

# cd /usr/local/etc

# ln -s ldap.conf nss_ldap.conf

然後再建立並設定 nss_ldap.secret

# cd /usr/local/etc

# vi nss_ldap.secret ( 輸入 LDAP 管理者 root 密碼 )

# chmod 400 nss_ldap.secret

# ln -s nss_ldap.secret ldap.secret

接來是設定 nsswitch.conf,請改成下面的樣子

# vi /etc/nsswitch.conf

#group: compat
#group_compat: nis
hosts: files dns
networks: files
#passwd: compat
#passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
group: files ldap
passwd: files ldap

做到這裡時,可以停一下 ~ 先來測試系統能不能來去找 LDAP 做帳號和密碼的驗證

# id bojack
uid=1263(bojack) gid=1000 groups=1000

# finger bojack
Login: bojack                           Name: bojack
Directory: /home/admin/bojack           Shell: /bin/tcsh
Last login Mon Jul  6 14:16 (CST) on ttyp0 from x.x.x.x
Mail last read Mon Jul  6 22:33 2009 (CST)

接下來去設定 PAM 的相關,首先是讓 SSH 可以透過 PAM 去向 LDAP 做驗證

# vi /etc/pam.d/sshd

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            sufficient      /usr/local/lib/pam_ldap.so      no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_login_access.so
account         required        pam_unix.so

# session
#session        optional        pam_ssh.so
session         required        /usr/local/lib/pam_mkhomedir.so
session         required        pam_permit.so

# password
#password       sufficient      pam_krb5.so             no_warn try_first_pass
password        required        pam_unix.so             no_warn try_first_pass

應該到步驟就可以讓你的 User 可以利用 SSH 登入系統,並且是透過 LDAP Server 做驗證喔 ^^

那如果我有安裝 FTP Server 是不是也可以利用 LDAP 來做驗證呢,答案當然是可以,這是我的 /etc/pam.d/ftp

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
#auth           sufficient      pam_krb5.so             no_warn
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            sufficient      /usr/local/lib/pam_ldap.so      no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_unix.so

# session
session         required        /usr/local/lib/pam_mkhomedir.so
session         required        pam_permit.so

至於想要讓 User 可以透過 Postfix + SASL -> PAM ( SMTP ) -> LDAP 做身份證驗的話

我個人就直接是 copy ftp 的設定過去就好了

# cp /etc/pam.d/ftp /etc/pam.d/smtp

這樣在寄信時,Server 就會去向 LDAP 做驗證了!

最後一個是 POP3 Server,我是安裝 Dovecot

# cd /usr/ports/mail/dovecot

# make install clean

# vi /etc/rc.conf 加入
dovecot_enable="YES"

接下來設定 dovecot

# cd /usr/local/etc

# cp /dovecot-example.conf dovecot.conf

# vi dovecot.conf

protocols = pop3 ( 我只用 pop3 )
ssl_disable = yes ( 先停用 SSL 相關設定 )
#找下面這2個參數的設定,並修改成這樣就可以讓 Dovecot 去用 PAM ( POP3 ) -> LDAP 了
passdb pam {
     args = *
  }
userdb passwd {
  }

最後就是修改 /etc/pam.d/pop3

# auth
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            sufficient      /usr/local/lib/pam_ldap.so      no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

# account
#account        required        pam_nologin.so
account         required        pam_unix.so

大概就是這樣子了!

[1] Weithenn Study Daily: OpenLDAP-PAM NSS 設定
[2] Izero@庶務三科 ㄎㄎㄎ - 在FreeBSD上架設IMAP/POP3 server -使用dovecot
[3] 酷學園 - Fedora6 + LDAP + POSTFIX + DOVECOT 替代成功方案 ^^

[4] Nopam 無痛式垃圾郵件過濾系統

Bojack 發表在 痞客邦 留言(0) 人氣()