2007年4月30日 星期一

[SQL Server] 2005 中 sa 帳號無法登入的處理方式

基本上,在安裝時必須選擇混合模式,安裝完後,透過 Windows 驗證的方式進入 SQL Server 2005,在安全性的地方將 sa 的帳號啟用!

若忘記 sa 的密碼,重設 sa 密碼的語法如下:
exec sp_password @new = 'sanewpassword', @loginame = 'sa'

其他詳細資料可參考以下連結:
  1. forgot sa password, unable to change... help
  2. SQL Server 2005 Express Related Questions
  3. SQL Server 2005 "Login failed for user" sa

擴充套件-LdapAuthentication

前言

大家如果有用過 LDAP,應該大多是用來儲存使用者的帳號密碼作驗證之用,透過此方式,可以統一管理使用者的帳號密碼資訊,不用在每台機器上都需要建立使用者的帳號密碼,如此一來,管理者的工作當然也就可以變的更有效率。

而這邊要介紹的是 MediaWiki 的擴充套件,其功能就是讓 MediaWiki 的使用者帳號密碼也能透過 LDAP 的方式進行認證,如此一來,想要編輯 Wiki 的使用者就不需要再建立一次帳號密碼了!


環境介紹
  • OS:Fedora Core 6
  • LDAP server:OpenLDAP
  • MediaWiki 版本:1.9.3


設定說明

由於目前 LdapAuthentication 擴充套件在 1.9.x 的版本中使用似乎還有些狀況,因此必須針對程式做一些小修改,才能讓 LDAP 認證順利完成。

1、下載 LdapAuthentication.php:

原始碼可以按此處 取得,或是在 google 搜尋「mediawiki extension ldap authentication」應該可以很容易找到,將原始碼放置在 includes 目錄下(因為這支程式還會 inlcude 此目錄下的 AuthPlugin.php 這個檔案)。


2、加入 LDAP 認證設定:

在檔案 LocalSettings.php 加入以下設定:

3、修改 bug:

首先,LdapAuthentication.php 程式中,會預設以 TLS 的方式連線,大約是在程式碼 127~132 行,上面有註解清楚的說明,不過以目前的情況,我們並非以 SSL or TLS 的方式與 OpenLDAP server 進行連線,因此要把這一部份的程式進行修改,因此將以下此行:
$encryptionType = "tls";
修改為成以下內容:
$encryptionType = "";
當然也可以註解掉,另外加上去也是可以的! 如此一來就可以順利的與 OpenLDAP server 進行連線。


再來是登入成功後,Wiki 會自動的呼叫在 includes/SpecialUserlogin.php 中的 initUser 這一個 function(大約在 309 行左右的位置),裡面有以下此行,會嘗試去修改 OpenLDAP server 中使用者的密碼資訊:
$u->setPassword( $this->mPassword );
當然 OpenLDAP server 不會讓這支程式修改密碼資訊,因此認證會產生錯誤,而要將此錯誤修正,則將此行刪除,用以下的程式碼來取代:
if ( $wgAuth->allowPasswordChange() ) {
$u->setPassword( $this->mPassword );
}
如此一來,就可以順利的進行 LDAP 認證囉!


參考連結:
  1. Extension:LDAP Authentication
  2. Extension talk:LDAP Authentication
  3. View of /trunk/extensions/LdapAuthentication/LdapAuthentication.php
  4. Configuring WikiMedia for an Active Directory based intranet - Part 3


後記

最後發現,MediaWiki 版本為 1.9.x,使用 LdapAuthentication 還是會有問題,新的 user 會無法登入(原本登入過的 User 會在 database 中存有一份帳號資訊,新的 User 登入後資訊無法存入),目前似乎也無解決方案......有的話會寫上來!

2007年4月29日 星期日

[OpenLDAP] 解決檔案 DB_CONFIG 不存在造成 poor performance 的問題

若在設定 OpenLDAP 的過程中,發生了類似以下的訊息:
bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)
Expect poor performance for suffix dc=test,dc=com,dc=tw.
由於檔案 DB_CONFIG 中儲存的是負責優化 ldap 服務的設定;而系統上顯示,若沒有 DB_CONFIG 這個檔案,會造成 poor performance;不過 OpenLDAP server 啟動時,並不會自動的將此檔案建立起來,必須由管理者手動建立。

若不知道檔案內容的格式為何,可以參考此篇文章 ,或是使用以下指令,找出 DB_CONFIG 的範例檔:
shell> find / | grep DB_CONFIG
在 Fedora Core 6 中,找到此檔案的位置是在「/etc/openldap/DB_CONFIG.example」,可以直接把他複製到 /var/lib/ldap 目錄下(以原設定不修改的情況下),並根據使用需求進行適度的修改,就可以解決poor performance 的問題。


參考連結:
  1. DB_CONFIG configuration directives
  2. ChinaUnix.net >> LDAP >> 寫給所有OpenLDAP不能正常啟動的人

2007年4月27日 星期五

[OpenSSL] CA(Certificate Authority) 的建置 - 1/3

何謂 CA ?

