藍天浮雲

This is our world… Nothing changes. It’s here, that we are going to live on…

Archive for the ‘FreeBSD’ Category

Apache 設定

沒有留言

Apache 的說明文件其實很完整,所有的 options 都有詳細說明。不過感覺對初學者不是很友善,國中的時候很多地方都看不懂。

有時候也要用一下搜尋才找的到需要的資料,因為東西太多了,像是模組 就有數十個。

Apache 的設定檔位於 /usr/local/etc/apache22/httpd.conf(Includes/ 和 extra 裡面也有一些設定)。

節錄一下設定檔:

# 這是 Apache 程式、設定檔的路徑,正常人不會想改他
ServerRoot "/usr/local"

# 設 Apache 要聽哪個 port(前面可加 IP),除非有用 reverse proxy 否則不需要更動
Listen 80

# 載入一堆模組,有很多可以移除,但不確定的話建議別亂改
# LoadModule foo_module modules/mod_foo.so

# Apache 要以什麼使用者和群組執行
# 要注意一下會有一個程序是以 root 執行,原因是
# port 80 需要權限才有辦法 bind,因此需要 root
User www
Group www

# 管理員信箱
# 根據 RFC 2142 應該設成 webmaster@domain.tld,www@ 為 alias
ServerAdmin webmaster@hs.ntnu.edu.tw

# 網頁的資料,我通常都設成 /home/www/hostname
DocumentRoot "/home/www/www"

# 目錄之權限,預設當然是封鎖所有目錄
<Directory />
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

# 網頁所在的目錄之設定
<Directory "/home/www/www">
    # 允許 symlinks,預設有 Indexes 但被我拿掉了
    Options FollowSymLinks
    # 建議不要用 .htaccess 設定,效能差
    AllowOverride None
    # Allow 所有人
    Order allow,deny
    Allow from all
</Directory>

# 預設送哪些檔案,我加了 PHP
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

# 拒絕看 .htaccess 與 .htpasswd
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

# 紀錄檔位置,我通常會改目錄,這樣比較整齊
ErrorLog /var/log/httpd/httpd-error.log

# 紀錄之詳細程度
LogLevel warn

基本的設定檔就到這裡。接下來就是模組、額外的設定。看到 httpd.conf 最下面有很多被註解掉的設定檔。

  • extra/httpd-mpm.conf:管理 Apache 程序,除非流量很大否則預設就好
  • extra/httpd-userdir.conf:使用者網頁專用的模組
  • extra/httpd-info.conf:一些 server 的資訊
  • extra/httpd-vhosts.conf:虛擬主機,很有用,但 SSL方面有些限制
  • extra/httpd-default.conf:一些 Apache 的設定
  • extra/httpd-ssl.conf:SSL 的設定

通常我會改 httpd-info.confhttpd-default.confhttpd-vhosts.confhttpd-ssl.conf 有用到才會設。

httpd-info.conf:最好設成只有 127.0.0.1 可以看,或乾脆拿掉,有需要再啟用。另外,可以用 ExtendedStatus On

httpd-default.conf:改 ServerTokens ProdServerSignature Off

因為 httpd-vhosts.confhttpd-ssl.conf 設定比較複雜,先跳過。

一些常見的設定:

  • <Directory>:目錄
  • <FilesMatch>:檔案
  • <Location>:URL 的部分
  • AddType:Content 種類
  • Header:HTTP header
  • FileETag:ETag 的設定
  • SetOutputFilter:可以用來壓縮
  • Alias:別名
  • Redirect
  • Rewrite:有點像 mod_alias 的加強版
  • IndexOptions

一些常用的模組:

  • headers
  • cache
  • expires
  • deflate
  • alias
  • rewrite
  • ssl
  • vhost_alias

除此之外,CGI、PHP 和 content negotiation 也是一些常用的功能。

作者為dennylin93

2009/12/08 at 10:02 下午

安裝 Apache

沒有留言

網路上有很多種不同的 server,其中 Apache 是最受歡迎也是使用最久的 server 之一。現在 Netcraft 的 survey 顯示 Apache 佔了市場的 47%,接下來才是 IIS、nginx、lighttpd。

Apache 因為使用廣泛、歷史悠久,主要的優點包含:

  • 功能完整
  • 穩定
  • 支援度高

