(黃獻德) Hsien-De Huang | E-Mail:TonTon (at) TWMAN.ORG | TonTon (痛痛)
Malware Analysis Network in Taiwan (MiT) | 惡意程式分析網在台灣 (抬丸郎)
Deep Learning (深度學習), Malware Analysis (惡意程式分析), Ontology (知識本體)
Android Reverse Engineering (Android 逆向工程), Type-2 Fuzzy Logic (第二型模糊邏輯)

ONE PIECE (海賊王)

ONE PIECE (海賊王)

2013年1月17日

FreeBSD 教學備忘錄


嗯 ~ 傳說中的小惡魔 ... 托這學期修課 Computer System and Network Administration 的福
PS 1: 其實剛好是教授課堂上的作業跟期末專案啊 ! xDDDD
PS 2: 我決定保留一台最完整的 FreeBSD 供未來教學使用 ! xD

這邊先簡要說明一下這文會講解到那些動作: 
因為文章很長 ... 所以先看看有沒有你需要的吧 !
1. Installation
2. Update source
3. Build world
4. Build and install kernel
5. Install world
6. Using port
7. Port Manager
8. Software Installation
9. Update FreeBSD
10. Enable SSH
11. FTP
12. DNS
13. FAMP (FreeBSD+Apache+MySQL+phpMyadmin)
14. NIS (Network Information Service)
15. NFS (Network File System)
我又玩了新的 UNIX-Base 作業系統
頓時想起了我一頭栽入 UNIX 開始玩的 Solaris 10 ....
(找時間再來好好整理一下 Solaris 10 的備忘錄 ~ XD) 

好啦 ! 話不多說 ... 簡單看一下這個課的幾個要求 ....

首先是最基本的把 FreeBSD 安裝起來
所以要先到這邊來下載

順道解釋一下版本的不同
Current: Experimental version for testing new features 
Stable: Stable version for well-tested features 
Release: Official Release version

接著燒成光碟後直接放到電腦裡 ... 光碟開機啊 !

 首先當然就是要選擇 218 Taiwan 啦
接著是 USA ISO 
 再來則是要進行一些細微調整
這邊就是要切 Partition 了 

由於這只算是測試機,所以我切的很簡單

 選擇標準
 設定 Bootable
 然後設定一下 Label

測試機,所以我只切 / 跟 swap 



 再來則是選擇 Distrbutions
 請進到 Custom
 然後依序把 base, Kernels, src, ports 等選起來

 選擇你的安裝媒體
接著就可以安裝囉 

這邊記得選 " YES ",這樣才可以設定一些東西 
首先是 root 的 password,這是最重要的啊 ! 
 再來則是自己開個帳號

 接著就是要設定網路
因為是課堂要求,所以我連 NFS, rpcbind 等等都選了 
 然後就是要設定網卡啦

 依序輸入你的網路資訊

啟用它 
 這邊選擇 " YES "
光碟就會跳出來 ... 再按下 Enter 後,它就會重開機囉 ! 

嗯 ~ 不用理它,讓它自動進 Default 吧 


接著的動作是,但是第一個動作就讓我等了超過兩小時啊 ....

取得最新的原始碼 ( CVSup / CVS / CTM ) 
編譯所有的系統程式 ( make buildworld ) 
編譯新的系統核心 ( make buildkernel )
安裝新的系統核心 ( make installkernel ) 
安裝新的系統程式 ( make installworld ) 
更新系統設定檔 ( mergemaster )


首先請照下面這樣做 ...
cp /usr/share/examples/etc/make,conf /etc 
然後照著下方的畫面修改
SUP_UPDATE=yes
 SUPHOST=cvsup.tw.FreeBSD.org
以及把其它幾項的註解都拿掉
 接著就是讓它開始跑啦 .... 
cd /usr/src && make update (讓我等了超過兩小時,真的非常非常久)

嗯 ~ 這邊真的要很久很久的時間 .... 建議去泡個茶看一下電視吧 ....
(我等到最後,居然給我出現失敗 .... 一整個超無言的啦)

嗯 ~ 在繼續網下看之前先補充一個超智障的事情.... 那就是忘記 root 密碼時要怎辦

直接到本機端重開機 ... 然後看到上面畫面後選擇 " 4 " 進 single mode
 接著就直接下mount -u / 跟 mount -a 就可以用 passwd 改密碼了 ... 0rz

首先是我的 /etc/rc.conf
nfs_client_enable="YES"
nfs_server_enable="YES"
nfs_client_flags="-n 4"
nfs_server_flags="-u -t -n 4"
rpcbind_enable="YES"
mountd_enable="YES"
mount_flags="YES"