在網路蓬勃發展的時代,安全議題越來越受到重視,因此也有許多人提出如何將傳輸在網路上的資料進行加密傳送以增加安全性;然而有了憑證(certificate)的發明,除了用來將傳輸資料加密外,還可用來驗證資料傳送者與接收者的身份。


而若要瞭解 certificate,則首先必須知道何謂 CA(Certificate Authority)!

以下有兩段解釋:
certificate authority or certification authority (CA) is an entity which issues digital certificates for use by other parties. It is an example of a trusted third party. CAs are characteristic of many public key infrastructure (PKI) schemes.
憑證管理中心(Certification Authority,CA)為具公信力第三者(Trusted ThirdParty) ,對個人及機關團體提供認證及憑證簽發管理等服務,以建立具有機密性、鑑別、完整性、不可否認性、接取控制及可用性而的資訊通信安全環境與機制。在建置營運憑證管理中心時,須依憑證管理中心之營運政策及策略,制訂憑證政策與憑證實作準則,規範其運作規定與作法,一方面讓用戶瞭解在使用上的作業規定,另一方面則藉此表明其在安全及公證性上的信賴度。

流程說明

從CA建置到憑證的簽署,步驟如下:


  1. 自行建立CA(假設沒有花錢使用公用CA的情況下)
  2. 建立 Private Key
  3. 建立 Certificate Request(憑證要求)
  4. 將 Certificate Request 送交 CA 來簽證此憑證


而在 CA server 的部分,要介紹的重點在於:

  1. 建置 CA server
  2. 簽發憑證、報廢憑證
  3. 設定 CA 簽證的 policy

其中,所有設定都必須使用到「openssl」這個指令,相關的參數用法頗為複雜,若要參考詳細的內容與使用方式,可參考 OpenSSL官方網站


CA server 種類

首先有些觀念必須說明,即是 CA server 的種類有兩種:

  • Self-Signed CA
亦可稱為 root CA。由於此種 CA 所發的憑證(certificate)是不經由任何上層 CA 所認證,而是以「自行認證」的方式進行認證。因此像是最上層的商業 CA,或是自行架設內部認證用的 CA,都可以屬於此類。
  • Signed CA
不同於 Self-Signed CA,此種 CA 所發佈的憑證,可被上層的 CA 進行認證,而兩種 CA 的關係則是「Parent CA <==> Child CA」。 而通常設定上層 CA 時,除非是內部使用,不然使用商業 CA 是必須付費的!

[OpenSSH] 製作不需密碼即可登入SSH server 的 client

這邊要介紹如何設定不用輸入密碼就可以登入 SSH serevr,假設以下環境如下:

Server
server.twcic.net
Client
client1.twcic.net
client2.twcic.net


基本上設定的步驟如下:

  1. 到 client 主機上產生 public / private key
  2. 上傳至 server


1、產生 Key pair

首先在 client 端的機器上要產先 public key 以及 private key,用來在 client 與 server 之間的資料傳輸進行加密。

在 Linux 中,可使用 ssh-keygen 指令來產生 Key pair:

shell> ssh-keygen -t rsa
Generating public/private rsa key pair. # 開始產生 key pair
Enter file in which to save the key (/root/.ssh/id_rsa): # 此處要指定 key pair 的存放處,可直接用預設值
Enter passphrase (empty for no passphrase): # 此處按 enter 跳過
Enter same passphrase again: # 此處按 enter 跳過
Your identification has been saved in /root/.ssh/id_rsa. # private key 的位置
Your public key has been saved in /root/.ssh/id_rsa.pub. # public key 的位置
The key fingerprint is:
34:35:d9:57:64:88:58:fe:91:2a:11:d0:ad:c5:ea:c3 root@client1.twcic.net


2、將 Public Key 傳至 server

接著要將剛剛產生出來的 public key 傳至 server 上,可透過以下指令:

shell>  scp ~/.ssh/id_rsa.pub user1@server.twcic.net:~/
user1@server.twcic.net's password: # 此處輸入 user1 的登入密碼


將 client 的 public key 上傳後,要將其附加在 SSH 連線的認證清單中;因此登入 server 後,可以用以下指令將 client 剛剛傳過來的 public key 加入認證清單中:

shell> cd ~/

# 如果沒有「.ssh」目錄就必須先建立,有就可以省了
shell> mkdir .ssh

# 將 client 的 public key 附加於 authorized_keys 檔案中
shell> cat id_rsa.pub >> .ssh/authorized_keys


【備註】

最後,如果要多台 client 都可以不用打密碼連線至 server,也是照個上述的步驟即可,因為「>>」是以附加的方式將 client public key 加入,因此沒有問題!

2007年4月24日 星期二

Linux上的 IDE 開發工具

最近再用 Ubuntu,感想是......安裝套件還真是方便阿!

推薦兩個 IDE 開發工具:
  1. Eclipse
    這是 IBM 開發出來的啦! 本來是開發 Java 用,如果要拿來開發 C or C++,就裝 eclipse-cdt 吧!
  2. Anjuta
    也是另一套簡單的 IDE 開發工具,支援開發的程式含蠻多的,試用完有心得再來介紹。