但比起 nginx、lighttpd 這兩個後起之秀,效能沒有那麼好。

現在仍然有許多網站使用 Apache,如 Wikipedia、W3C、ISC、Google(據說是用改版的 Apache)。

Apache 除了靜態網頁之外,還可以配合 PHP 與 MySQL 做動態網頁。

灌 Apache 其實很簡單,只要下:

# cd /usr/ports/www/apache22 && make install clean

模組很多,基本上用預設就好,不過可以不選 DAVDAV_FSCERN_METAIMAGEMAP(若要用 Subversion 要留 DAVDAV_FS)。

接下來把 apache22_enable="YES" 加入 /etc/rc.conf 就可以啟動 Apache 了:# /usr/local/etc/rc.d/apache22 start

除了 script 以外,還有 apachectl 可以使用。

測試設定檔有沒有問題:
# apachectl configtest
啟動 Apache:
# apachectl start
停止 Apache:
# apachectl stop
重新啟動 Apache:
# apachectl restart
重新啟動 Apache:
# apachectl graceful

restartgraceful 的差別在於 graceful 會先等現有的連線結束後才重新啟動。通常建議用 # apachectl graceful。若 Apache 沒有啟動,restartgraceful 都會啟動 Apache。

Apache 的設定檔位於 /usr/local/etc/apache22/httpd.confIncludes/extra 裡面也有一些設定)。

詳細設定之後在打。

作者為dennylin93

2009/12/08 at 9:15 下午

一次設定完 ports

沒有留言

FreeBSD 上編 ports 的時候,常常會有 options 選單跳出來。有時候想下完指令然後給他自己跑,結果到某一步又有選單跑出來,沒辦法繼續。不久之前看到了一個解決方式:config-recursive。一次將所有的 dependencies 設完再開始安裝。

若第一次安裝就用:

# make config-recursive install clean

其實 ports 有很多關於 make 的選項,都可以在 /usr/ports/Mk/bsd.port.mk 裡找到(大約 700 行的地方)。

作者為dennylin93

2009/11/29 at 10:59 AM

升級到 FreeBSD 8.0-RELEASE

沒有留言

從段考前就一直期待 FreeBSD 8.0-RELEASE(害我沒辦法專心看書…)。直到昨天才 announce。其實幾天前 mirror 上面早就有了,不過要等大部分的 mirror 都 sync 完之後才會公佈。

這次 release 改了很多東西(每次 FreeBSD 邁入下一個版本的時候都是如此)。綜合一下這幾篇的重點:

主要更新有:

  • 新的虛擬化技術「vimage」,這是針對 FreeBSD Jails,現在每個 jail 都可以有獨立的 network stack
  • 舊的 TTY layer 被取代了,新的對 SMP 有更好的支援
  • Linux emulation layer 更新成 2.6.16,Linux port 則用 emulators/linux_base-f10
  • GENERIC 核心包含 Trusted BSD MAC
  • 整個 USB stack 被重寫
  • ZFS 版本更新到 13
  • 支援 NFSv4
  • gvinum 被更新
  • ULE scheduler 被改善

這裡有更詳細的 release notes

這次升級出了狀況,太早將 old libraries 砍掉,結果破壞了 backward compatibility。很多 ports 無法使用。幸好有修好。

更新其實還算簡單,沒有碰到什麼問題(除了我腦殘以外)。

先抓 RELENG_8_0 的 source 回來。將 supfile 的 RELENG_7_2 改成 RELENG_8_0,然後 # csup -g -L 2 standard-supfile

*default host=cvsup3.tw.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_0
*default delete use-rel-suffix
*default compress

src-all

接下來就設定 kernel。把 /usr/src/sys/i386/conf/GENERIC 複製到 /root/kernels/MYKERNEL,然後再 symlink 到 /usr/src/sys/i386/conf/MYKERNEL。這次 kernel 沒什麼大變化,除了 acpi 被加進 GENERIC

設好後就開始編了:

# cd /usr/src
# make -j 6 buildworld
# make -j 6 buildkernel KERNCONF=MYKERNEL
# make installkernel
# reboot

Handbook 步驟差不多,-j 會加快速度,kernel 也用 custom 的。雖然說 major upgrade 最後先用 GENERIC,但懶得用,所以就冒險一下(其實我有從 mirror 抓回 GENERIC 然後放到 /boot/kernel.GENERIC)。

家裡編 world + kernel 大概要 40 分鐘吧,新的電腦可能不用 20 分鐘就完成了。

重開機進入「single user mode」:

# adjkerntz -i
# mount -a -t ufs
# mergemaster -p
# cd /usr/src
# make installworld
# mergemaster -Fi
# reboot

也跟 Handbook 差不多,但 mergemaster 加上了 -Fi-F 會自動更只有 $FreeBSD$ 不一樣的檔案,-i 會自動安裝 /etc/ 底下不存在的檔案。應該沒什麼困難。

這樣就跟新完了。Kernel 有留 COMPAT_FREEBSD7 的話 ports 應該還可以用,舊的 libraries 也別急著刪掉。

像我就不小心看掉 libraries,只好放大絕(# pkg_delete -a),然後用 packages 重裝。大部分的時間都花在下載 packages。

話說星期一要換新的 mail server 了,等了好久 :-)。

作者為dennylin93

2009/11/28 at 2:09 下午

張貼於FreeBSD, 電腦科學

更改 MySQL 使用者的密碼

沒有留言

我印象中第一次在 FreeBSD 上灌 MySQL 的時候應該是高一吧。那時候不知道怎麼用 mysqlroot 的密碼,因為國中都用 phpMyAdmin,對 SQL 一無所知。

自從暑假用 MySQL 當作 mail server 的 backend,就開始學 SQL 了。一直用 phpMyAdmin 不是辦法。當然,最重要的指令就是更改 root 的密碼了。

安裝、啟動 MySQL 之後,進入命令列:

# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 80
Server version: 5.1.40-log FreeBSD port: mysql-server-5.1.40

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

第一次看到這個就傻眼了,因為不知道該做什麼。其實很簡單,只要執行:

mysql> UPDATE mysql.user SET password = PASSWORD('newpass') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;

就可以更換 root 的密碼了(記得把「newpass」改成自己的密碼)。

UPDATE 是更新 mysql 資料庫裡的 user table。SET 是設定,PASSWORD 是 MySQL 內建的 hash function,用來加密密碼。後面的 WHERE 限制更改使用者為 root 的密碼。最後 FLUSH PRIVILEGES 會告訴 server 重新載入權限的資訊。

作者為dennylin93

2009/11/11 at 8:21 下午

glabel

沒有留言

其實 glabel 在 FreeBSD 上是一個很實用的程式,不過平常可能很少聽到他。之前灌 FreeBSD 有提過 glabel

當硬碟、隨身碟插在不同的 port,名稱會變來變去。硬碟可能從 /dev/ad0 變成 /dev/ad1,隨身碟可能從 /dev/da3 變成 /dev/da7。原因是作業系統通常指認得硬體插在主機板上那一個 port。

如果插在不同電腦或 port 上名稱會改變是一件非常麻煩的事。因此,就會想給他一個固定的名稱。此時,glabel 就可以發揮公用。

因為 glabel 會將資料寫入硬體當中,因此必須先卸載裝置才能 label 上去。最簡單的方式就是重新開機,然後進入「single user mode」。

使用 glabel 前請先確認 kernel 是否有加 GEOM_LABEL 這個選項(GENERIC 預設有)或有 geom_label.ko 這個模組。沒有的話,請先重新編譯 kernel。

進入 single user mode 之後就可以開始下 # glabel label -v name dev-v 會增加訊息的詳細程度)。

之前灌新的 mail server 的時候,我就開始用 glabel 了(主要原因其實是建 RAID-Z)。按照 /etc/fstab 的順序 label 比較不會搞混或漏掉:

# glabel label -v swap /dev/ad4s1b
# glabel label -v root /dev/ad4s1a
# glabel label -v home /dev/ad4s1g
# glabel label -v tmp /dev/ad4s1e
# glabel label -v usr /dev/ad4s1f
# glabel label -v var /dev/ad4s1d

標完後可以用 # glabel status# glabel list 看結果:

# glabel status
       Name  Status  Components
 label/root     N/A  ad4s1a
 label/swap     N/A  ad4s1b
  label/var     N/A  ad4s1d
  label/tmp     N/A  ad4s1e
  label/usr     N/A  ad4s1f
 label/home     N/A  ad4s1g