sshd_enable="YES"
enable_quotas="YES"
check_quotas="NO"

pf_enable="YES"
pflog_enable="YES"
pf_rules="/usr/share/examples/pf/pf.conf"

apache22_enable="YES"
inetd_enable="YES"
mysql_enable="YES"
portmap_enable="YES"
rpc_statd_enable="YES"
rpc_lockd_enable="YES"
named_enable="YES"

nisdomainname="p78991244"
nis_server_enable="YES"
nis_client_enable="YES"
nis_yppasswdd_enable="YES"
nis_yppasswdd_flags="-t /var/yp/master.passwd"
nis_ypxfrd_enable="YES"

amd_enable="YES"
接著是相關需求
---------------------------------------------------------------------------------------
FTP
太簡單就不多加說明
---------------------------------------------------------------------------------------
DNS
一樣可以參考:DNS-提供 Domain Name 與 IP 對應的服務

/etc/namedb/named.conf

options {
         allow-query    { any; };
        };
//controls {/* empty */}/;
// Root server hints
zone "." {type hint; file "/etc/namedb/master/named.root";};
// Provide a reverse mapping for the loopback address 127.0.0.1
//zone "0.0.127.in-addr.arpa" {type master; file "localhost.rev"; notify no;};
zone "localhost" {
        type master;
        file "/etc/namedb/master/named.localhost";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "/etc/namedb/master/named.127.0.0";
};
zone "p78991244.imslab.org" {
        type master;
        file "/etc/namedb/master/named.p78991244";
};
zone "9.133.140.in-addr.arpa" {
        type master;
        file "/etc/namedb/master/named.42.9.133.140";
};

/etc/namedb/master/named.p78991244

$TTL 600
@ IN SOA p78991244.imslab.org. TonTon.TWMAN.ORG (
                        2013100901  ;      Serial
                        36000   ; refresh: 10 hrs
                        1800    ; retry: 30 mins
                        3456000 ; expire: 40 days
                        36000   ; minimum: 10 hrs
)
                    IN      NS      p78991244.imslab.org.
@      30       IN      A       XX.XX.XX.XX
www    30     IN      CNAME   p78991244.imslab.org.
php    30       IN      CNAME   www.p78991244.imslab.org.
vm     30       IN      A       XX.XX.XX.XX
f102   30       IN      A       XX.XX.XX.XX
SA101  30       IN      CNAME   p78991244.imslab.org.


/etc/namedb/master/named.42.9.133.140


$TTL 600

@ IN SOA p78991244.imslab.org. TonTon.TWMAN.ORG (
                        2013100901  ;      Serial
                        36000   ; refresh: 10 hrs
                        1800    ; retry: 30 mins
                        3456000 ; expire: 40 days
                        36000   ; minimum: 10 hrs
)
@               IN      NS      p78991244.imslab.org.
42              IN      PTR     p78991244.imslab.org.

測試辦法: nsllokup --> server xx.xx.xx.xx --> search

---------------------------------------------------------------------------------------
FAMP (FreeBSD+Apache+MySQL+phpMyadmin)
首先是 Project 要求
1.Basic System 
•Setup Apache2.2 and configure files of apache 
•Userdir: Let users have their own space (Modify /usr/local/etc/apache22/extra/httpd-userdir.conf) 

2.Virtual hosts 
•Original: http://www.imslab.org/~hungwei/ 
•After using virtual hosts: http://hungwei.imslab.org 

3..htaccess 
•Protect your website with username and password 
•Redirect: http://<your website URL>/google/ -> http://www.google.com/

•Bonus 
1.
5% You need two domain names with same IP address 
•Example: hungwei.imslab.org & php.imslab.org 
•You can access phpMyAdmin by http://php.imslab.org/phpMyAdmin/ but can’t access by http://hungwei.imslab.org/phpMyAdmin/ 
•You can access website by http://hungwei.imslab.org/
2.
5% Blog, Forum 
•Wordpress 
•Discuz 
•Others you like or write it yourself


(細部操作可參考: Mysql Apache PHP-黃金架站組合;僅附上我的設定檔)

設定檔:/usr/local/etc/apache22/httpd.conf
啟動/停止:/usr/local/etc/rc.d/apache22 restart
網頁目錄(可在設定檔修改):/usr/local/www/apache22/data/
虛擬目錄設定檔:/usr/local/etc/apache22/extra/httpd-vhosts.conf
使用者網頁設定檔:/usr/local/etc/apache22/extra/httpd-userdir.conf
.htaccess:
AuthName     " XD stOOrz ~ "
Authtype     Basic
AuthUserFile /usr/local/etc/apache22/appache.passwd
require user XD
Redirect 301 /google https://www.google.com.tw



htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password

---------------------------------------------------------------------------------------
NFS (Network File System)

這個其實還蠻簡單的 .... (但我明明就搞了好久才搞定)


先到 /etc/rc.conf 裡新增以下幾行:

nfs_client_enable="YES"
nfs_server_enable="YES"
rpcbind_enable="YES"
nfs_client_flags="-n 4"
nfs_server_flags="-u -t -n 4"
mountd_enable="YES"
mount_flags="YES"

然後到 /etc/exports 裡設定要分享的目錄
-ro 表示 read only,唯讀。 
-maproot=user 如果 client 以 root 存取,則將它的權限對映成本機 user 的權限。 
-mapall=user 將所有 client 的存取連線對映到 user,也就是說所有人的身份都轉成 user。 
-alldirs 可以讓使用者將該分享資料夾的任一目錄做為 mount point。也就是說當我們分享的是 /usr 時,client 也可以將 /usr/include 當成掛入點來 mount。但前提是 /usr 必須是一個獨立的 filesystem,也就是說 /usr 必須是獨立分割成一個 slice。 
-network IP -mask MASK 指定允許連線的網域。

設定要分享的目錄,但如果所要分享的目錄位於同一個 slice,則必須寫在同一行,因為同一個分割區只能有一種權限;另外只能寫絕對路徑;就是這兩個害我一直搞不定 ... 因為我在切割硬碟時偷懶直接全部都切成 / ~ xDDD


再來就是啟動相關的服務
# /etc/rc.d/rpcbind start/stop/restartstatus
# sockstat |grep rpcbind

#/etc/rc.d/nfsd start/stop/restart 或 #/usr/sbin/nfsd -u -t -n 4
# ps ax |grep nfsd

#/etc/rc.d/mountd start/stop/restart
# /usr/sbin/mountd -r

每次編修過 /etc/exports 一定要執行一次
# kill -HUP `cat /var/run/mountd.pid`

檢查啟動情形
# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  rpcbind
    100000    3   tcp    111  rpcbind
    100000    2   tcp    111  rpcbind
    100000    4   udp    111  rpcbind
    100000    3   udp    111  rpcbind
    100000    2   udp    111  rpcbind
    100000    4 local    111  rpcbind
    100000    3 local    111  rpcbind
    100000    2 local    111  rpcbind
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100005    1   udp    796  mountd
    100005    3   udp    796  mountd
    100005    1   tcp    796  mountd
    100005    3   tcp    796  mountd

對了 ! 我是參考 

---------------------------------------------------------------------------------------
NIS (Network Information Service)

嗯 ~ 這個我想這邊有一篇很好的文章 .... 我就不班門弄斧啦 !
不自量力 の Weithenn: NIS-Network Information Service:


順道一提 FreeBSD 還是可以當 NIS Server 然後用 CentOS 當 NIS client
因為會有 passwd.master 跟 passwd 的不同,以及 " * " 跟 " x " 的不同 ...
細節請參考這一篇:Re: FreeBSD NIS serving linux clients.
(怕網址失效特地截圖)

不過,後來仔細的看了一下發現 .... FreeBSD 的 /var/yp/Makefile 裡寫著 ....

# If you want to use a FreeBSD NIS server to serve non-FreeBSD clients
# (i.e. clients who expect the password field in the passwd maps to be
# valid) then set this variable (UNSECURE="True") in Makefile.local.
# This will cause $YPDIR/passwd to be generated with valid password
# fields.  This is insecure: FreeBSD normally only serves the
# master.passwd and shadow maps (which have real encrypted passwords
# in them) to the superuser on other FreeBSD machines, but non-FreeBSD
# clients (e.g. SunOS, Solaris (without NIS+), IRIX, HP-UX, etc...)
# will only work properly in 'unsecure' mode.
#
#UNSECURE = "True"

FreeBSD and Linux 密碼均採用MD5編碼,但FreeBSD不會對NIS Clinet送出該編碼的密碼,該欄位為*,為了與Linux NIS/yp server會送出密碼編碼相容故在FreeBSD /var/yp/Makefile需將該設定打開。 然後就可以搞定囉 ! 
基本上選項打開後可以發現可以在 CentOS 上 su 成 FreeBSD 上的帳號 ... 但就是不能登入 ... 這邊建議不彷試一下 yppasswd 改一下密碼吧 ....

CentOS 上的 NIS 請參考鳥哥大作: