2008年7月3日 星期四

Setup An Odbc Connection Automatically

This script show you how to setup an ODBC connection without any user
intervention. The script uses the Windows Registry and works on Windows
95/98/NT

Code

Declaration Event:
Public Const REG_SZ = 1 'Unicode nul terminated string
Public Const REG_DWORD = 4 '32-bit number
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const SYNCHRONIZE = &H100000
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const STANDARD_RIGHTS_READ = &H20000
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINK = &H20
Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or
KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or
KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or
KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const ERROR_SUCCESS = 0&

Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (Byval
hKey As Long, Byval lpSubKey As String, Byval ulOptions As Long, Byval
samDesired As Long, phkResult As Long) As Long
Declare Function RegCloseKey Lib "advapi32.dll" (Byval hKey As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA"
(Byval hKey As Long, Byval lpValueName As String, Byval lpReserved As Long,
lpType As Long, Byval lpData As String, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (Byval
hKey As Long, Byval lpValueName As String, Byval Reserved As Long, Byval dwType
As Long, Byval lpData As String, Byval cbData As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (Byval
hKey As Long, Byval lpSubKey As String, phkResult As Long) As Long
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (Byval
hKey As Long, Byval dwIndex As Long, Byval lpValueName As String, lpcbValueName
As Long, Byval lpReserved As Long, lpType As Long, lpData As Any, lpcbData As
Long) As Long



Sub Initialize()
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim hKeyHandle As Long
Dim RetType As Long
Dim RetSize As Long
Dim lValueLen As Long
Dim lDataLen As Long
Dim lpReturnedString As String*127

RetSize = 126
lngCurIdx = 0
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREODBCODBCINST.INIODBC Drivers" , 0, KEY_READ, hKeyHandle)

'Check if an ODBC Driver exist on the user workstation
Do
lValueLen = 2000
strValue = String(lValueLen, 0)
lDataLen = 2000
lResult = RegEnumValue(hKeyHandle, lngCurIdx, Byval strValue,
lValueLen, 0&, REG_DWORD, Byval lngData, lDataLen)
lngCurIdx = lngCurIdx + 1

If Instr(1, strValue, "Lotus NotesSQL") Then
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWAREODBCODBCINST.INI" & strValue, 0, KEY_READ, hKeyHandle)
lResult = RegQueryValueEx(hKeyHandle, "Driver", 0, RetType,
lpReturnedString, RetSize)

'Specified the User DSN parameters
DataSourceName = db.Title
DatabaseName = db.FilePath
DriverPath = lpReturnedString
KeepTempIdx = "0"
MapSpecialChars = "Y"
MaxLongVarcharLen = "512"
MaxRels = "20"
MaxStmtLen = "4096"
MaxSubquery = "20"
MaxVarcharLen = "254"
Server = db.Server
ShowImplicitFlds = "0"
ThreadTimeout = "60"
DriverName = strValue

'Add the new ODBC connection key
lResult = RegCreateKey(HKEY_CURRENT_USER,
"SOFTWAREODBCODBC.INI" & DataSourceName, hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ,
Byval DatabaseName, Len(DatabaseName))
lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, Byval &LTWHA

From http://searchdomino.techtarget.com/tip/1,289483,sid4_gci489320,00.html

2008年7月2日 星期三

FreeBSD6.1 安裝教學

ubject:一起來瘋FreeBSD6.1
Author:琳富(Felix)+錦昌(Rondo)+士玉(Shryu)
Editor:夢想起飛的地方
(http://www.wretch.cc/blog/shryu206)
20060928 first edition
20061003 second edition

{{琳富兄關於FreeBSD管理的文章}}
http://dyna.hcc.edu.tw/dyna/menu/index.php?account=freebsd

{{錦昌兄關於CentOS管理的文章}}
http://apt.nc.hcc.edu.tw/web/student_server_centos4/student_server_centos.html


{{安裝的硬體環境:}}
Intel伺服器(Xeon 2.4G)+ RAID卡"HighPaint RocketRAID 1820A" F+
Westen SATA的硬碟(300G*5顆)+ Ram 1G

"HighPaint RocketRAID 1820A"RAID卡
在 FreeBSD 5.x以後在安裝過程爭
就以後可以直接抓到這張卡片
這張卡最多可支援到8顆硬碟的磁碟陣列

特別注意:CentOS4.4及MagicOSS 20060911尚不直接支援這張Raid卡喔!!


{{ISO 檔下載}}
ftp://freebsd.csie.nctu.edu.tw/pub/releases/i386/ISO-IMAGES/6.1/
6.1-RELEASE-i386-disc1.iso
6.1-RELEASE-i386-disc2.iso


Topic 1基本安裝

{{安裝流程}}
圖文安裝流程請參考
http://dyna.hcc.edu.tw/dyna/menu/main.php?id=45
------------------------------------------------

將FreeBSD光碟片至於光碟機,改BIOS以光碟機開機,
Country Selection--請選209 Taiwan
System Console Keymap---請選擇USA ISO


sysinstall main menu--安裝方式選擇Custom模式


Partition(Allocate Disk Space For FreeBSD)--要配置多少硬碟空間給FreeBSD
請配置整個空間給FreeBSD-->(A)
並記得要設成Bootable-->(S)

開機管理程式,請選擇安裝Standard (沒有開機管理程式)

Label(Label allocated disk partitions)---實際要配置邏輯磁碟區

<以下是我的label(邏輯磁碟區)規劃>
swap 1024MB
/usr 300G(/usr/local/www 自行安裝(Tarball安裝)的路經多在此--school+Dyna+Moodle)
/home 450G
/ 剩下的所有空間


PS.現在的記憶體這麼大為什麼我們還要保留1GB左右的swap區呢?
--->目前還是有許多程式在編寫的時候習慣用到寫入swap區暫存
--->因此即使我們有高達數Giga的記憶體但如果沒有設定swap區
--->還是可能會造成若干程式無法執行的窘境!!

Distribution
選擇安裝的套件
選擇Kern-Developer(所有程式、文件、與 Kernel Source)

......

media
選擇安裝來源為CD/DVD

Commit
選擇確定安裝

做最後確認

開始進行安裝

安裝完後會問--是否要編修系統組態,請選是(Yes)

選擇時區(Timezone)
是否為格林威治時間,請選否
請選亞洲(5 Asia)
請選台灣(42 Taiwan)

設定網路組態(Networking)
選擇 Interfaces 按空白鍵
選擇欲設定的網卡
是否以IPv6做設定,請選否
是否以DHCP自動分配組態,請選否
輸入相關的網路資料
-----這只是範例(請依貴校的狀況設定)---------------
Host:bsd.eces.hcc.edu.tw
Domain:eces.hcc.edu.tw
IPv4 Gateway:192.168.1.254
Name server:163.19.1.1
Netmask:255.255.255.0
--------------------------------------------------
是否要作用這張網卡,請選是


逐層回到選單的最上頁
選擇[X Exit Install]

系統提示將重新開機

重新開機

儘快取出光碟片


{{第一次登入BSD}}
第一次登入BSD是不需要密碼的

所以我們要趕快設定系統老大root密碼

passwd
(設定root密碼)

cd /boot
sysinstall
#與Fedora下的setup有異曲同工之妙
PS.早期的BSD是執行/stand/sysinstall滴喔

進入圖形介面
Configure(Do post-install configuration of FreeBSD)
[Select]
>>
Packages (Install pre-packaged software for FreeBSD)
>>FTP(Install from an FTP server)
>>URL(Specify some other ftp site by URL)
ftp://freebsd.csie.nctu.edu.tw/pub

net--- [X]cvsup-without-gui-16.1h_2(用空白鍵來選擇[X])

security(System Security Software)ssh2-3.2.9.1_5(用空白鍵來選擇[X])
//[安裝ssh2]--bsd剛安裝完之後ssh其實是還沒安裝滴


sysutils(Various system utilities)--[X]portupgrade-2.0.1_1 (用空白鍵來選擇[X])
//目的--升級Port Tree用


[Install]


{{套件管理}}

其實利用ftp的方式安裝就相當於是"pkg_add 套件名稱"的方法來進行以編譯軟體的安裝
我們之後可以用"pkg_delete 套件名稱"的方法來進行移除

pkg_info |more
//顯示已安裝過的套件


reboot


{{第二次登入BSD}}

adduser
Username:sysadm(增加一個管理帳號)
...


vi /etc/group
wheel:*:0:root,sysadm
(讓sysadm這個帳號可以有su的權利)


vi /etc/rc.conf
在最後面加入
sshd_enable="YES"
(這是要讓Super Daemon(inetd)啟動sshd服務的方法)
(FreeBSD中Super Daemon(inetd)要啟動相關的子服務都是要透過"/etc/rc.conf")
(和我以前的認知有蠻大的不同滴.....)


[推薦使用pietty來進行SSH遠端管理我們的FreeBSD]
下載網址
http://w.csie.org/~piaip/pietty/

[Super Daemon:inetd(目前在linux下好像變成xinetd)]
(FreeBSD中Super Daemon(inetd)要啟動相關的子服務都是要透過"/etc/rc.conf")


[只允許管理者使用 ssh 登入]
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vi /etc/ssh/sshd_config
------------以下是sshd_config的修改重點(本行請不要複製)------
AllowUsers sysadm

#在檔案最後面加上這一行,這樣就只有 sysadm 可以使用 ssh 連線了
#若要設定多人,就用空格隔開:AllowUsers sysadm sysadm2
-------------------------------------------------------------------


reboot
#重新開機後ssh才會重讀這個設定檔


我們已經可以用pietty來遠端管理我們的FreeBSD囉!!



{{中文顯示環境及修改預設shell }}

本段原作 :ADJ網路實驗室
service@adj.idv.tw
http://www.adj.idv.tw/server/linux_freebsd.php


* 安裝bash
cd /boot
sysinstall
#與Fedora下的setup有異曲同工之妙
PS.早期的BSD是執行/stand/sysinstall滴喔

進入圖形介面
Configure(Do post-install configuration of FreeBSD)
[Select]
>>
Packages (Install pre-packaged software for FreeBSD)
>>FTP(Install from an FTP server)
>>URL(Specify some other ftp site by URL)
ftp://freebsd.csie.nctu.edu.tw/pub

shells--- [X]bash-3.1.10_1(用空白鍵來選擇[X])

[Install]


* 使用者環境設定 :

中文顯示環境
要能夠顯示中文是很重要的...^^
以bash為例說明Sad因為adj習慣用bash...QQ)

bash的相關設定檔
系統性的:/etc/profile
應該不會有使用者不想要顯示中文吧...所以設定在系統性的檔案,

vi /etc/profile
在檔案中新增以下三行
ENABLE_STARTUP_LOCALE=zh_TW.Big5; export ENABLE_STARTUP_LOCALE
LC_CTYPE=is_IS.ISO_8859-1; export LC_CTYPE
LANG=zh_TW.Big5; export LANG

再加上:
PS1="\u@\h[\w]\$ "

加上常用的 alias:
alias dir="ls -alh"
alias cls="clear"
alias locate.updatedb='/usr/libexec/locate.updatedb'

說明:
\u --> 顯示使用者帳號
\h --> 顯示系統的hostname(機器名)
\w --> 完整路徑
\$ --> 以#表示root,以$表示一般使用者

存檔離開後...重新登入即可生效...



* 修改預設shell :

因為系統預設採用csh為root的shell,所以每次我們要用剛剛設定的bash,
還需要額外輸入指令 bash 來啟動bash shell,太麻煩了。

透過幾個步驟:
確認bash的執行檔絕對位置。
which bash --> 察看bash這個指令的位置,位於/usr/loca/bin/bash
利用vipw 指令修改/etc/passwd中root預設的shell位置。
從原先的預設的/bin/csh
變更為 /usr/local/bin/bash

或是用下指令的形式:
# pw usermod user -s /usr/local/bin/bash

實例
pw usermod sysadm -s /usr/local/bin/bash

PS.士玉測試中文顯示的結果--還是亂碼!!



########################################################################################

Topic 2
{ports-tree更新}

士玉的問題:
1.如何在crontab裡設定來讓ports-tree自動更新?
2.felix習慣先將Port Tree砍掉 再到網站下載重裝,but how ?


##以下這個動作可省略(因為我們已經用sysinstall的方式安裝過了)
cd /usr/ports/net/cvsup-without-gui
make install clean

##以下這個動作可省略(因為我們已經用sysinstall的方式安裝過了)
cd /usr/ports/sysutils/portupgrade
make install clean



##修改make.conf##

mv /etc/make.conf /etc/make.conf.bak
vi /etc/make.conf

------make.conf的內容(本行請不要複製)-----------------------------------------
SUP_UPDATE= yes
SUP= /usr/local/bin/cvsup
SUPFLAGS= -g -L 2
#
# SUPHOST 代表要到哪台 CVSup,請改成離您比較近的 Server。
# cvsup[1-9].tw.FreeBSD.org
SUPHOST= cvsup.tw.FreeBSD.org
#
# 如果您是用 -stable,請用 stable-supfile (目前的 -stable 是 4.3)
# 如果您是用 -current,請用 standard-supfile (目前的 -current 是 5.0)
SUPFILE= /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile
# 國內主要的 FreeBSD distfiles mirror 站台
MASTER_SITE_BACKUP?= \
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/\
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
-------------------(本行請不要複製)------------------------------------------

------make.conf(current)的內容(本行請不要複製)-----------------------------------
MASTER_SITE_OVERRIDE?=\
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/\
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
#MAKE_RSAINTL=YES
#USA_RESIDENT=NO
-------------------(本行請不要複製)------------------------------------------






##ports-tree更新##

cd /usr/ports
cp /usr/share/examples/cvsup/ports-supfile .

vi ports-supfile
將 default host由原先的CHANGE_THIS.FreeBSD.org改成freebsd.csie.nctu.edu.tw

cvsup -g -L 2 ports-supfile
//felix說之後要更新ports-tree只要下這個指令即可


##定期更新ports-tree(HOW?)##
vi /etc/crontab


##搜尋某一個port##

cd /usr/ports
make search key="popper" | more
make search name="php"
make search key="libiconv" | grep Path: | grep libiconv



##升級以port安裝的程式##

用 ports 安裝的軟體,遇有該軟體版本更新時如何處置?
請先做「ports-tree的更新」的動作,之後再分別執行下列三道指令:
portsdb -Uu
//執行 portsdb -Uu 時,會有令人覺得當機的味道。別耽心,耐心的稍等一下下就好。

pkgdb -F

portupgrade -acCv
/*安裝過程出現圖形介面,請直接按OK
過程蠻久的說......
*/

##其他指令##
make install : 安裝所選定的 Port
make deinstall : 移除已安裝的 Port
make reinstall : 移除之後再安裝一次
make clean : 安裝完畢後移除 make 資料夾下的檔案
make distclean : 移除安裝後的原始檔案,以節省磁碟空間
make rmconfig : 移除之前安裝過程中組態選項的設定

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

################################################################################


Topic 3 建置AMP環境(Apache22+Mysql51+PHP5環境)

特別注意:
http://dyna.hcc.edu.tw/dyna/menu/main.php?id=60
這篇文章需要修改不然會有問題喔!!

AMP的安裝順序
可以是MAP也可以是AMP
反正只要記得PHP一定要在最後才裝就對了!!


一、安裝 MySQL:
cd /usr/ports/databases/mysql51-server
make install clean



cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
##以my.cnf作為以後MySQL設定檔

/usr/local/bin/mysql_install_db
##需要於安裝後啟動 MySQL 之前執行,且只需執行一次即可。若執行二次(含)以上,後面的安裝就可能會有問題)


vi /etc/rc.conf
請加入
mysql_enable="YES"


/*小插曲
mysql_install_db
結果出現command not found的尷尬情形
felix建議我使用whereis指令來查詢mysql_install_db命令檔的執行路徑
whereis mysql_install_db
嘿嘿!!找到了==>/usr/local/bin/mysql_install_db
*/


cd /var/db/
chown -R mysql:mysql mysql


請紀錄我們安裝的mysql版本
mysql-server-5.1.11
mysql-client-5.1.11


二、安裝 Apache:
cd /usr/ports/security/openssl
make install clean

cd /usr/ports/www/apache22
make install clean
出現畫面請加選
cgi-bin模組
直接按OK即可

vi /etc/rc.conf
請加入
apache22_enable="YES"
##沒有加入這行是無法啟動apache的服務滴!!



請注意我們安裝的是apache-2.2.3


三、安裝 PHP:

cd /usr/ports/lang/php5/
make install clean
出現畫面請直接按OK即可


cd /usr/ports/lang/php5-extensions
make install clean
請選擇支援
GD、GETTEXT(處理Native Locale有關--舉例gallery2想要選擇介面操作的語系就需要這個模組)
、ICONV、MBSTRING、MySQL、ZIP 模組



{{想重裝php5-extension以加選GD、GETTEXT、ICONV、MBSTRING、MySQL、ZIP ....模組}}

-----想重裝php5-extension來加選GD、GETTEXT、ICONV、MBSTRING、MySQL、ZIP... 模組--------

請做以下動作
cd /usr/ports/lang/php5-extensions
make clean
//安裝完畢後移除 make 資料夾下的檔案

make rmconfig
//可以移除編譯PHP時所選的選項

make distclean
//移除安裝後的原始檔案,以節省磁碟空間

make deinstall
//移除已安裝的 Port

make install clean

就可以加選GD、GETTEXT、ICONV、MBSTRING、MySQL、ZIP... 模組喔


/usr/local/etc/rc.d/apache22.sh restart
#安裝完後要記得重新啟動apache


-------------專題文章:重裝~結束------------------------------------------------------

四、修改並檢查設定檔
vi /usr/local/etc/apache22/httpd.conf

212行
DirectoryIndex index.html 修改成-->DirectoryIndex index.php index.htm index.html

353行後加入這兩行(vi o模式下附加)
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


reboot

五、測試

網站的根目錄是在
/usr/local/www/apache22/data

測試http://192.168.1.2/
看看是否可以看到網頁(It works!)


vi /usr/local/www/apache22/data/phpinfo.php

phpinfo();
?>

測試網址
http://192.168.1.2/phpinfo.php


/usr/local/etc/rc.d/apache22.sh restart
#重新啟動apache的服務

六、安裝phpMyAdmin
cd /usr/ports/databases/phpmyadmin
make install clean
出現畫面請直接按OK即可


---------安裝最後提醒的訊息------------------------------------------------
phpMyAdmin-2.7.0.2 has been installed into:
/usr/local/www/phpMyAdmin(安裝的路徑有問題喔--我們要把它移到網站資料夾內)

Please edit config.inc.php to suit your needs.

To make phpMyAdmin available through your web site,
I sugges that you add the following to httpd.conf:

Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"(Alias的路徑也需要修正)
-----------------------------------------------------------------------------


cd /usr/local/www
mv phpMyAdmin /usr/local/www/apache22/data
#安裝的路徑有問題--我們要把它移到網站資料夾內


vi /usr/local/etc/apache22/httpd.conf
請加上
Alias /phpmyadmin/ "/usr/local/www/apache22/data/phpMyAdmin/"

cd /usr/local/www/data/phpMyAdmin

mv config.inc.php config.inc.php.bak
cp config.default.php config.inc.php

vi config.inc.php
#修改phpMyAdmin的設定檔

31 行 $cfg['PmaAbsoluteUri'] = ''; 修改成--> $cfg['PmaAbsoluteUri'] = 'http://192.168.1.2/phpmyadmin/';
71 行 $cfg['Servers'][$i]['auth_type'] = 'config'; 修改成--> $cfg['Servers'][$i]['auth_type'] = 'http';


/usr/local/etc/rc.d/apache22.sh restart
#重新啟動apache的服務

測試:http://192.168.1.2/phpMyAdmin/,帳號 root,密碼空白

點選「權限」,然後點選「root」這兩行後面的「編輯權限」圖示,更改密碼



七、忘了MySQL root密碼
(1)停止MySQL服務
/usr/local/etc/rc.d/mysql-server.sh stop
(2)以安全模式啟動
/usr/local/bin/mysqld_safe --skip-grant-table&
(3)進入mysql
mysql mysql
mysql>UPDATE user SET password=password('newpassword') WHERE user='root';
(4)重新再跑MySQL
mysqladmin -uroot -p shutdown

八、讓學生可以使用網頁

vi /usr/local/etc/apache22/httpd.conf
移除第435行(左右)的#字註解符號-->請改成
Include etc/apache22/extra/httpd-userdir.conf


vi /usr/local/etc/apache22/extra/httpd-userdir.conf
第10行
UserDir public_html-->請改成UserDir www
第16行
-->請改成


##建立個人網頁資料夾、範本檔##

mkdir /etc/skel/www
echo "Under construction..." > /etc/skel/www/index.html


/usr/local/etc/rc.d/apache22.sh restart
#重新啟動apache的服務

測試

mkdir /home/sysadm/www
echo "Under construction..." > /home/sysadm/www/index.html

http://192.168.1.2/~sysadm


/usr/local/etc/rc.d/apache22.sh restart
#重新啟動apache的服務

我把/usr/local/etc/apache22/httpd.conf 第83行註解掉
#LoadModule ssl_module libexec/apache22/mod_ssl.so
這行是要載入ssl_module-->但我好像沒裝好!!
所以再/usr/local/etc/rc.d/apache22.sh restart出現Error
因此不得不就把它註解掉!!


{{如何上傳網頁到 /usr/local/www/apache22/data}}

底下使用 link 的方式將 /usr/local/www/apache22/data 資料夾連結到 /home/sysadm/web,
這樣我們就可以用 sysadm 帳號上傳網頁了

chmod 755 /home/sysadm
mkdir /home/sysadm/web
chown sysadm:sysadm /home/sysadm/web
cp -rpf /usr/local/www/apache22/data/* /home/sysadm/web/
mv /usr/local/www/apache22/data /usr/local/www/apache22/data.bak
ln -s /home/sysadm/web /usr/local/www/apache22/data


################################################################################


Topic 4 檔案傳輸伺服器

楔子:BSD內建的fptd及原來在Linux下常用vsftpd,沒想到我竟然都啟動不起來!!
所以向琳富求救,琳富推薦我使用功能超極強大的pure-ftpd,果然好用!!
只是這段文字並不是由士玉等人撰寫的
而是由網路上轉寄過來的文件一字不漏的轉貼上來
(如果有知道作者的人請和我聯絡!!)

本段文字若有侵權請來函通知
p16sys@mail.nc.hcc.edu.tw(周士玉)

{{pure-ftpd (Felix)}}


一、安裝
cd /usr/ports/ftp/pure-ftpd
make WITH_LANG=traditional-chinese
make install

-----------------------安裝後的訊息提示----------------------------------------
Now you need to examine /usr/local/share/examples/pure-ftpd/pam/pure-ftpd
and add the relevant PAM configuration lines to your /etc/pam.conf file.
===> Compressing manual pages for pure-ftpd-1.0.20_2
===> Registering installation for pure-ftpd-1.0.20_2
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/pure-ftpd
/usr/local/sbin/pure-authd

This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/pure-ftpd.sh

If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.

For more information, and contact details about the security
status of this software, see the following webpage:
http://www.pureftpd.org/
---------------------------------------------------------------------------------


二、設定
(1)修改設定檔
cd /usr/local/etc
cp pure-ftpd.conf.sample pure-ftpd.conf
chmod u+w pure-ftpd.conf
vi pure-ftpd.conf

(2)基本設定
pure-ftpd 可設定的功能選項非常多,下面介紹幾個常用的參數:
# 所有人都 chroot 只有屬於管理群組 GID
# (下面的設定要讓所有人只能連線到自己的根目錄底下 只有 GID=1001的群組
# (假設這個-管理群姐是sysadm ) 的人可以切換到其他目錄(才不chroot)
ChrootEveryone yes
TrustedGID 1001
# 最多的連線數
MaxClientsNumber 50
# 同一個 IP 能夠連線的最高數量
MaxClientsPerIP 8
# 匿名 FTP 上載/下載的比率
# AnonymousRatio 1 10
# 所有用戶 上載/下載的比率
# UserRatio 1 10
# anonymous 使用者的頻寬速限,單位 KB/s
# AnonymousBandwidth 8
# 所有使用者(包括 anonymous) 的頻寬速限, 單位 KB/s
# UserBandwidth 8
# 如果要使用 PureDB user database 來建立虛擬帳號就加入下面這行
# 詳細的說明可以參考 README.Virtual-Users
# PureDB /usr/local/etc/pureftpd.pdb

(3)自動執行設定
vi /etc/rc.conf 加入
pureftpd_enable="YES"

(4)匿名FTP設定
要讓 pure-ftpd 能夠提供匿名的 FTP 服務 (Anonymous FTP),
首先要先建立好要給 FTP 使用的群組、帳號及目錄,
下面我們準備一個群組叫 ftpuser ,一個帳號叫 ftp ,
並使用 /home/ftp 來放給訪客下載的檔案,執行底下的指令:

pw groupadd ftpuser -g 21
pw useradd ftp -u 21 -g ftpuser -c "Anoymous FTP user" -d /home/ftp -s /sbin/nologin
mkdir /home/ftp
chown ftp:ftpuser /home/ftp
修改設定檔,在 pure-ftpd.conf 中和匿名的 FTP 服務有關的選項至少要設定:
NoAnonymous no
AnonymousCanCreateDirs no
AnonymousCantUpload no
如果想管制訪客下載的頻寬則可以設定 AnonymousBandwidth 的大小,其它設定自己研究囉!


(5)連線記錄
假設我們希望 pure-ftpd 的連線記錄都寫入 /var/log/pureftpd.log,就執行下面的指令來產生空白的檔案:
touch /var/log/pureftpd.log
修改 syslogd.conf
系統記錄是由 syslod 來總管,pure-ftpd 的連線記錄該寫至何處也是由它來控制,
所以我們要修改 /etc/syslogd.conf ,不然,沒修改之前,所有 pure-ftpd 的記錄都寫到 /var/log/messages 中了。
以編輯器開啟 syslogd.conf 來修改:
vi /etc/syslogd.conf
在裡面找到這下面這行:
cron.* /var/log/cron
然後在它的下面新增一行:
ftp.* /var/log/pureftpd.log
通知 syslogd 重新讀取 /etc/syslogd.conf 中的設定
kill -HUP `cat /var/run/syslogd`
如果以後想要使用 web 的流量分析程式來分析 FTP 記錄,就在 pure-ftpd.conf 中加入下面這行:
AltLog clf:/var/log/pureftpd.log

(6)虛擬帳號的使用
有時候,可能為了辦活動臨時想開一些可以透過 FTP 上載資料的帳號,FreeBSD 內建的 ftpd 綁在系統中,
開了帳號如果沒有特別設定,可能該帳號也能使用其它網路資源,稍嫌麻煩,pure-ftpd 提供了虛擬帳號的功能,
這部份的帳號只有 pure-ftpd 知道,和系統的其它服務基本上是沒有關係的。
pure-ftpd 的虛擬帳號可以選擇儲存常見的資料庫軟體中,如 MySQL , PostgresSQL 或是 LDAP,
如果帳號不多,不想那麼麻煩,它也提供儲存在 PureDB user database 中,下面簡單的試一下 PureDB 。
帳號管理工具:/usr/local/bin/pure-pw
帳號資料檔:
/usr/local/etc/pureftpd.passwd
/usr/local/etc/pureftpd.pdb

5-1 建立虛擬帳號共用的系統帳號
當我們要利用 pure-ftpd 附的工具 pure-pw 來建立虛擬帳號時,它會要我們指定一個系統帳號及群組,
所以要先建一個系統帳號及群組,假設我們要使用 ftpuser 的帳號及 ftpgroup 群組,就執行:
pw groupadd ftpgroup
pw useradd ftpuser -g ftpgroup -c "FTP visual user" -d /dev/null -s /sbin/nologin

注意:前述的系統帳號不要使用和 Anonymous FTP 一樣的帳號、群組。

5-2 建立虛擬帳號
pure-ftpd 虛擬帳號的管理是利用 pure-pw 這個工具,它用起來和 FreeBSD 的 pw 類似,
只是可設定的選項更多了,有興趣可以 man pure-pw ,下面我們先建立一個測試的帳號 hello:

pure-pw useradd hello -u ftpuser -d /home/ftpuser/hello -m

指令輸入完,按完 Enter 鍵,pure-pw 會要求輸入密碼並再確認一次,設定好,帳號即新增完畢了。

參數說明:

useradd:表示要執行新增帳號的程序。後面接要新增的帳號 hello。
-u ftpuser:ftpuser 為前一個步驟所建立的,可以讓所有的虛擬帳號都使用這個。
-d /hme/ftpuser/hello:設定要給這個帳號存放檔案的目錄。
-m:帳號新增完後順便把資料轉入資料庫 (/usr/local/etc/pureftpd.pdb) 中。
如果沒有加這個參數就要自己執行 pure-pw mkdb 來轉檔。
pure-ftpd 的虛擬帳號還有很多的選項可設定,例如,可以管制傳輸的速度、quota、
可連線 IP ...... 等,看看 pureftpd.passwd 中所使用的欄位:

:::::::::::::::::