確定 label 成功後就更新一下 /etc/fstab

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/label/swap         none            swap    sw              0       0
/dev/label/root         /               ufs     rw              1       1
/dev/label/home         /home           ufs     rw              2       2
/dev/label/tmp          /tmp            ufs     rw              2       2
/dev/label/usr          /usr            ufs     rw              2       2
/dev/label/var          /var            ufs     rw              2       2

下次開機就會使用這些 label 了。重新開機前,請再三確認 label 有成功和 /etc/fstab 沒有錯誤,因為沒弄好的話可能無法開機,需要用救援光碟去救回來。

這樣就完成了。Man page 上有更詳細的說明。

作者為dennylin93

2009/11/05 at 9:47 下午

OpenSSH

沒有留言

熟悉 BSDUnixLinux 的人應該都聽過 SSH 這個協定。SSH 主要用途是遠端登入,不過也可以做 port forwarding、tunneling(通常用來鑽防火牆)、SOCKS 或用來傳檔案。SSH 之所以會出現是要取代 telnet 等程式,因為 telnet 連線未經過加密,容易被竊聽。

這篇會提到怎麼架 OpenSSH 和一些常用的指令。

大部分的 BSD、Unix、Linux 作業系統上都有 SSH 的程式,其中使用最廣泛的應該是 OpenSSH。OpenSSH 是由 OpenBSD 的開發者開發。

OpenSSH 是 OpenBSD 的一個部分,而開發的時候會釋出一個「portable」的版本,可以移植到其他作業系統。目前 FreeBSD 7.2 的 base 包含 OpenSSH 5.1p1

繼續閱讀文章 »

作者為dennylin93

2009/11/05 at 9:08 下午

阻擋 SSH brute force

有3則留言

架好 FreeBSD 或 Linux 之後,常常見到的一個現象就是 SSH 持續的遭受攻擊。在 security run output 會看到這樣的訊息:

ns.hs.ntnu.edu.tw login failures:
Oct 30 02:25:01 ns sshd[12801]: Invalid user master from 140.124.62.197
Oct 30 07:13:22 ns sshd[14529]: Invalid user globus from 213.99.38.3
Oct 30 07:13:31 ns sshd[14535]: Invalid user condor from 213.99.38.3
Oct 30 07:13:32 ns sshd[14534]: Invalid user cadi from 213.99.38.3
Oct 30 07:26:44 ns sshd[14591]: Invalid user simoni from 124.193.106.107

看到就覺得很煩,因為每天都有,而且若不阻檔的話,可能會有數千比,系統也有機會遭到入侵。

為了阻擋 SSH brute force,我在 FreeBSD 上裝了 security/sshguard-pfsshguard 的好處是他可以判別很多種紀錄檔,也支援許多種防火牆。另外,也可以調整多久時間內登入失敗幾次,還有要擋掉多久。

目前可以判讀這些軟體的紀錄檔:

支援的防火牆包含:

作者為dennylin93

2009/11/01 at 9:20 AM

簡單備份用的 shell script

沒有留言

自從上週慘痛的經驗,已經打算將備份做完善一點。今天晚上寫了這個 shell script,用來備份系統資料、設定檔。因為檔案不多,只用 cptar 來完成,沒有用到 net/rsync

這個 shell script 還有很多要修改的地方(主要是讀取參數的部分),不過應該還可以用。

繼續閱讀文章 »

作者為dennylin93

2009/10/25 at 9:53 下午

張貼於FreeBSD, 電腦科學

在 FreeBSD 上設定 lagg

沒有留言

最星期買了兩條 Cat 6 的網路線(3 公尺,$130),想試試 lagg。在 FreeBSD 上,lagg 提供了 failoverfec(又稱 loadbalance)、lacp 等功能。比較常用的應該是 failoverlacp

  • failover:這個模式可以設定主要與次要的網卡,當主要網卡無法使用時,會自動換成次要網卡
  • lacp:此模式會將流量分散在各個網卡當中,而硬體有變化時會自動偵測並更改設定

這兩個設定當中,lacp 比較麻煩一點,因為 switch 必須支援,也需要一些額外的設定。

繼續閱讀文章 »

作者為dennylin93

2009/10/23 at 10:03 下午