2009年10月31日

linux的安全性

以現在的狀況來說,我覺得linux的安全性跟便利性來自於操作者對他的瞭解,相對來說M$並不是不安全,只是他瞄準的對象跟linux有差異,M$一般的版本是對一般使用者,以就是不會深入去瞭解何謂攻擊,防火牆跟防毒軟體有啥差異,木馬跟病毒有何不同的人

當然,如果單說M$才有對使用者的便利性上努力來說,對linux並不公平,事實上linux近來也開發了不少使用者的圖形工具,方便使用者整理資訊跟使用

不過話說回來,linux在console mode底下的東西是累積性的,相對來講,M$似乎在這方面還發展的不夠,M$似乎要使用者不斷的學習如何去"操作"管理介面,下個版本可能就會不一樣

但是來看看開發環境吧,如果還有人記得之前我轉pcman的一篇文章,大家就知道,在linux底下開發一些程式真的是缺乏文件,真的還蠻慘的,這是開放的"原罪"

翻了過去我寫的一些文章,我發現有不少是為了解決某些特定版本應用程式的問題,比方說如何使用virtual box分享資源,這東西到後來都改變了,也是跟M$的操作介面一樣,並不會有太大的累積性,講了這一段要說啥呢?要說~我愛console XD

2009年10月30日

linux screen套件使用

screen這東西出現大概是為了在console底下,人們只有一個畫面,不如視窗畫面可已有多個tab衍生出來的,主要就是在一個空間內擠入更多的資訊
screen用起來還真的"沒有感覺"orz,怎麼說沒有感覺,因為許多預設的套件就是乾乾淨淨,除了畫面閃了一下,提示字元變成最上面一行之外,好像沒啥變動
建議初學者先在.screenrc這個檔案加入以下的資料(如果沒有這個檔案就建立他,跟.vimrc差不多意思)
caption always "%{wK}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wK}%?%+Lw%? %= %{= Kw}%Y-%m-%d %0c:%s"

這樣一來,啟動screen的時候就會看到底下有個0$bash的畫面跟一個時間
大多數的screen指令使用ctrl+a開頭(說到這個我就不大喜歡,不知道是已經不成文的規定還是怎樣,一堆網路文件都使用C代替ctrl Orz連emacs也是這樣)
ctrl+a再按下c (ctrl+a c)建立一個新的視窗,這時候應該會看到下面有個多了個1$bash之類的
這時候表示你開了第二個視窗,視窗間的切換使用ctrl+a 號碼(ctrl+c #),號碼就是你之前建立的次序
ctrl+a d表示detach,你可以脫離screen,所有這個screen的是窗群都會被放到背景去
使用screen -ls,可以找到所有的screen(也就是你可以建立好幾個screen,每個screen有好多視窗)
screen -ls會列出很多pid後面加上一堆名字,你只要使用screen -r pid就可取回原來的screen,r表示reattach
當然,你如果嫌棄pid不好記憶,一開始啟動screen的時候可以加入screen -S name,name是你替screen取的名字,這樣一來就比較有意義了
以上是基本的screen使用方式,改天有空再來寫多一點

升級Ubuntu Server Edition

升級動作跟一般desktop edition不一樣,我印象中一般desktop edition是使用
aptitude update;
aptitude safe-upgrade;
aptitude dist-upgrade;
想不到server是
aptitude install update-manager-core
do-release-upgrade
一般前面那個套件已經安裝,而第二步驟一開始執行有幾分鐘之久才有繼續的輸出,還害我以為當機了XD

另外有幾件讓我訝異的事情,第一,竟然有套件是降級

第二,有些service因為lib更新,重複啟動,不止一次
最後是應該由jfbterm引發的問題,有些套件設定很久,十幾分鐘都搞不定,我只好手動停止

2009年10月29日

網路相關指令複習

ifconfig
ifconfig eth0 up
啟動eth0
ifconfig eth0 down
關閉eth0
ifconfig eth0 192.168.100.100 netmask 255.255.255.0 mtu 800
設定ip
ifconfig eth0:0 192.168.200.2
增加一個邏輯上的網路介面

/etc/init.d/network restart將使用系統內在/etc/sysconfig/network-scripts的設定來設定網路卡
ifup eth0跟ifdown eth0是做類似的事情,但是如果已經使用ifconfig更改設定後,ifdown會無效

route
route -n
顯示routing table
route add default gw 192.168.10.30
設定default gateway
route add -net 167.254.0.0 netmask 255.255.0.0 dev eth0
增加一個routing path
route del -net 169.24.0.0 netmask 255.255.255.0 dev eth0
刪除一個routing path

netstate
netstate -rn
顯示出routing table
netstate -utlnp
u表示udp,t表示tcp,l表示listen,n表示不要進行dns,p表示port number

ip指令
功能強大的一個指令,可以完全取代ifconfig跟route,不過便利上來說不及。但是mac layer的資訊跟動作必須透過ip指令才能做細部的調整
ip adress show
幾乎等同ifconfig
ip link set eth0 down
等同ifdown eth0
ip link set eth0 up
等同ifup eth0
ip link set eth0 mtu 1000
同ifconfig eth0 mtu 1000,不過在設定的時候要先關閉eth0
ip route show
顯示routing table

ip link set eth0 address bb:bb:bb:bb:bb:bb
設定mac address
ip link set eth0 name hello
設定主機名稱

有趣的套件screen

這東西很早之前就有了,幾年前接觸過,不過嫌他太麻煩XD這裡有一篇不錯的介紹
http://lagunawang.pixnet.net/blog/post/2836825

因為最近又重新迷上了terminal介面,所以想說來學習一下(被迫學習XD),一用之下,頗為訝異阿,竟然有進步囉!!

最下面一行可以看到,最左邊表示開了三個screen,右邊說明了可以按下F9取得一些說明跟設定,還有一些關於cpu跟記憶體的資訊,另外加上時間日期,簡直是個"terminal desktop"XD

2009年10月27日

防火牆-iptables(1)

iptables相當複雜,所以這個文章我會慢慢寫
=============================
iptables不只能夠filter(過濾)packet的資料,甚至修改資料,也就是能夠做packet改寫達到NAT的功能
對於過濾的部分可以由一群群有次序的規則做判斷

Linux底下防火牆這功能幾乎由iptables一手包辦,其他儲存規則跟回覆規則的指令則是iptables-save跟iptables-restore
一開始如果系統沒有預設的規則,應該是等同全開、沒有限制,可借由
iptables -L -n

來觀察規則表,其中參數n的意思表示不要使用DNS反查,速度會快許多,結果如下圖表
iptables的語法大致上如同鳥哥網站提到的
iptables [-AI 鏈] [-io 網路介面] [-p 協定] \
> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP]
參數:
-AI 鏈:針對某的鏈進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。
例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範
-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;
-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式
主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
IP  :192.168.0.100
網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若規範為『不許』時,則加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受 (ACCEPT)、丟棄 (DROP) 及記錄 (LOG)
一般而言建議練習時先把INPUT的Policy設定為DROP,先全部擋住,在慢慢開啟允許進入的部分
iptables -P INPUT DROP

比方說允許SSH Server的port則開啟port # 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

不過我也很懷疑為何iptables不能進化一點,只有A跟I,只能把rule放在最前跟最後,何不妨讓人可以插入到某一條規則之後
使用如
iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT
就可以在規則2後加入一條規則

最後補上一條方便的規則,讓已經建立連線或者是由我們主機發出的封包引起對方回覆的封包進入,不然一些類似更新(apt/yum)可能無法正常運作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

當然還可以擋掉一些討厭的網域區段或者mac address,這樣就完成了基本的INPUT Chain的部分
初學者可能常會想問,我知道service的名字或者套件的名字,但我怎麼知道他用的是tcp或者udp,還有走的port number呢?要用google去查嗎?其實大多知名的服務都不假外求,只要察看/etc/services這個檔案裡面就有了

以Fedora而言,完成之後記得把檔案寫到/etc/sysconfig/iptables這個檔案內,這樣下次開機他就會自動啟動了

如何查詢ubuntu版本?

  1. cat /etc/issue
  2. cat /etc/lsb-release
  3. lsb_release –d –s –c
這三種這方式都可以

ubuntu server

最近突然對只有單純文字介面(console)的linux又重新燃起興致,我抓了ubuntu 904的server開始安裝
剛剛裝完的時候,很好20G的HD只有使用了0.38%,大約七百多MB orz有的比我想像中的多,不過至少比win7的14G好很多
因為安裝的時候選擇了中文,當然一般console只有英文,必須要解決中文問題,很幸運的找到一篇有關zhcon的文件,裡面有教導怎樣使用framebuffer
因為一堆中文console都需要使用framebuffer這功能,所以不管是安裝zhcon或者jbfterm都要先搞定framebuffer
要先把framebuffer的module開啟
vim /etc/modprobe.d/blacklist-framebuffer
#註解 vesafb
#blacklist vesafb

vim /etc/initramfs-tools/modules
#加入以下兩行
fbcon
vesafb
接著利用hwinfo這工具來偵測framebuffer
apt-get install hwinfo
hwinfo --framebuffer
接著會看到一堆mode=0x0333之類的東西,他有標明解析度
我挑選了0x0340(800x600 24bits)

接著在kernel上的參數隻用
vim /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.... vga=0x0340
update-initramfs -k $(uname -r) -u
作者的最後一步驟我看不大懂,先記下來
vim /etc/udev/rules.d/40-basic-permissions.rules

#於檔尾加入以下內容
KERNEL=="fb0", MODE="0666"
KERNEL=="dsp", MODE="0666"

最後當然要重新開機reboot
跟著就是安裝jbfterm
參考http://wiki.ubuntu-tw.org/index.php?title=UbuntuL10n#jfbterm
記得要export LC_ALL=zh_TW.UTF-8
跟著啟動jbfterm-應該就可以看到中文字出現了
======================
接著裝上一些server,有ssh/apache2/php5/mysql/samba/vsftpd,使用空間逼近1G

2009年10月25日

U910要發佈囉

聽說有些令人高興的特色,比方說用了ex4的fs,聽說快了不少,kernel打算把Xorg的一些特色加入,這樣可以加快圖形速度,KDE4.x跟Gnome Shell不知道會不會整合進來,新的桌面環境總是讓人有點期待(又怕受傷害XD)

最近在教導一些初學者使用linux,發現些事情
首先,對於過去M$已經太習慣,很難分辨啥叫做一般user,啥叫做super user,一般user應該可以做啥,跟super才可以做的事情,他們用M$就只有一個觀念,全都是super user
其次,對terminal畫面非常"恐懼",因為不會用vim,他們對沒有選單的editor很難接受
再者,讓他們很難接受的是,字母要分大小寫,因為他們"分不出差異",還有常常會打錯字
還有,路徑的觀念也讓他們有點難以接受,為何沒有C:?啥是相對路徑跟絕對路徑?
最後,分不出執行檔跟一般檔案差異,因為後面沒有".exe"XD,然後有些又是只有super user才可以用

上面有些是terminal才會有的"症狀",有些則是則是一般會有的,看來習慣跟教育真的是一大推動軟體的重要方式

M$的認證機制

話說已經好久沒寫blog了~最近win7正夯,我在M01網站上看到有人寫M$如何做認證,實在很"佩服",就節錄過來讓大家看看吧
e-day-day wrote:
W7 / Vista 的零售版 "啟用機制" 是綁定主機板, 而且啟用過程要經過 "線上啟用" 這道手續.........
啟用過程會建立一個主機板"硬體識別碼",你在輸入"產品金鑰"後, 系統會產生"安裝識別碼",
啟用機制會透過網路連到微軟驗證伺服器, 把這組硬體識別碼和產品金鑰"綁定"的安裝識別碼紀錄在微軟伺服器,
然後伺服器會回傳一組確認碼告訴你的系統已經正確啟用無誤, 這就完成了第一次的啟用程序,
以後你重裝系統, 微軟的驗證伺服器會檢查你的硬體識別碼和產品金鑰產生的安裝識別碼是否一致,
所以說如果你換了主機板,那麼這組已經啟用的金鑰是無法再拿來啟用的 (換其它硬體組件沒有關係)
也就是說你要拿到別台電腦用這組金鑰安裝啟用系統自然是不可行的......
同一個主機板可無限次啟用,每次啟用都會連到微軟伺服器檢查這組金鑰有沒有啟用過,若有會檢查是否匹配....
只要你這台機器有在上網,以後系統每隔一段時間也會自動線上驗證.........

如果你這中間 "升級電腦換了主機板", 可以打電話到微軟, 使用電話語音啟用,
它會幫你改掉紀錄在微軟驗證伺服器的識別碼,去匹配新的主機板 (更改有十次限制),
那麼你舊的主機板不能用了,因為金鑰已經登記給新的主機板了.............

如果你根本沒有網路,可以透過電話語音啟用,
電話語音啟用過程會要你輸入系統產生的安裝識別碼(用於綁定主機板),
然後電話語音系統會告知你一組確認碼讓你輸入到你的系統來完成啟用.....................

如果你胡亂使用你的產品金鑰的話,微軟是隨時可以封殺你的產品金鑰的,加到黑名單對微軟來說輕而易舉.........