2010年10月13日

又一次錯誤

Ubuntu 10.10忘記把舊的10.4殺掉,結果安裝完畢之後...partition table被我搞爛了,grub找不到partition,只好從新安裝,可是手邊沒有光碟機,網路上早有耳聞說有個可以把usb storage當光碟機用的軟體(這樣也比較環保),unetbootin就抓下來用囉,還蠻簡單的

希望可以順利安裝完畢順便把M$ O$找回來,Ubuntu桌面又要再度調教了,哀~花時間

2010年10月11日

殘念--KDE

看來不是原生的Kbuntu-desktop,竟然字型難看得要命,除了kdm/gdm登入比較久之外,就是字型怎樣也搞不定,firefox在gnome下的字型看起來好好地,在KDE底下真的"一塌糊塗",非常模糊
活見鬼的是,竟然KDE還會影響gnome,試驗KDE之後登入gnome,竟然mourse cursor是KDE的style,真的是好神奇@@a
還好10.10出了,到時候就直接從新安裝10.10好了,不過執行起來速度KDE4.4.2還不算太慢,感覺完整性也還不錯,比較有進步了

2010年10月9日

手癢--在10.4上安裝KDE

其實大家都知道目前linux上面最大的兩個windows manager就是gnome跟kde,過去給我的感覺是kde很進步,但是很不穩定,也比較吃記憶體,加上ubutnu很多東西都是先在gnome上實驗的,所以偏好gnome
可是看到網路上人家說kde比gnome多好又多好,忍不住要裝來體驗看看,希望這台X31的老筆電可以撐得住,呵呵
安裝方式挺簡單的
aptitude install kubuntu-desktop
再來安裝語言套件
aptitude install language-pack-kde-zh language-pack-kde-zh-base language-pack-zh language-pack-zh-base language-support-zh
這樣就大功告成了

2010年9月26日

專精或者老化??

不知曾幾何時發現自己的書籤開始只有特定的幾種類型,然後會逛得網站也是只有那幾種,跟當小孩子的時候,對每一件事情都感到很有興趣,現在的自己則是對每一件事情似乎都相對的淡薄。
這是意味著自己開始專精於某些事情上,還是其實是已經老化的現象呢?一個人一輩子的目的是為了這個專業,還是這個專業是為了過活?
夜晚的時候,我又陷入了這樣的迷思

2010年9月8日

Google Chrome OS

google chrome os,說出了google的企圖心,很可惜這個東西應該只是和tablet跟mobile device,並無法取代notebook,也就是說兩者應用有重疊,但是有某種排他性
比方說,如果我要做程式設計,其實很多還是需要固定的平台,並不是任何東西都可以搬到雲端上面去的,除非所有的應用都已經放到雲端上去了,不然應該是不適用
可以舉出很多例子,比方說錄影剪輯,以現在的網路頻寬,放上去一個DVD(4.2G)大概都要幾十分鐘吧,很難跟目前硬碟或者usb相比美
又比方3D繪圖、遊戲以目前來說礙於網路頻寬跟其他硬體設備,都很難放到雲端上,所以google chrome os如果要取代傳統os是早了十幾年
可是如果是網路應用,目前已經相當多東西可以放到tablet這樣的設備,比方說ipad或者netbook,這些東西強調一整個mobile applications serverices,整套的東西是很方便的

2010年8月24日

[轉載]備份virtual box

來自http://dominic16y.world.edoors.com/CSzNlgBSN4mg

在 VirtualBoX 若要直接copy一個做好系統的 vdi 檔是不行的
會出現 uuid 碼重複的問題

這時得要下指令的方式copy才行

VBoxManage clonehd litexp1.vdi litexp2.vdi

若此指令不行的話(在 ubuntu 9.04 可能不行),則前面要加上sudo

sudo VBoxManage clonehd litexp1.vdi litexp2.vdi


複製出來的檔案會位於 /root/.VirtualBox/HardDisks 底下



VirtualBox 硬碟空間(虛擬主機的映像檔 .dvi 檔)會不斷的增大,但卻不會縮小

如果想要讓動態的vdi把多的容量吐回來,也許可以試試這個: (英文)
http://kakku.wordpress.com/2008/06/23/virtualbox-shrink-your-vdi-images-space-occupied-disk-size/

2010年8月7日

整裡房間

每次整理完畢都有個煥然一新的感覺,好像整個東西都放對位置了。最近幾年整理房間最常做的事情就是"丟掉",沒錯,就是把一些認為沒用的東西丟掉。這樣一個簡單的動作帶來很大的"快感"。相較於過去整理方式,我總是認為某些東西以後可能用到,捨不得丟棄,然後只是把他們換個位置,後來感覺空間都快被佔光了,我只是在挪動他們的位置,並沒有把地方清出來。
這樣的想法、作法、感覺讓我開始想要套用到工作上,怎樣可以清除不必要得"干擾 ",讓所需要的東西專注再工作或者要處理的事件上面。

2010年7月30日

maxima

符號(symbol)運算是一個很重要的賣點,不同於octave的是,octave比較重視數值運算,以就是知道公式的時候作運算,但是maxima則比較像是推導公式,比方說把(a+b)^2展開為a^2+2ab+b^2,在octave則是帶入a,b然後給出結果
雖然兩者有些重複的功能,也都可以達到對方一些功能,比方說octave也有symbol運算的功能,可是完整度跟運算速度會略慢於maxima

2010年7月25日

我看mobile device

最近看到消息說,HP打算放棄M$ WP7,但來M$真的有點拉警報囉,在mobile上的OS一直是進步有限,如果不好好的痛定思痛的把核心跟大家想要的東西推上來,真的會很慘
手邊有個朋友是作手機的,他們開發過M$的系統也開發過android,他跟我說:跟android比起來,M$真的是很不穩定。看來真的是外加一罪囉

所以我認為M$在mobile devcie上的三大問題就是:經驗移植、穩定度、雲端
M$我覺得一直以來都是想要把肥大的應用程式強迫放到mobile device上面,搞得很詭異,跑不動不然就是一些相容性有大大的問題,相對android就輕巧很多,把瀏覽器上操作方式巧妙的套到mobile device
穩定度一直是M$的痛,在6版跟之前,大概"戳屁屁"(reset)是每個M$手機操作者必須要做的事情,且是每隔一陣子就需要,跟舊版的OS常常不定時當機跟需要重灌是一樣的  囧rz
最後就是雲端,由於M$雲端並不如google成熟,所以整體的配合程度真的差很多,如果說要專打企業應用,拜託就像是黑莓機一樣吧,弄的上不上,下不下的

========================
說到雲端,我認為M$依舊相當有機會,因為google在某些應用,如google documents目前跟M$比較起來還是有一段差距,在操作跟排版上還是有些不大順暢,但是如果M$還沒有自覺讓google提出某種可以離線且方便使用的應用軟體,同時提供某種雲端跟區域端的整合方案的話,這是google恐怕快要無力回天,剩下遊戲市場可以擋著

以我目前的感覺,雲端計算對我比較有吸引力的方面到不如說是雲端儲存,應用程式只有一些非靠著網路不行的才會想使用,比方說email跟blog,如果是其他如文件我本身還沒有打算使用,甚至科學計算也不想。應用程式的問題只要卡在web的呈現方式並不如本身電腦的流暢還有就是現有網路頻寬的問題,網路頻寬在成熟的國家會慢慢解決,呈現方式可能要仰賴推出一些離線版本而非單純的瀏覽器材會方便了

2010年7月12日

Octave--sort function

matlab排序的方程式,格式如下
[SA,indexes]=sort(A,'descend')
A表示排列前一維陣列,SA表示排列後的結果,可以指令要升幕或者降幕排列,還有回傳一個有用的indexes交換過後的陣列,表示A的某個index元素被調換到SA的相對應的index,直接看圖說故事

2010年7月8日

Octave--建立圖形(grahp)

假設圖形(graph)是由二維座標構成,儲存在points變數中,為一個N*2的矩陣,以半徑為r的距離做連線
for j=1:N
    for k=1:N
        if norm(points(j,:)-points(k,:))<=r
            plot([points(j,1) points(k,1)],[points(j,2) points(k,2)]);
        end
    end
end

這樣只有線條,如果要在補上資料點可以再補上plot(points(:,1),points(:,2),'*')

2010年7月6日

Octave--直接執行script file

一般而言Octave的附檔案名稱為oct,但是沒有強制性,要直接執行script file必須要有執行權限
chmod  +x xxx.oct
然後要在檔案內容最前頭加上類似shell script的octave執行路徑,如#!/usr/bin/octavee
如果有圖形輸出,要另外加上print -dpng output.png (-d是device的意思, png是 圖檔格式)

在執行的時候,使用以下參數
octave –persist test.oct
就可以保留住圖形的輸出

Octave--disp function

disp是一個最簡單的輸出函數,不過有很大的限制是,他只能夠處理一個變數,所以在使用上比較需要一些轉換,如果要輸出比較複雜的格式,一般使用fprintf,如果有使用過C就不陌生了,格式如下
disp(X)
看不出所以然來,舉個例子來說,如果說要輸出單一字串很簡單
disp('hello world!!')
這樣就輸出hello world字串,但如如果要輸出身高多少,就必須要把它變成一個array,如下面
disp(['height:' num2str(height)])
因為要是字串陣列,所以必須把數值的變數height變成字串,需要借用到num2str

Octave--zeros function

建立一個全為0的矩陣,至少維度2以上,格式如下
B=zeros(n)
B=zeros(m,n)
B=zeros([m n])
B=zeros(m,n,p,...)
B=zeros(m,n,...,classname)
如果使用單一參數,那就是建立一個nxn的矩陣,其他就是跟參數多寡建立,也就是可以建立多維度矩陣
中間可以使用[m n]的方式則可以配合類似size函數使用,比方說為A建立一個一樣大的矩陣作B為暫存空間
B=zeros(size(A))
最後一個表示指定特定型態,如double或者int

Octave--norm function

norm是泛指一般長度的單位,常用的Euclidean distance,也就是2-norm,所以norm的格式為
norm(A,p)
其中p就表示為多少norm,定義如下,如果不給定p預設為2-norm
Returns sum(abs(A).^p)^(1/p), for any 1 <= p <= ∞.
一般infinite norm使用norm(A,'inf')定義如下
Returns max(abs(A)).

2010年7月5日

Octave--bsxfun function

這個函數還不大能掌握,格式為
C=bsxfun(fun,A,B)
將B透過fun作用在A上,然後回傳結果,比方說我們打算把A中每一列減去平均值,B代表平均值,然後將結果回傳到C矩陣內
以上次mean的例子來說,bsxfun就可以寫成如下
其中第一個參數常用的有下列這些

Octave--mean function

octave中的mean指令,格式為mean(A, dim)

第一個參數為矩陣,若是單一向量則回傳單一平均值
若是矩陣,則參考第二參數dim,dim為1則回傳行向量平均值,若dim為2則回傳列向量平均值
一般預設為1

2010年7月2日

電子書是誰的?

或許比較少人想到這件事情,現在有些網路上面開始販售電子書,但是採用的是雲端模式,這樣的好處是,電子書只要有網路,讀者可以隨時隨地使用
但是問題來了,以這樣的模式,電子書是誰的?過去傳統模式,只要讀者拿著一本書,那本書的所有權明顯屬於讀者,著作權屬於作者,非常明顯,跟販售通路以及出版社沒關係
但是如果電子書的話,可能書本屬於販售通路,所以如果販售通路倒閉,那就一本書都沒有了不是嗎?也就是說,購買電子書等於只有買到閱讀的權力?
雲端計算其實也面臨到類似的問題,安全性,以前一個人被hack是一個人的事情,有任何理由相信一個雲端的安全性比個人電腦好?這只是一個感覺罷了,看看網路上很多著名網站都有出現個人資料外洩等等的問題,請問你還相信雲端嗎?
雲端的資料不會隨著公司倒閉嗎?一個好的雲端會搭配著一堆服務,如果公司被合併,這些服務會被保留嗎?如果沒相對的服務搞不好這樣的資料就跟垃圾沒兩樣了Orz

2010年6月28日

[轉載]讓 Ubuntu GIMP 2.x 能夠以CMYK輸出存檔(需要印刷輸出必看)

=======================
在Linux底下做出來的作品,如果不轉成CMYK,要對外印刷輸出會是件很麻煩的事情
我們可以利用 下面這個方法讓GIMP支援CMYK

1.到GIMP Plugin for CMYK separation的網站拜訪
http://www.blackfiveservices.co.uk/separate.shtml

2. 下載程式
Linux (source + binary) for Gimp 2.x Download (37k)
wget http://www.blackfiveservices.co.uk/projects/separate-gimp2-0.3_linux.tar.gz

3. 進行安裝設定
tar zxvf separate-gimp2-0.3_linux.tar.gz
sudo cp separate-0.3_linux/separate /usr/lib/gimp/2.0/plug-ins/
sudo ln -s /usr/lib/libtiff.so.4 /usr/lib/libtiff.so.3
sudo mkdir -p /usr/share/color/icc/
sudo cp separate-0.3_linux/sRGB/*.icm /usr/share/color/icc/
wget http://download.adobe.com/pub/adobe/iccprofiles/win/AdobeICCProfiles.zip
unzip AdobeICCProfiles.zip
sudo cp Adobe\ ICC\ Profiles/RGB\ Profiles/* /usr/share/color/icc/
sudo cp Adobe\ ICC\ Profiles/CMYK\ Profiles/* /usr/share/color/icc/

4.CMYK輸出
啟動GIMP,影像的地方會多一個Separate的功能項目
執 行 Separate (to colur) => save

2010年6月23日

[新聞]eclipse出新版囉

http://www.eclipse.org/
一個號稱功能強大的編輯器,可是我怎樣也用不習慣,有點類似jedit。jedit對於單純的文字編輯器也是很強大,可是老是感覺有點拼裝車囧rz

2010年6月14日

pcman聊C++

從人家blog轉來的文章

2008年5月24日星期六

關於 GTK+/GObject 和 C/C++

今天又忍不住開始譙 GTK+... 因為太常在講一樣的東西,乾脆申請 blog 來紀錄
這樣不用每次都一直罵一樣的事情...
以下是 今天在 irc.debian.org #dot channel 的對話。

(02時05分23秒) pcman: aguai: vala 是... 一個新的程式語言,發明來幫助你寫gtk+
(02時05分23 秒) Fred_: aguai: 是個該死的東西
(02時05分51秒) pcman: aguai: gtk+ 已經難寫到有人認為應該要發明專用的程式語言來寫了.....
(02時05分52秒) wenpei 離開聊天室 (quit: Remote host closed the connection)。
(02時06分 10秒) aguai: pcman: 我一直不懂
(02時06分12秒) pcman: aguai: 他的 compiler 做的事情就是把你寫的 code... 再轉成 C
(02時06分 42秒) hialan: pcman, 以 pcmanfm 為例,他還包含桌面的部份
(02時06分50 秒) aguai: pcman: 你為什麼這麼恨 GTK++ 卻不跳去 QT?
(02時06分50秒) pcman: aguai: C 沒有物件導向功能,但是 GTK+ 團隊要做物件導向,所以他們用 C 模擬了所有物件導向的功能
(02時07分06秒) pcman: aguai: 但是後來有人發現這樣寫起來根本是虐待開發者
(02時07分31 秒) pcman: aguai: 所以,他們發明了另一種物件導向的語言來寫,然後,把寫出來的 code,再轉回 C,再用 C 模擬物件導向.....
(02時07分45秒) Fred_: aguai: 你講到重點了
(02時07分45 秒) pcman: aguai: 簡單說,那些人都是神經病
(02時07分57秒) aguai: 當時沒有 C++?
(02時08分03秒) pcman: aguai: 老早就有了
(02時08分09 秒) aguai: C++ 有這麼新?
(02時08分15秒) pcman: aguai: 他們故意拒用 ok?
(02時08分16 秒) Fred_: aguai: pcman 每一陣子就會花很多 IRC page 去講這個問題
(02時08分39 秒) pcman: aguai: 那時候接近 2000 年了
(02時08分42秒) Fred_: :D
(02時09分05秒) aguai: 2000 年有 C++ 呀....我表弟有學...
(02時09分15 秒) pcman: aguai: 世界上總是有時間太多的人.... C++ 在 dos 時代就有了
(02時09分24 秒) aguai: pcman: C++ 真的不好嗎?
(02時10分38秒) aguai: 我覺得如果不強求 template 之類的東西.... C++ 也不會太難讀呀
(02時11分07 秒) aguai: 是說我沒資格討論這個啦....
(02時11分 13秒) wtsai 離開聊天室 (quit: Ping timeout: 480 seconds)。
(02時11分49秒) aguai: DreamerC: 反正都要重寫...用 C 跟用 C++ 還不差不多....(我的想法啦)
(02時13分58秒) aguai: pcman: 你為什麼這麼恨 GTK++ 卻不跳去 QT?
(02時14分 26秒) pcman: aguai: 你覺得重寫十萬行 code 很好玩嗎?
(02時14分48秒) pcman: aguai: 而且是用完全不相容的工具
(02時15分37 秒) hialan: pcman, 我認為 MS Windows 這樣整體性的設計,易用度比像是 GNOME 這樣拼拼湊湊出來好用的多@@
(02時15分44秒) aguai: Soga.....
(02時15分54秒) pcman: aguai: 不然你來移植看看
(02時16分05 秒) pcman: hialan: 相對喪失的就是彈性
(02時16分15秒) pcman: hialan: gnome 也不是拼湊來的,他是有整體的設計
(02時16分 28秒) pcman: hialan: 不好用是因為軟體沒寫好,不是因為沒有整體設計
(02時16分32 秒) aguai: pcman: 我剛剛真的把咖啡噴到螢幕上了..........
(02時16分36 秒) pcman: hialan: Gnome 是有 guideline 的
(02時18分23秒) hialan: pcman, 恩,我相信,這麼大的 project 一定要有這些東西
(02時18分 41秒) hialan: pcman, 不過這並不表示我們會損失彈性
(02時18分44 秒) pcman: hialan: gnome 其實整合得算不差了
(02時18分54秒) aguai: Fred_, pcman: 請問一下...我慢慢有點知道 GTK+ 在幹嘛了 要讀 LXDE 的 code 從哪裡下手比較好呢?
(02時19分05秒) pcman: aguai: main()
(02時19分44 秒) aguai: pcman: lxsession? lxpanel?
(02時19分49秒) aguai: lx??
(02時19分58秒) pcman: aguai: 隨你高興
(02時20分11秒) pcman: aguai: 其中最容易懂的是 lxsession-lite, 其次是 gpicview
(02時20分 19秒) pcman: aguai: 然後是 lxtask
(02時20分23秒) pcman: aguai: 剩下的大概不行
(02時20分35 秒) Fred_: aguai: 最簡單的入門可從 lxpanel plugin
(02時20分40秒) aguai: lxsession-lite 恩恩
(02時20分40 秒) pcman: aguai: lxpanel 和 pcmanfm 有部份我也看不懂,所以我不預期你會能接受
(02時20分52 秒) aguai: 來去 co
(02時20分58秒) hialan: pcman, 在 unix/linux 世界寫 C++ 是不智的
(02時21分00 秒) Fred_: aguai: 就像玩 kernel 要先從 modules 開始 XD
(02時21分01 秒) ***pcman 已經快看不懂 pcmanfm 的某些部份了
(02時21分09 秒) pcman: hialan: 不會啊
(02時21分36秒) hialan: pcman, 除非你要把所有東西包辦,然後只用 ANSI 發佈的東東
(02時21分 50秒) pcman: hialan: 有差嗎?
(02時21分54秒) hialan: pcman, 不然光是跨平台就會把你搞死:p
(02時22分05 秒) pcman: hialan: 不會啊,用 C 還不是一樣
(02時22分21秒) pcman: hialan: 不要用太新的語法基本上不會有問題
(02時22分36 秒) pcman: hialan: 何況,你到底要跨什麼平台?
(02時22分58秒) hialan: pcman, 或許這是我幾年錢看到的東西,C++ 在 linux 上並不是很好
(02時23分 13秒) pcman: hialan: 有 gcc 的地方就可以編譯,哪裡不好?
(02時23分21秒) aguai: C++ 在 linux 上並不是很好???
(02時23分26 秒) aguai: 不懂?
(02時23分31秒) pcman: hialan: 你看到的是程式沒寫好... C++ 好得很
(02時23分41 秒) aguai: 是表現很差?
(02時23分46秒) pcman: hialan: kde 的品質比 gnome 好多了
(02時24分17 秒) hialan: pcman, 跨 linux 不同家:p
(02時24分29 秒) pcman: hialan: 那關 C++ 什麼事....
(02時24分40秒) pcman: hialan: 會不相容的都不是在 C++
(02時24分43 秒) hialan: pcman, 這大概是好給年前看到的文啦:p
(02時24分44 秒) Fred_: hialan: 你指的應該是 ABI 的 prolem
(02時24分52秒) aguai: kde 還是比較重耶.....
(02時24分58 秒) y5c: kdvi 的確比 evince 好很多
(02時25分00秒) pcman: aguai: 你確定?
(02時25分12秒) pcman: aguai: 你要不要實際測試過
(02時25分15 秒) aguai: pcman: 我自己裝的
(02時25分19秒) pcman: aguai: kde4?
(02時25分20 秒) aguai: pcman: 有耶
(02時25分27秒) hialan: pcman, 不是 C++ 的錯,而是 linux 支援 C++ 的錯,或許現在有改善了也說不定:p
(02時25分29秒) pcman: aguai: 我測試的都是比 gnome 好
(02時25分32 秒) aguai: 4 還沒試
(02時25分38秒) pcman: hialan: 那跟 linux 也沒關係啊
(02時25分47 秒) pcman: hialan: 你的邏輯怪怪的....
(02時26分05秒) aguai: kubuntu 風扇比 gnome 響
(02時26分12 秒) aguai: 這是真的
(02時26分24秒) pcman: aguai: 那是因為 kubuntu 是用 ubuntu
(02時26分 34秒) pcman: aguai: 你找個精簡一點的 distro 裝
(02時26分35秒) hialan: pcman, 總之,這是當初 GNOME 為什麼選擇用 C 來模擬 C++ 而不直接用 C++ 來寫的原因
(02時26分41秒) pcman: hialan: 其實不是....
(02時27分00 秒) aguai: ㄟ丟....自己從頭裝 我武功還不到
(02時27分17秒) hialan: pcman, 恩...ok 總之 GTK 都寫這麼大了 XD
(02時27分 18秒) pcman: hialan: 你講的問題有些是來自 gcc 和他的 lib,那跟 linux 沒有關係
(02時27分45 秒) pcman: hialan: 我相信你講的是 ABI 問題
(02時27分57秒) hialan: pcman, 嗯嗯
(02時28分05秒) pcman: hialan: 除了這個以外,基本上沒有什麼相容性的問題,除非你用了太新的語法
(02時28分 29秒) hialan: Fred_, pcman, 嗯嗯@@
(02時28分32 秒) pcman: hialan: gtk+ 用 C 主因是為了 language bindings
(02時29分15 秒) aguai: 是喔....
(02時29分22秒) pcman: hialan: 因為 C 很容易跟其他語言銜接,但這理由不夠充分,畢竟 Qt 這點也做得很好
(02時29分44秒) aguai: libglibmm-2.4.so 是 for C++ 嗎?
aguai aguaithe1reak
(02時29分53秒) pcman: aguai: 那是垃圾
(02時30分13秒) aguai: ㄟ丟....
(02時30分15秒) pcman: aguai: 那是用 C++ 在 gtk+ 外面再包一層,讓他看起來像 C++,但是裡面還是 C
(02時30分54秒) pcman: aguai: 用沒物件導向的語言,模擬物件導向的功能,然後在用一個物件導向的語言來外面包一層,但骨子裡面還是那個模擬出來的偽物件導向,這不是莫名其妙嗎?
(02時31分 14秒) pcman: aguai: 該死的是包了 C++,程式還變複雜.... 你看 tutorial 就知道了
(02時31分15 秒) aguai: .....class xx(...){struct xx(...), ...;} <= 這樣?
(02時31分 23秒) pcman: aguai: 比那個還糟
(02時31分25秒) hialan: pcman, 嗯嗯瞭解@@
(02時31分32 秒) Fred_: pcman: 建議你可以 blog
(02時31分48秒) pcman: aguai: 很多地方為了要讓你可以用 C++ 寫,他做了大量 dirty hacks... 造成很多不必要的記憶體浪費
(02時31分55秒) Fred_: pcman: 不然你要常常解釋 libg*mm 的爛
(02時31分58 秒) pcman: aguai: 這一切沒有意義的舉動,只是為了讓你的 code 看起來像 C++
(02時32分10 秒) pcman: Fred_: 也是...
(02時32分12秒) aguai: 這是何苦呢?
(02時32分19秒) ***pcman 來去 blogger 申請 gtk_sucks 帳號
(02時32分26 秒) pcman: aguai: 所以我說那是垃圾
(02時32分38秒) aguai: 必要時再包就好啦?
(02時33分16秒) aguai: extern C 也沒有很難........
(02時33分17 秒) Fred_: pcman++
(02時33分21秒) pcman: aguai: 用 C=> window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
(02時33分40秒) pcman: aguai: 用 C++ => window = new Gtk::Window(Gtk::WINDOW_TOPLEVEL);
(02時33分49秒) pcman: aguai: 不覺得有任何幫助
(02時34分05 秒) aguai: 這個就很OO了呀
(02時34分14秒) ***hialan 覺得每個 gtk 函式都有夠長 ~~~
(02時34分20 秒) pcman: aguai: GTK+ 本身就很 OO
(02時34分39秒) pcman: hialan: 我以前很討厭,現在很愛,因為函數本身就可讀,連註解都免了
(02時34分 48秒) hialan: pcman, 哈!
(02時34分55秒) pcman: hialan: 不用查 API doc 都知道用途
(02時35分10 秒) aguai: pcman: 恩恩 這就是所謂"用 C 也可以很 OO "吧
(02時35分25 秒) pcman: aguai: 對, OO 只是一種觀念和方法
(02時35分30秒) pcman: aguai: 不是一種語言
(02時35分33 秒) hialan: pcman, 對了,回到 lxde 的需求裡面.....我覺得彈性和整體性是可以分開的:p
(02時35分52 秒) aguai: 不過很難想要怎麼做到呀....
(02時36分10秒) aguai: C 又沒有 private
(02時36分21 秒) pcman: aguai: 他們真的做到了
(02時36分49秒) hialan: aguai, private 的方法: 每個檔案就是一個 Object, 然後用 static 宣告函式與全域變數
(02時36分50秒) pcman: aguai: 說起來很複雜,但是這些機制在 GTK+ 都有,這才是了不起的地方
(02時36分 59秒) pcman: hialan: 不對
(02時37分09秒) pcman: aguai: GObject 真的有支援 private
(02時37分26 秒) aguai:
(02時37分36秒) hialan: pcman, 哦哦!!
(02時37分37秒) aguai: 沒a毒到過
(02時37分44秒) aguai:
(02時38分42秒) pcman: aguai, hialan: G_TYPE_INSTANCE_GET_PRIVATE
(02時39分05 秒) ***aguai Document 好多呀...讀完 GTK 還要讀 freedesktop...
(02時39分27 秒) pcman: aguai: public/private, RTTI, public/private methods, ctor/dtor, object inspection, .... GObject/Gtk+ 全部都有
(02時39分31 秒) hialan: pcman, 聽說最早的 C++ compiler 是直接把 C++ code 翻譯成 C 再編譯 XDDD 所以這兩個語言轉換並不是難事
(02時39分40秒) pcman: hialan: 你轉轉看
(02時40分01 秒) pcman: hialan: C++ -> C 簡單,C -> C++,幾乎不可能
(02時40分18 秒) pcman: hialan: 雖然 gtkmm 據說做到了一部分....
(02時40分20秒) hialan: pcman, 不要~~ 這是真的啦 ~_~
(02時40分26 秒) aguai: 把 C++ code 翻譯成 C ..... '<<' 就很不知道要怎麼轉
(02時40分41 秒) pcman: aguai: 那只是一個函數而已啊
(02時40分59秒) pcman: aguai: 別被符號限制.... operators 不就都是函數而已?
(02時41分05 秒) aguai: 可是要判斷是要 shift 還是要傳球
(02時41分26秒) aguai: context 會亂掉吧
(02時41分40 秒) pcman: aguai: class 裡面有 overload 就是 function, 沒有就是 shift 啊
(02時41分 56秒) pcman: aguai: 比較難是 RTTI....
(02時42分00秒) aguai: cin<<
(02時42分25 秒) pcman: aguai: read(read(cin, int), int) 而已啊
(02時42分40 秒) aguai: 對吼
(02時43分00秒) pcman: aguai: 難的是在 RTTI,你根本不知道型態,怎麼知道那個是代表啥行為?
(02時43分 01秒) aguai: pcman <- 果然是高手
(02時43分16秒) pcman: aguai: 啊那些 operator 本來就是函數啊
(02時43分25 秒) pcman: aguai: 遇到 virtual 比較討厭
(02時43分26秒) aguai: RTTI 我根本不敢想呀....
(02時43分34 秒) pcman: aguai: GObject 有
(02時43分38秒) pcman: aguai: 很可怕
(02時43分50秒) pcman: aguai: 他還有支援 dynamic_cast
(02時44分02 秒) pcman: aguai: 當然,用 macro
(02時44分32秒) hialan: pcman, 你現在不就是說 C++ ==> C 嗎 ? XDDD
(02時44分 58秒) hialan: pcman, so it's possible
(02時44分59 秒) pcman: hialan: 對啊,很噁心,但是 GTK+ 那種 C 轉成 C++,就很難了....
(02時45分11 秒) pcman: hialan: 我說不能的是 C => C++
(02時45分22秒) hialan: pcman, 噗哈哈哈哈阿,真是一針見血:p
(02時45分31 秒) aguai: 對了 typedef struct xx{...}; (xx)xxx <- 這樣 OK 嗎?
(02時45分 38秒) hialan: pcman, C 本來就是 C++ 的一部分,so it's no need
(02時45分 49秒) hialan: pcman, 有向下相容
(02時45分58秒) pcman: hialan: 我是說,把 GObject 那種... 轉回 C++ native class....
(02時46分28秒) hialan: pcman, 說著說著...我快要跑道 GTK# 去了 ~_~
(02時46分 42秒) pcman: aguai: 我看不是很懂....你這個不是正確語法吧
(02時46分52秒) pcman: aguai: typedef 後面還有東西啊
(02時47分19 秒) y5c: 聽起來 vala 好像是個好主意了
(02時47分24秒) pcman: hialan: 你可以考慮 vala,語法抄襲 C#,但是不是外面多包一層,是轉成 C
(02時47分 39秒) pcman: y5c: 現階段最好的主意,雖然還是有點荒謬
(02時48分12秒) hialan: pcman, 恩,我不希望他轉成 C ,但是我認為 GTK# 是好物,因為 Windows 可以原生執行
(02時48分14秒) aguai: 恩恩...只是想到 C 的 typedef struct xx{}xx; 可不可以直接拿來 cast
(02時48分31秒) pcman: hialan: 不要想太多....
(02時48分50 秒) Fred_: 話說AWN有用到 vala ...對它不爽中...
(02時48分51秒) pcman: hialan: gtk+ win32 基本上屬於 alpha quality,僅只是在能動的品質
(02時49分00秒) ***Fred_ 對他不爽中
(02時49分06秒) aguai: pcman: 你恨 GTK 是因為??? 他???? 看起來蠻厲害的呀...
(02時49分 09秒) pcman: hialan: 在可見的未來我也不覺得會改善,某些部份甚至沒有人確定會不會動
(02時49分28秒) icman 離開聊天室 (quit: Quit: leaving)。
(02時49分33 秒) pcman: aguai: 你用 GTK+ 寫過幾萬行之後就會知道理由
(02時49分36秒) y5c: win32 gtk+ 醜死了
(02時49分42 秒) hialan: pcman, 嘿嘿,有需求就會有供給者阿。你看 Google 不也給 Wine 一堆 code :p
(02時50分05秒) pcman: aguai: 尤其當你過去還曾經用過 Windows 上主流的開發工具,我們這裡根本落後 10 年你知道嗎?
(02時50分19秒) ***aguai <- 一生中應該還沒寫到第一萬行 code
(02時50分21 秒) pcman: hialan: 你可以慢慢等...
(02時50分47秒) aguai: C++builder 幫我生的 code 有算的話可能有接近
(02時50分47 秒) ***hialan 等到地老天荒~地老天荒~地老天荒~~~~
(02時51分03秒) DreamerC: o.o
(02時51分20秒) aguai: C++Buider 隨便就生個幾百行
(02時51分24 秒) pcman: aguai: 你用過 C++ builder 的話,應該很難接受 gtk+
(02時51分36 秒) pcman: aguai: 兩個相比,就會讓人覺得是相差一個世紀的產物
(02時52分09秒) hialan: pcman, 其實 Linux 的人認為 vim 是全世界最好用的 IDE ~~~ 可惜我不是 XDDD
(02時52分13秒) aguai: pcman: 可是講真的 用 C++Builder 拉完都不知道我寫了啥
(02時52分24 秒) y5c: hialan: vim? emacs 吧
(02時52分32秒) aguai: 手寫心裡比較踏實一點
(02時52分45秒) pcman: aguai: believe me, you won't want to try that.
(02時52分59秒) pcman: aguai: 寫一個空白視窗大約要 30 行左右
(02時53分 26秒) DreamerC: !?
(02時53分27秒) pcman: aguai: BCB 幫你生的 code 如果轉成 Win32 API,一般的 form 大概都需要好幾百行
(02時53分52秒) aguai: pcman: for long term.... I don't....but as a newbie... thats a good experience...
(02時53分54秒) hialan: y5c, 恩...@@|| 應該是吧...反正都可以在 文字編輯器下直接編譯、找函式、balabala
(02時53分56秒) pcman: aguai: 加上 anchor, Dnd, 等等有的沒的進階功能,很快就破千行了
(02時54分08 秒) aguai: 對呀
(02時54分14秒) pcman: aguai: 然後,那還是只是空的 GUI
(02時54分16 秒) aguai: 如神....
(02時54分34秒) aguai: 然後用名字猜
(02時54分44秒) aguai: 再補完
(02時54分48秒) pcman: aguai: 幸好有 dialog editor 可用,但是還是差很遠
(02時55分06 秒) aguai: 湊一湊居然就會動了
(02時55分09秒) pcman: aguai: BTW, 建立視窗的 Win32 API 有十個參數吧我記得.....
(02時55分 23秒) pcman: aguai: 我永遠記不起來裡面要填什麼
(02時55分30秒) hialan: MSWIN: cool!
aguai aguaithe1reak
(02時55分35秒) hialan: XD
(02時55分43秒) aguai: 反正有四五個都是 0
(02時55分52秒) pcman: aguai: 在那之前你要先註冊視窗類別,那需要填寫一個十幾個 member 的 struct


linux theme

一個稱之為"概念少女萌化計劃"的地方,大概就是要把桌面打造成以少女為主題的專案
基本上我是不會裝這樣的主題,但是有這樣的專案很歡迎,就如同社團的多樣性一般:)

2010年6月13日

Linux的覺醒

中文環境底下,過去linux文件相當仰賴英文文件,這幾年漸漸的改變了,中文的書籍慢慢變的多了,深度也慢慢的增加,從過去都是一些特定的server安裝跟桌面環境的使用,開始偏向一些類似安全管理等等的議題,這表示linux更加廣泛的使用在華文的社會當中。
過去會使用linux的人大多是工程師吧,也就是寫程式為目的,即使是架設server,往往也會因為管理人員的經驗問題變得比較困難推動。
但是我認為書本跟文件是一種比較"緩慢回饋",一般知識只要可以寫成書籍,某種程度表示他的新穎性已經比較不存在,同時也意味著他的穩定性的增加。
所以linux慢慢的在中文環境內發根、發芽,真的也很令人高興,同樣的講到M$,真的這幾年慢慢的也受到刺激,不是過去般的隨便。類似win7的穩定性就比之前的版本相對好很多,當機的問題也大為減少,當然還是人家主要的攻擊目標。M$ mobile edition也受到android威脅開始發展,不過過去萬年當機的版本,以前拿到M$手機幾乎是沒多久就當機吧,現在也開始努力求發展穩定。
種種的正面發展的跡象,真的是很令人高興^.^

UCC不是咖啡XD(Ubuntu Control Center)

這冷笑話大概沒幾個懂吧,有個牌子的咖啡叫做UCC,剛好這個軟體也叫做UCC (Ubuntu Control Center)。這軟體大概就是集結一些Ubuntu上面常用的管理功能做成GUI,是否有必要發展成這樣的工具,就等待時間來證明吧,不過至少是個貢獻,圖片就直接在google code上抓下來,旁邊有個官方網站,但不是中文也不是英文,有興趣的人再看吧

gnome paint,在gnome下的小畫家

作者也說了,就是用M$的小畫家做樣本的

啟動速度還ok,就是一般般的用法囉,安裝方式也是直接下載deb下來安裝就是了

2010年6月12日

gnome menu

直接看圖說話吧
老實說看起來有點KDE4或者vista之類的味道,不過我沒裝,安裝方式
sudo add-apt-repository ppa:gnomenu-team/ppa
sudo apt-get update
sudo apt-get install gnomenu

2010年6月9日

Ubuntu的OpenOffice更新了

感覺稍微又快了一點,最近大家似乎對速度開始有些"貪婪",大概也是資訊內容跟軟體愈來愈肥大,以前主要是文字為主,現在影音等等都是家常便飯,chrome就是個明顯的例子,看看瀏覽器跑起來,哪個不佔大量記憶體
大型軟體一般比較需要注重效能,反而是一般的小型軟體,比方簡單的編輯器,其實因為硬體的進步,可以比較不用在意
新的OOo在我PM 1.4G的cpu/5400rpm 2.5" HD大約十秒鐘就開啟了,第二次啟動就縮短到五秒了,真的不錯^^
最後OOo加油~~~*\^.^/*

2010年6月5日

[轉載]gimp教學資源

論壇上,某位會員發表的內容
我也這樣覺得,每次要找什麼效果都要是國外網站,看半天有時候又不時自己想得,真的很累!

而 且對已經有接觸過PhotoShop的人來說或許還好,可是對完全的美術編輯新手來說,真的不知道要從何開始。
常常會有一種,看著很多強大的功 能,然後想"該從哪裡開始呢?"的感覺

如果可以把各個特色的特效以及像在mobile01的"一分鐘GIMPxxx效果"效果一樣,整理 成一份Wiki或是目錄的話該有多好!



轉貼這位大大得一系列教學文:

轉載自mobile01(http://www.mobile01.com/topicdetail.php?f=164& t=147270)

1. [GIMP] 一分鐘讓照片變亮
2. [GIMP] 一分鐘製作半透明框線
3. [GIMP] 一分鐘製作「偽。LOMO」效果
4. [GIMP] 一分鐘製作半透明簡單方框
5. [GIMP] 一分鐘鮮艷 (vivid) 你的照片
6. [GIMP] 一分鐘增強照片色彩
7. [GIMP] 一分鐘製作花樣邊框
8. [GIMP] 一分鐘改變顏色
9. [GIMP] 一分鐘用一張照片偽裝數位黑卡效果 (XD)
10. [GIMP] 一分鐘利用快速遮罩製作花樣邊框
11. [GIMP] 三分鐘柔化肌膚 (Retouch) (圖多, 19 P, 2.63 MB)
12. [GIMP] 一分鐘自動白平衡
13. [GIMP] 一分鐘模擬「偽。反轉負沖 (正沖負)」效果
14. [GIMP] 一分鐘簡單去背
15. [GIMP] 一分鐘製作馬賽克邊框
16. [GIMP] 一加七分鐘製作漸層合成照片 (圖多, 23 P, 3.38 MB)
17. [GIMP] 一分鐘銳化 (Smart Sharpness)
18. [GIMP] 三分鐘我只會這種簡單去背
好用的gimp教學網站:
http://linux400.dfes.tpc.edu.tw/gimp/

好 用的免費筆刷:
http://www.blendfu.com/

雖 然這邊都是修照片的居多,不過一定還有很多資源可以好好利用的。希望大家可以一起分享,然後對大家有幫助。如果有Inkscape和blender的就更 好了~這樣就可以高枕無憂的脫離Windows了!

2010年6月2日

修正grub2 error 15

簡單的說,方法就是重新安裝 囧rz~
放入ubuntu或者linux光碟,主要就是利用光碟先弄個桌面出來,準備開啟terminal工作
進入linux環境之後,開啟terminal(記得先切變成root,這樣方便許多,反正是在救援工作,應該也會拔除網路線,就不必太擔心安全問題),輸入
fdisk -l
取得之前安裝linux的硬碟,比方說/dev/sda1
先把他掛載起來(上面是只有一個分割區/,如果你當時還有分割/home, /var等等,記得等一下一併掛上)
mount /dev/sda1 /mnt
將裝置檔案換過去
mount --bind /dev/ /mnt/dev
接著重點就是chroot這指令囉(chroot真的很好用,關於chroot的介紹
chroot /mnt
就是把/mnt所在底下的環境當成目前root file system
grub-install --recheck /dev/sda
上面要注意,sda是你分割區的代號,並沒有編號1的部份喔!!
接著把你剛剛掛上去的分割區一一卸載下來,重新開機,應該就可以看到grub正常工作了,以上作法主要參考wiki

修改GDM-ubuntu 10.04

話說ubuntu 8.x還是9.x之後,那個醜的要死得GDM竟然都不能套用GDM theme了,真的十分沮喪,但是有些手法可以容許我們作一些改變
首先可以裝ubuntu-tweak,他可以允許我們更改GDM的背景圖片跟Logo,如果這樣還不大能滿足,還可以使用底下的指令來修改字型
gksudo -u gdm dbus-launch gnome-appearance-properties
這是目前大致上我找到可以更改的方式,當然修改GDM的東西是需要root權限的

[轉載] 自己架一個安全的伺服器環境

來自娛網路上看到的文章 ,不過文章的時間很久了,參考看看

自己架一個安全的伺服器環境(一)
張貼:matt 發表於 Thursday, November 09 @ 17:50:01 CST
這一陣子看了很多與系統安全相關的文件,發現自己以前架的網站,真的真很不安全。所以就想花些時間,好好的架一個安全的伺服器。
我會把安裝的過程寫下來放在網站上,安裝的過程會分好幾部份,大家就慢慢看了。
我主要參考的文件的是Gerhard Mourani寫的Securing and Optimizing Linux: RedHat Edition v1.3
大家可以在文章、檔案下載這裡找到


安裝方式和方法

我們選擇「自定義」安裝,這樣你可以選擇安裝什麼伺服器軟體以及如何劃分你的硬碟。
我們的目標是安裝儘可能少的軟體,以保證系統的高效率。而且,安裝的軟體越少,安全漏洞也就越少。
選擇「Custom 」,繼續安裝。

劃分硬碟分區

我們使用三顆9GB的SCSI硬碟,並用RAID 3,所以有16GB左右可以使用。
劃分的Partitions如下:

/boot 15M 放Linux核心影像檔 (Kernal Image)
/usr 1024M 存放 Linux系統的許多軟體的所在分區。根據你要安裝軟體的數量來組態,這個分區一般在300MB到700MB之間。
/usr/local 2048M 存放與Red Hat Linux系統不同的軟體,例如,不是RPM包的軟體,而是TGZ或TAR的套裝軟體。其空間的大小取決於準備存放的這些軟體的數量。
/usr/src 512M 在一個Red Hat Linux系統中,/usr/src通常存放兩樣東西:
一個是核心的原始碼:Linux的所有原始碼都放在這裡,新的核心也在這裡建立。目前,核心原始碼大約佔50MB的空間。當你需要更多的空間來建立核心 時,或者要存檔幾個不同版本的核心的時候,就要考慮加大該分區的空間。
另一個是RPM包的原始程式:如果安裝了RPM的原始程式,文件將存放在這裡。這個分區的大小也取決於將在這裡安裝的套裝軟體的數量。
/home 2000M 衡量機器上會有多少使用者,每個配多少MB(例: 每個 users 50MB, 預計20個,共 = 1000MB)。這裡不考慮web與ftp的空間,因為不放這裡。
/chroot 9000M 配給要安裝在chroot環境執行的程式 (例:Apache、Mysql、Sendmail、ftp).
/cache 512M 給proxy server的chche空間 (i.e. Squid).
/var 1024M Red Hat Linux系統將把日誌寫在/var/log。列印佇列的文件通常寫在/var/spool。除非特別群群組態,/var將是根文件系統的一部分,通常不 佔很多空間。如果系統常做列印、寄郵件或者日誌,可以考慮專門建立一個/var分區。一般來講,只有多用戶或者伺服器才需要專門的/var分區。
256M swap partition, 交換分區用來負責系統的資料交換,相當於DOS/Windows下的虛擬記憶體,當記憶體不夠用時,系統就會把暫時的程式資料在交換分區上存取。在 Linux下,交換分區是必需的,不管你的記憶體有多大,即使你有128MB的記憶體,也需要至少一個交換分區。
/tmp 512M 用來存放臨時的文件。對於一個大型的、多用戶的系統或者網路伺服器,專門建立一個/tmp分區是一個好主意。對於一個專門的工作站,就不必專門建立一個 /tmp分區了。
/ 512M 根分區即根目錄(/)所在的分區。它只需要啟動系統所必需的文件(如核心文件)和系統群群組態文件,大多數系統50MB到100MB的根分區可以工作得很 好。

現在,選擇"Next"繼續安裝。分區建立完之後,安裝程式會讓你選擇要格式化的分區。選擇想要格式化的分區,選中"Check for bad blocks during format"選擇框,按"Next"繼續。

下一步如果選擇安裝LILO,你會看到LILO的組態。可以選擇把LILO裝在主開機磁區(MBR)或開機分區的第一個磁區。 在通常情況下,應該選擇把LILO安裝在主開機磁區。(如果你的電腦上裝有NT,或一些多重開機程式,如System Command、Boot Manager,你最好仔細看一遍LILO-HOWTO,以免不必要的損失)。

然後,開始組態網路和時鐘。選擇 Asia/Taipei

接著,要輸入root密碼、增加使用者和進行安全驗證的組態。不要忘了選上:

Enable MD5 passwords
Enable MD5 passwords

沒有必要選擇Enable NIS,因為我們不在這台伺服器上安裝NIS服務。

自己架一個安全的伺服器環 境(二)
張貼:matt 發表於 Wednesday, November 15 @ 00:42:15 CST

套件安裝(選擇套件群群組)

上面都完成了之後,該選擇安裝哪些套裝軟體了。在一般情況下,Linux是一個強大的作業系統,可以提供很多服務。但是,這些服務大多數都是沒有必要 的,而且會造成安全隱憂。





理想的情況下,每個台主機應專注與單一目的的提供網路服務。很多的Linux機器預設就被安裝了一堆的服務與應用程式,可是真正有使用到的只是某幾種 特定的網路服務。所以我們在設定時,會將系統內不需要的程式排除。只在特定用途的主機上安裝必須的服務可以確保你的網路安全,下列列舉幾項優點:

駭客無法使用其它有漏洞的服務來攻擊主機。
不同的人可以管理不同的服務與主機。透過分散與隔離服務的方式,減少與最小化不同服務與主機的管理者間發生衝突的可能性。
主機可以被最佳化設定成符合特定的服務。
經由減少服務,所以系統日誌的數量也跟著少了,那在檢查非預期事件的工作就變的簡單多了。
安裝Linux的正確方法是:安裝一個穩定和安全的系統。首先,你要選擇必須安裝的部件,也就是套裝軟體群群組。選擇"Select individual package"這個選項,在後面的安裝過程中,你可以選中或不選單獨的套裝軟體。

因為我們安裝的是Linux伺服器,所以沒有必要安裝圖形介面(XFree86)。在伺服器上安裝圖形介面意味著:更低的處理能力,更少的CPU時 間,更少的記憶體,更多的安全問題,以及等等。圖形介面一般只在工作站上使用。

選擇安裝下面的套裝軟體群群組:

Networked Workstation
Network Management Workstation
Utilities
選擇好套件群群組之後,就應該選擇單獨的軟體了。 注意:選上"Select individual package"單選框(非常重要),因為只有這樣才會讓你選擇安裝單獨的軟體。

選擇單獨的軟體

取消安裝下面列出的軟體。

Applications/File: git
Applications/Internet: finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing: ghostscript, ghostscript-fonts, groff-perl, mpage, pnm2ppa, rhs-printfilters
Applications/System: arpwatch, bind-utils, rdate, rdist, screen, ucd-snmp-utils
Documentation: indexhtml
System Environment/Base: chkfontpath, yp-tools
System Environment/Daemons: XFree86-xfs, finger-server, lpr, nfs-utils, pidentd, portmap, rsh-server, rusers, rusers-server, rwall-server, rwho, talk-server, telnet-server, tftp-server, ucd-snmp, ypbind, ypserv
System Environment/Libraries: XFree86-libs, libpng

安裝完伺服器之後必須移除的軟體

RedHat Linux在一般情況下會安裝一些預設的軟體,而且在安裝的過程中,不能夠選擇不安裝。因此,必須在安裝完成之後移除下面這些軟體:

pump mt-st eject mailcap apmd kernel-pcmcia-cs linuxconf getty_ps isapnptools setserial kudzu raidtools gnupg redhat-logos redhat-release gd pciutils rmt

apmd、kudzu和sendmail是daemon程序,在移除它們之前最好先停止這些程序。 停止這些程序用如下的命令: [root@deep]# /etc/rc.d/init.d/apmd stop
[root@deep]# /etc/rc.d/init.d/sendmail stop
[root@deep]# /etc/rc.d/init.d/kudzu stop

移除這些套裝軟體。

[root@deep /]# rpm -e --nodeps pump mailcap apmd kernel-pcmcia-cs getty_ps isapnptools setserial gnupg redhat-logos redhat-release pciutils rmt

註:mt-st eject linuxconf kudzu raidtools gd 這幾個自己會用到所以沒有移除,為何要移除,請參見 SOL page31

kdbconfig、mouseconfig和timeconfig是用來設置鍵盤類型、滑鼠類型和時區的。在這些都設置好之後,就很少有機會再用到它們 了。所以,可以把它們移除掉。等需要改變鍵盤、滑鼠和時區的時候,可以再從CD-ROM用rpm命令安裝。

使用下面的命令移除
[root@deep /]# rpm -e kbdconfig mouseconfig timeconfig authconfig ntsysv setuptool

sendmail、procmail和mailx在通常情況下是必須要的。因為伺服器上運行的各種各樣的服務會用到這些程式送訊息給root用戶,以建立 系統日誌(syslog)。

sendmail是一個強大的郵件傳送代理(Mail Transport Agent,簡稱MTA),可以把郵件從一台電腦發送到另一台電腦。它實際上所起的作用就是通過網路或Internet把email傳送到email的目 的地。sendmail有很多不同的配置方式:可以做為一個把郵件轉給郵件集中伺服器(Mail Hub Server)的內部郵件伺服器,也可以做為單獨的mail伺服器,或者做為網路上所有sendmail伺服器的中央郵件集中伺服器(Central Mail Hub Server)。因此,可以根據需要配置不同的sendmail伺服器。所以,你要先把sendmail移除掉,根據需要建立自己的sendmail伺服 器。

sendmail並不是自己處理郵件的分發,它是通過運行其他程式來完成這項工作。procmail是RedHat Linux用於本地郵件分發的分發代理(delivery agent)。因此,procmail只要裝在中央郵件集中伺服器(Central Mail Hub Server)上就行了。所以,沒有必要在內部所有運行sendmail服務的電腦上都安裝procmail程式。因為,這些內部的電腦會通過"/bin /mail"或sendmail把郵件轉發到中央郵件集中伺服器上。

使用下面的命令移除 sendmail
[root@deep /]# rpm -e sendmail

安裝完伺服器之後必須安裝的軟體

為了讓我們可以伺服器上編譯軟體,還必須安裝下面的RPM套裝軟體。所有的這些軟體都在RedHat 6.2第一張光碟的"/RedHat/RPMS"目錄下,而且都是使你的Linux系統能夠編譯程序所必須要的。

◎第一步 首先 mount 上CD-ROM,並變換目錄"RPMS"子目錄下。

mount上CD-ROM驅動器和轉到RPMS目錄用下面的命令:

[root@deep]# mount /dev/cdrom /mnt/cdrom/
[root@deep]# cd /mnt/cdrom/RedHat/RPMS/

下面是我們需要安裝的套裝軟體,只有安裝了這些套裝軟體才在Linux系統上編譯程序。請記住,這不過是能夠編譯".tar.gz"軟體最少必須的套裝軟 體。有一些軟體的編譯可能還需要用到別的特殊的套裝軟體。這些特殊的套裝軟體在RedHat的光碟中都能找到。所以,編譯程序的時候,如果出錯了,可以先 看看需要編譯的套裝軟體的README文件。

autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-6.noarch.rpm
dev86-0.15.0-2.i386.rpm
bison-1.28-2.i386.rpm
byacc-1.9-12.i386.rpm
cdecl-2.5-10.i386.rpm
cpp-1.1.2-30.i386.rpm
cproto-4.6-3.i386.rpm
ctags-3.4-1.i386.rpm
egcs-1.1.2-30.i386.rpm
ElectricFence-2.1-3.i386.rpm
flex-2.5.4a-9.i386.rpm
gdb-4.18-11.i386.rpm
kernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.3-15.i386.rpm
make-3.78.1-4.i386.rpm
patch-2.5-10.i386.rpm

注意:最好把這些軟體一起全裝了,省得在安裝這些RPM包的時候總出現一些相關出錯的資訊。

◎第二步 安裝所有這些軟體只要用一個命令就夠了。這個命令是:

[root@deep RPMS]# rpm -Uvh autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-6.noarch.rpm dev86-0.15.0-2.i386.rpm bison-1.28-2.i386.rpm byacc-1.9-12.i386.rpm cdecl-2.5-10.i386.rpm cpp-1.1.2-30.i386.rpm cproto-4.6-3.i386.rpm ctags-3.4-1.i386.rpm egcs-1.1.2-30.i386.rpm ElectricFence-2.1-3.i386.rpm flex-2.5.4a-9.i386.rpm gdb-4.18-11.i386.rpm kernel-headers-2.2.14-5.0.i386.rpm glibc-devel-2.1.3-15.i386.rpm make-3.78.1-4.i386.rpm patch-2.5-10.i386.rpm

◎第三步 為了讓所有的改變都生效,必須退出再重新登入。

退出的命令是:
[root@deep]# exit

安裝和編譯完在伺服器上需要的所有軟體之後,最好把上面幾步安裝的套裝軟體都移除,除非有什麼特殊的需要。這樣做,其中一個原因是:如果黑客成功地入侵了 你的伺服器,他也不可能用上面這些軟體來編譯軟體或改變二進位程式。同時,把它們移除掉也釋放了很多磁碟空間,這樣當進行系統的安全性和一致性檢查的時 候,可以加快掃瞄所有文件的時間(文件少了)。

當然,有很多建立伺服器的方法和策略,觀點如下:

第一:每台伺服器最好只安排一個特定的任務。你不應該把所有的服務都放在一台伺服器上,否則,這台伺服器的速度會受到影響(系統的資源要同時分給很多個程 序),而且會降低系統的安全(在同一台伺服器上運行太多的服務,黑客就有更多的機會找到系統的安全漏洞)。

第二:不同的伺服器完成不同的任務。這樣有利於簡化管理(你可以清楚地知道每台服務器具體的用途、運行哪些服務、客戶電腦(client)可以訪問哪些 埠,你也可以知道在日誌文件中會看到什麼,等等),而且還可以更好更靈活地控制每台伺服器(專門用於郵件、Web、資料庫、開發、備份,等等)。

舉一個例子,一台專門用作開發和測試的伺服器,就沒有必要像上面介紹的那樣,每一次裝軟體之前都要先裝編譯器,裝完軟體之後又把編譯器移除,完全可以把編 譯器保留著。如果想知道更多的編譯器的資訊,請參考Securing and Optimizing Linux -- Chapter 9 Compiler Functionality。

自己架一個安全的伺 服器環境(三)
張貼:matt 發表於 Wednesday, November 15 @ 00:45:18 CST

保持軟體最新(最安全)的版本

為了使你的軟體保持最新的版本,請定期查看RedHat Linux的勘誤網頁:http://www.redhat.com/support/errata/。勘誤網頁通常可以解決90% RedHat Linux的系統問題。而且,RedHat在得到安全漏洞的通知之後,如果已經找到解決方案了,就會在24小時之內,在勘誤網站上發佈出來。必須經常查看 這個地方。




在我們安裝的RedHat Linux6.2伺服器內,現在必須更新的軟體是(2000/11/13止):

dump-0.4b19-5.6x.i386.rpm
glibc-2.1.3-21.i386.rpm
glibc-devel-2.1.3-21.i386.rpm
gpm-1.19.3-0.6.x.i386.rpm
iputils-20001010-1.6x.i386.rpm
mailx-8.1.1-16.i386.rpm
man-1.5h1-2.6.x.i386.rpm
pam-0.72-20.i386.rpm
popt-1.5-9.6x.i386.rpm
sysklogd-1.3.31-17.i386.rpm
textutils-2.0e-6.i386.rpm
tmpwatch-2.6.2-1.6.2.i386.rpm
traceroute-1.4a5-24.6x.i386.rpm
kernel-2.2.16-22.i386.rpm(*4)
kernel-smp-2.2.16-22.i386.rpm(*4)
kernel-headers-2.4.0-0.26.i386.rpm(*4)
kernel-utils-2.2.16-22.i386.rpm(*4)

註:

在安裝完時,我才突然發現竟然沒有方式可將我要加裝的軟體拷貝這台機器上,所以我又把 samba 這程式給裝了上去了,這樣我才能將要加裝或更新的軟體拷到伺服器上。記得在您不需要安裝軟體到伺服器時,最好將 samba 移除。當然還有其它方式可以透過網路將軟體拷貝到伺服器上(例如:ftp),不管你用何種方式,記得不用時,將之移除。
為了用更安全的方式來安裝與設定軟體,所以當您至RedHat網站的勘誤網頁,上面列出需要更新的軟體中,有些我們用自行編譯方式安裝,並不使用RPM來 安裝。例如:wu-ftpd 、sendmail、bind
查詢尚未安裝套件的摘要資訊時,可利用 rpm -qpi
更新Kernel-2.2.14版本的漏洞
更新Redhat6.2的核心版本(RPM方式)

由於我們安裝的redhat6.2內含的核心版本是 kernel-2.2.14-14-5.0 ,Linux 核心至 2.2.15 以前的版本﹐都含有一個嚴重的臭蟲,這個漏洞只要系統裡有 setuid root 的程式,就可能被利用。主要問題發生在一個少有說明的函式 - setcap,setcap 函式可以讓使用者獲得任意 setuid 程式的能力,進而入侵系統。全文出處將有詳細的說明。 Linux 2.2.16 核心改版摘要 、下面的比較粗略的安裝方式,詳細的安裝參見 upgrading the kernel How To 。

第一步:做一片緊急開機磁片(假如沒有做過)

先查看 /etc/lilo.conf 的內容,依照你原本使用的核心版本,即預設映印象的 image=/boot/vmlinuz-2.x.x.x 設定,決定開機磁片的核心版本。

[root@deep /]# cat /etc/lilo.conf

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux
image=/boot/vmlinuz-2.2.14-5.0smp
label=linux
initrd=/boot/initrd-2.2.14-5.0smp.img
read-only
root=/dev/sda10

image=/boot/vmlinuz-2.2.14-5.0
label=linux-up
initrd=/boot/initrd-2.2.14-5.0.img
read-only
root=/dev/sda10
執行下列命令來建立
[root@deep /]# mkbootdisk --device /dev/fd0 2.2.14-5.0smp
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press to continue or ^C to abort:

建議你利用做好的這一片磁片重開機 ,確定它是沒問題的。

第二步:下載新版的核心

下面這幾個檔案是在2000/11/14止,我所找到穩定且最新的版本。
kernel-2.2.16-22.i386.rpm
kernel-headers-2.4.0-0.26.i386.rpm
kernel-smp-2.2.16-22.i386.rpm (for 雙CPU的kernel)
kernel-utils-2.2.16-22.i386.rpm

註:您可以依機器CPU的等級,下載586或686的版本。

第三步:Installing the Kernel

使用下列的命令來檢查RPM是否沒有問題

[root@deep /tmp]# rpm -K --nogpg kernel-2.2.16-22.i386.rpm kernel-headers-2.4.0-0.26.i386.rpm kernel-smp-2.2.16-22.i386.rpm kernel-utils-2.2.16-22.i386.rpm

kernel-2.2.16-22.i386.rpm: md5 OK
kernel-headers-2.4.0-0.26.i386.rpm: md5 OK
kernel-smp-2.2.16-22.i386.rpm: md5 OK
kernel-utils-2.2.16-22.i386.rpm: md5 OK

使用下列的命令來安裝
[root@deep /tmp]# rpm -Uvh kernel-2.2.16-22.i386.rpm kernel-headers-2.4.0-0.26.i386.rpm kernel-smp-2.2.16-22.i386.rpm kernel-utils-2.2.16-22.i386.rpm

第四步:建立開機時要載入的 ramdisk 映像檔

再次確認要建立 ramdisk 的核心檔名
[root@deep /]#ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root 20 Nov 13 22:01 /boot/vmlinuz -> vmlinuz-2.2.16-22smp
-rw-r--r-- 1 root root 627392 Aug 23 04:56 /boot/vmlinuz-2.2.16-22
-rw-r--r-- 1 root root 655177 Aug 23 04:47 /boot/vmlinuz-2.2.16-22smp


使用下列的命令來建立
[root@deep /]#mkinitrd /boot/initrd-2.2.16-22.img 2.2.16-22
[root@deep /]#mkinitrd /boot/initrd-2.2.16-22smp.img 2.2.16-22smp

第五步:修改 lilo.conf

修改 /etc/lilo.conf,變成如下的內容:

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-2.2.16smp
image=/boot/vmlinuz-2.2.16-22smp
label=linux-2.2.16smp
initrd=/boot/initrd-2.2.16-22smp.img
read-only
root=/dev/sda10

image=/boot/vmlinuz-2.2.16-22
label=linux-2.2.16
initrd=/boot/initrd-2.2.16-22.img
read-only
root=/dev/sda10
註:因為我們的機器是雙CPU、SCSI的HD,所以上面的設定會出現 smp 與 sda 等字眼,若您的機器是單CPU、IDE HD,則設定檔內容會有些不同。

第六步:將 lilo 設定的變更寫入開機磁區

使用下列的命令
[root@deep /]#lilo -v


LILO version 21, Copyright 1992-1998 Werner Almesberger

Reading boot sector from /dev/sda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.2.16-22smp
Mapping RAM disk /boot/initrd-2.2.16-22smp.img
Added linux-2.2.16smp *
Boot image: /boot/vmlinuz-2.2.16-22
Mapping RAM disk /boot/initrd-2.2.16-22.img
Added linux-2.2.16
/boot/boot.0800 exists - no backup copy made.
Writing boot sector.
第七步:重新開機

重新開機前,記得確認一下之前的步驟都做對了,不然開不了機就麻煩了。要是真的開不了機,請利用緊急開機磁片開機,重新設定。


自己架一個安全的伺 服器環境(四)
張貼:matt 發表於 Tuesday, November 21 @ 00:51:23 CST

安裝完後的系統安全概要

現在我們己經安裝了一台基本的Linux服伺器該有的環境了,再來就是一些系統安全的設定了。
在Securing and Optimizing Linux的第三章講了很多,主要是在討論一些保證伺服器安全的一般方法。書中有些部份是觀念上的說明,我就不寫了,下面是實作如何避免來自外部和內部的 攻擊相關的作法。繼續做下去了喔!




1. BIOS安全,設定開機密碼

2. 密碼

◎密碼至少要有6個字元,最好包含一個以上的數位或特殊字元。

◎密碼不能太簡單,所謂的簡單就是很容易猜出來,也就是用自己的名字,電話號碼、生日、職業或者其他個人資訊作為密碼。

◎密碼必須是有有效期的,在一段時間之後就要更換密碼。

◎密碼在這種情況下必須作廢或者重新設定:如果發現有人試圖猜測你的密碼,而且已經試過很多次了。

3. 密碼長度

編輯"/etc/login.defs"檔案,把最小密碼長度由5改成8。

找到 PASS_MIN_LEN 5 這一行,改為:PASS_MIN_LEN 8 。

"login.defs"是很重要的設定檔。可以在這個檔案中設定一些其他的安全策略,比如:密碼的有效期。

4. 設定 root 帳號的 login timeout 時間

編輯"/etc/profile"檔案,找到 HISTSIZE=XXXX 這行,並在下面加入

TMOUT=1800

這個參數是用來設定 root 帳號的 login timeout 時間,其以秒為單位,如1800便是表示30分(60秒*30分)。

5. 禁止使用控制臺程式與禁止控制臺的存取

在 Securing and Optimizing Linux 的 45 頁有提到之兩項,但我實在看不太懂這樣做的真正原因,看的懂的人可以告訴我一知嗎? 請來信 mattli@mxtpa.biglobe.net.tw

6. 修改"/etc/inetd.conf"檔案

inetd,也叫作"super demon",它會根據網路上來的請求載入相對應的網路服務程式。"inetd.conf"檔案告訴inetd監聽哪些網路埠,為每個埠啟動相對應的服 務。

把Linux系統放在任何的網路環境中,第一件要做的事就是瞭解一下伺服器到底要提供哪些服務。不需要的那些服務應該被停掉,最好將該服務的程式移除,這 樣黑客就更少了一些攻擊系統的機會。

查看"/etc/inetd.conf"檔案,瞭解一下inetd提供哪些服務。用加上註釋的方法(在一行的開頭加上#號),停止任何不需要的服務,再送 給inetd程序一個SIGHUP信號(即重新啟動inetd)。

第一步:把檔案的權限改成600。

[root@deep]# chmod 600 /etc/inetd.conf

第二步:確定檔案的所有者是root。

[root@deep]# stat /etc/inetd.conf

這個命令顯示出來的資訊應該會如下:

File: "/etc/inetd.conf"
Size: 3027 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,10 Inode: 26596 Links: 1
Access: Fri Nov 17 11:08:06 2000(00000.00:33:37)
Modify: Mon Nov 13 11:43:28 2000(00003.23:58:15)
Change: Fri Nov 17 11:40:34 2000(00000.00:01:09)


第三步:編輯"inetd.conf"檔案(vi /etc/inetd.conf),停止所有不需要的服務,如:ftp、 telnet、 shell、 login、 exec、talk、ntalk、 imap、 pop-2、pop-3、finger、auth、linuxconf,等等。如果你真的需要某些服務,可以不停止這些服務。但是,把這些服務停止,系統 受攻擊的可能性就會小很多。

改變了"inetd.conf"檔案之後,別忘了重新啟動 inetd 程序。

[root@deep /root]# killall -HUP inetd



[root@deep /root]# /etc/rc.d/init.d/inetd restart

第四步: 為了保證"inetd.conf"檔案的安全,可以用chattr命令把它設成不可改變。

把檔案設成不可改變的只要用下面的命令:

[root@deep]# chattr +i /etc/inetd.conf

這樣可以避免"inetd.conf"檔案的任何改變(意外或是別的原因)。一個有"i"屬性的檔案是不能被改動的:不能刪除或重命名,不能建立這個檔案 的鏈結,不能往這個檔案裡寫資料。只有系統管理員才能設置和清除這個屬性。如果要改變inetd.conf檔案,你必須先清除這個不允許改變的標誌:

[root@deep]# chattr -i /etc/inetd.conf

註:現在有一個比較安全且有效率的 Xinetd ,可以用來取代 inetd,它有下列的優點

Provide access control mechanisms

Prevent denial of service attacks

Extensive logging abilities

Offload services to a remote host

Make services available based on time

Limits on the number of servers that can be started

IPv6 support

User interactio

你可以在 http://www.xinetd.org/ 找到更多的資訊。

7. TCP_WRAPPERS

在"/etc/hosts.deny"檔案中加入"ALL: ALL@ALL, PARANOID"以拒絕所有電腦訪問你的伺服器,然後在"/etc/hosts.allow"檔案中一個一個加入允許訪問你的伺服器的電腦。這種作法是 最安全的。

第一步:編輯hosts.deny檔案(vi /etc/hosts.deny)加入下面這些行:

ALL: ALL@ALL, PARANOID

第二步:編輯"hosts.allow"檔案(vi /etc/hosts.allow)。例如,可以加入下面這些行(被授權訪問的電腦要被明確地列出來):

sshd: 208.164.186.1 gate.openarch.com

第三步:執行tcpdchk檢查TCP_WAPPERS配置的程式。

[root@deep]# tcpdchk

8. "/etc/aliases"檔案

編輯aliases檔案(vi /etc/aliases),刪除或註釋掉下面這些行:

#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
#root: marc

別忘了運行"/usr/bin/newaliases"使改變生效。

9. 不要顯示系統提示資訊

如果你不想讓遠端登錄的用戶看到系統的提示資訊,你可以改變"/etc/inetd.conf"檔案中的telnet設置:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

在末尾加上"-h"參數可以讓daemon不顯示任何系統資訊,只顯示登錄提示。當然,只有在伺服器上裝了telnet伺服器才有這樣做的必要。

10. "/etc/host.conf"檔案

編輯"host.conf"檔案(vi /etc/host.conf)加入下面這些行:

# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on

11. "/etc/services"檔案

[root@deep]# chattr +i /etc/services

12. "/etc/securetty"檔案

註釋掉(在這一行的開頭加上#號)所有你想不讓root登錄的tty設備。
編輯securetty檔案(vi /etc/securetty)象下面一樣,註釋掉一些行:

#tty1
#tty2
#tty3
tty4
#tty5
#tty6
#tty7
#tty8


上面這樣做的意思是只允許root在tty4上登錄。我建議只允許root在一個tty設備上登錄,如果從其他tty上登錄,用"su"命令把身份轉 成"root"。


13. 特殊的帳號

停止作業系統中不必要的預置帳號(每次升級或安裝完都要檢查一下)。Linux系統中就提供這樣一些你可能不需要的預置帳號。如果確實不需要這些帳號,就 把它們刪掉。系統中有越多的帳號,就越容易受到攻擊。

第一步
用下面的命令刪除一些不必要的用戶:

[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games (如果不用X Window伺服器,可以刪除這個用戶)
[root@deep]# userdel gopher
[root@deep]# userdel ftp (如果沒安裝匿名ftp伺服器,可以刪除這個用戶)
第二步
輸入下面的命令刪除一些不必要的群組:

[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games (如果不用X Window伺服器,可以刪除這個群組)
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers (如果不用pop 伺服器,可以刪除這個群組)
[root@deep]# groupdel slipusers

第三步
在系統中加入必要的用戶:

例如:
[root@deep]# useradd admin
[root@deep]# passwd admin
這些命令的輸出是這樣的:
Changing password for user admin
New UNIX password: somepasswd
passwd: all authentication tokens updated successfully

第四步
"不允許改變"位可以用來保護檔案使其不被意外地刪除或重寫,也可以防止有些人建立這個檔案的符號連接。刪除"/etc/passwd"、"/etc /shadow"、"/etc/group"或"/etc/gshadow"都是黑客的攻擊方法。
替密碼檔案和群組設定檔設置不可改變屬性,可以用下面的命令:

[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

注意:如果將來要在密碼或群組設定檔中增加或刪除用戶,就必須先拿掉這些檔案的不可改變屬性,否則就不能做任何改變。如果沒有清除這些檔案的不可改變屬 性,安裝那些會自動在密碼檔案和組檔案中加入新用戶的rpm套裝軟體的時候,在安裝過程中就會出現出錯的提示。




13. 防止任何人都可以 su 成為root

第一步

編輯su文件(vi /etc/pam.d/su)在文件的頭部加入下面兩行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
加入這兩行之後,"/etc/pam.d/su"文件變成:
#%PAM-1.0
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow use_authtok nullok
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_xauth.so
這兩行的意思是只有"wheel"群組的成員才能用su命令成為root。注意,"wheel"群組是系統中用於這個目的的特殊帳號。不能用別的群組 名。

第二步

我們在"/etc/pam.d/su"配置文件中定義了"wheel"群組,現在介紹一下怎樣讓一些用戶可以用"su"命令成為"root"。下面是一個 例子,讓admin用戶成為"wheel"群組的成員,這樣就可以用"su"命令成為"root":
[root@deep]# usermod -G10 admin
"G"是表示用戶所在的其他群組。"10"是"wheel"群組的ID值,"admin"是我們加到"wheel"群組的用戶。用同樣的命令可以讓其他的 用戶可以用su命令成為root。




14. 加強 PAM 記錄登入錯誤訊息

編輯 /etc/pam.d/other 加入下面粗體的那兩行

auth required /lib/security/pam_warn.so
auth required /lib/security/pam_deny.so
account required /lib/security/pam_deny.so
password required /lib/security/pam_warn.so
password required /lib/security/pam_deny.so
session required /lib/security/pam_deny.so 未完,續待......^_^


自己架一個安全的伺 服器環境(五)
張貼:matt 發表於 Monday, November 27 @ 17:42:07 CST
繼續之前的自己架一個安全的伺服器環境(四)--安裝完後的系統安全概要
15. 資源限制 ~ 21. 建立所有重要的日誌文件的硬拷貝




15. 資源限制

第一步

編輯"limits.conf"檔案(vi /etc/security/limits.conf),加入或改變下面這幾行:

* hard core 0
* hard rss 5000
* hard nproc 20

這些行的的意思是:"core 0"表示禁止建立core檔案;"nproc 20"把最多程式數限制到20;"rss 5000"表示除了root之外,其他用戶都最多只能用5M記憶體。上面這些都只對登入到系統中的用戶有效。通過上面這些限制,就能更好地控制系統中的用 戶對程式、core檔案和記憶體的使用情況。星號"*"表示的是所有登入到系統中的用戶。

第二步

必須編輯"/etc/pam.d/login"檔案,在檔案末尾加入下面這一行:
session required /lib/security/pam_limits.so
加入這一行後"/etc/pam.d/login"檔案是這樣的:

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
#session optional /lib/security/pam_console.so




16. 對 mount 的檔案系統做更好的控制

可以用一些選項,如:noexec、nodev和nosuid,對 mount 的檔案系統做更好的控制,如:"/home"和"/tmp"。這些都在"/etc/fstab"檔案中設定。fstab檔案包含了各個檔案系統的描述資 訊。如果想知道在這個檔案中可以設定哪些選項,請用man命令查看關於mount(8)的輔助敘述。

編輯 fstab檔案(vi /etc/fstab),並根據需要把這兩行:

/dev/sda9 /tmp ext2 defaults 1 2
/dev/sda6 /home ext2 defaults 1 2


/dev/sda11 /chace ext2 defaults 1 2

改變成:

/dev/sda9 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1 2
/dev/sda6 /home ext2 defaults,rw,nosuid,nodev 1 2


/dev/sda11 /chace exe2 defaults,rw,nosuid,nodev,noexec 1 2





"nodev"表示不允許在這個檔案系統上有字元或特殊的塊設備。
"nosuid"表示不允許設定具有 suid(set-user-identifier)和 sgid(set-group-identifier)權限的檔案。
"noexec"表示不允許檔案系統上有任何可執行的二進位檔案。

注意:上面的例子中,"/dev/sda9"mount到"/tmp"目錄上,而"/dev/sd6"mount到"/home"目錄上。當然這和你的實 際情況會有所不同,這些取決於你是怎麼劃分的以及用什麼樣的硬碟,例如:IDE硬碟是hda、hdb,等等,而SCSI硬碟是sda、sdb,等等。

17. 把rpm程式轉移到一個安全的地方,並改變預設的檔案執行權限

◎把rpm程式移到軟碟上,用下面的命令:


[root@deep]# mount /dev/fd0 /mnt/floppy/
[root@deep]# mv /bin/rpm /mnt/floppy/
[root@deep]# umount /mnt/floppy

注意:千萬不要把rpm程式從系統中移除掉,否則以後就不能重新安裝它,因為安裝rpm程式或其他套裝軟體本身就要用rpm命令。
還有一點要注意的是,把rpm命令的存取權限從預設的755改成700。這樣非root用戶就不能使用rpm命令了。特別是考慮到萬一在安裝完新軟體之 後,忘了把rpm程式移到一個安全的地方,這樣做就更有必要了。

◎改變"/bin/rpm"預設的存取權限,用下面這個命令:

[root@deep]# chmod 700 /bin/rpm


18. Shell 下的命令記錄

第一步

編輯 profile 檔案(vi /etc/profile),把下面二行改成:

HISTFILESIZE=20
HISTSIZE=20

這樣每個用戶家目錄下的".bash_history"就最多只能存20個命令。如果黑客試圖在用戶的"~/.bash_history"文件中發現一些 口令,他就沒有什麼機會了。

第二步

編輯 .bash_logout 檔案 (vi /etc/skel/.bash_logout) ,並加入下面一行:

rm -f $HOME/.bash_history

注意:若之前己經新增過使用者,記得要手動替他們加入上面那一行。

19. "/etc/lilo.conf" 檔案

第一步


編輯lilo.conf檔案(vi /etc/lilo.conf),加上或改變下面說明的三個設定:

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00 <- 將此行改成 00
Default=linux
restricted <-新增此行
password= <- 新增此行並輸入你的密碼
image=/boot/vmlinuz-2.2.16-22smp
label=linux
initrd=/boot/initrd-2.2.16-22smp.img
root=/dev/sda10
read-only

第二步

因為"/etc/lilo.conf"組態檔案裡,存在沒有經過加密的密碼,所以只有root才能有讀的權限。用下面的命令改變檔案的權限:
[root@deep]# chmod 600 /etc/lilo.conf

第三步

使改變後的"/etc/lilo.conf"組態檔案生效:
[root@deep]# /sbin/lilo -v (to update the lilo.conf file).

第四步

為了更安全一點,可以用chattr命令給"lilo.conf"檔案加上不可改變的權限。
◎讓檔案不可改變用下面的命令:
[root@deep]# chattr +i /etc/lilo.conf

這樣可以避免"lilo.conf"檔案因為意外或其他原因而被改變。如果想要改變"lilo.conf"檔案,必須先清除它的不可改變標誌。

◎清除不可改變的標記用下面的命令:
[root@deep]# chattr -i /etc/lilo.conf

20. 使Control-Alt-Delete關機鍵無效

編輯 inittab 檔案(vi /etc/inittab)把這一行:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

加上 # 改為:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

用下面的命令使改變生效:
[root@deep]# /sbin/init q

21. 建立所有重要的日誌文件的硬拷貝

保證在"/var/log"目錄下的不同日誌檔案的完整性是保證系統安全所要考慮的非常重要的一個方面。如果我們在伺服器上已經加上了很多安全措施,黑客 還是能夠成功入侵,那麼日誌檔案就是我們最後的防範措施。因此,很有必要考慮一下用什麼方法才能保證日誌檔案的完整性。如果伺服器上或網路中的其他伺服器 上已經裝設了印表機,就可以把重要的日誌檔案列印出來。這要求有一個可以連續列印的印表機,並用syslog把所有重要的日誌檔案傳到 "/dev/lp0"(列印設備)。黑客可以改變伺服器上的檔案、程式,等等,但是,把重要的日誌檔案列印出來之後,他就無能為力了。


在 Securing and Optimizing Linux v1.3的第57頁講了很多,我只用下面的方式來做:

假定現有一台 Log Server、一台郵件伺服器、一台DNS伺服器、一台 Web 伺服器 。我採用的策略是服務分散在不同的機器上,logserver 是接收日誌檔案的電腦主機名。如果有人試圖黑你的電腦並且威脅把所有重要的系統日誌檔案都刪掉,你就不用怕了,因為你已經列印出來或者在別的地方還有一個 拷貝。這樣就可以根據這些日誌檔案分析出黑客在什麼地方,然後理出這次入侵事件。


設定方式如下:

◎Log Server 的設定(host name為 logserver):

這台機器只開啟 syslog daemon ,其它的 Services 全部關掉。
除了必需的帳號外,不建立其它帳號,讓這台Log Server 只有 root 可以登入,且root 的密碼,千萬不可以與其它主機相同,因為若其它台主機被入侵了,這台也會跟著遭殃。
編輯syslog腳本檔案(vi +24 /etc/rc.d/init.d/syslog),把這一行:

daemon syslogd -m 0

改為:

daemon syslogd -r -m 0

重新啟動syslog daemon使改變生效:

[root@mail]# /etc/rc.d/init.d/syslog restart

讓這台主機接到印表機上, 編輯 "syslog.conf"檔案(vi /etc/syslog.conf),在檔案的末尾加入下面這一行

authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0


如果這台接收日誌檔案的伺服器上還要加上防火牆,可以檢查一下防火牆的腳本檔案中有沒有下面幾行(沒有就加上):

ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT -d $IPADDR 514 -j ACCEPT

在這個例子中防火牆的腳本檔案中定義了

EXTERNAL_INTERFACE="eth0"。

IPADDR="208.164.186.2"; <-- Log Server 的 IP

SYSLOG_CLIENT="208.164.168.0/24" <-- 要將 Log 資訊送到Log Server 的 IP範圍

重新啟動接收日誌檔案的伺服器上的防火牆,使改變生效:

[root@mail]# /etc/rc.d/init.d/firewall restart


當然如果在這台 Log Server 再加上 LogCheck 類似的軟體,那就更好了。



◎Mail Server 、DNS Server、Web Server 的設定都相同:

編輯syslog.conf檔案(vi /etc/syslog.conf),在檔案末尾加入下面這一行:


authpriv.*;mail.*;local7.*;auth.*;daemon.info @logserver

(logserver 為 hostname,需要DNS或 各主機的 /etc/hosts內有記錄)


重新啟動syslog daemon使改變生效:

[root@deep]# /etc/rc.d/init.d/syslog restart

注意:千萬不要用閘道伺服器來收集和管理所有的系統日誌資訊。有關syslogd程式的其他一些參數和策略,可以用man命令查看輔助敘 述:syslogd(8)、syslog(2)和syslog.conf(5)。


結語:這樣的作法可將 Log File 都送到 Log Server 上,但並沒有將不同主機的Log分開在不同的檔案,若要查也不太好查。在印象中好像有方法可以分開,但我不知道如何做,有人知道嗎? 與大家分享一下吧!
mail to me : matt@mxtpa.biglobe.net.tw

安裝完後的系統安全概要,這部份還沒做完呢? 再接再厲了....p(^o^)q



自己架一個安全的伺 服器環境(六)
張貼:matt 發表於 Tuesday, November 28 @ 12:08:07 CST
繼續之前的自己架一個安全的伺服器環境(五)--安裝完後的系統安全概要
22. 改變 "/etc/rc.d/init.d/" 目錄下,腳本檔案的存取權限~ 26. /proc/sys 網路安全選項的調整




22. 改變 "/etc/rc.d/init.d/" 目錄下,腳本檔案的存取權限

改變啟動和停止daemon的腳本檔案的存取權。


[root@deep]# chmod -R 700 /etc/rc.d/init.d/*

這樣只有root可以讀、寫和執行這個目錄下的腳本。我想一般用戶沒有什麼必要知道腳本檔案的內容。

注意:如果你裝設或升級了一個程式,要用到"/etc/rc.d/init.d/"中system V腳本,不要忘記再檢查一下改變和檢查這個腳本檔案的權限。

23. "/etc/rc.d/rc.local"檔案

在預設情況下,當登入裝有Linux系統的電腦時,系統會告訴你Linux發行版的名字、版本號、核心版本和伺服器名稱。這洩漏了太多的系統資訊。最好只 顯示一個"Login:"的提示資訊。


第一步

編輯"/ect/rc.d/rc.local"檔案,在下面這些行的前面加上"#":

--
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
--

第二步

解除"/etc"目錄下的"issue.net"和"issue"檔案:

[root@deep]# rm -f /etc/issue

[root@deep]# rm -f /etc/issue.net

注意:"/etc/issue.net"檔案是用戶從網路登入電腦時(例如:telnet、SSH),看到的登入提示。同樣在"/etc"目錄下還有一個 "issue"檔案,是用戶從本地登入時看到的提示。這兩個檔案都是文字檔案,可以根據需要改變。但是,如果想刪掉這兩個檔案,必須向上面介紹的那樣把 "/etc/rc.d/rc.local"腳本中的那些行註解掉,否則每次重新啟動的時候,系統又會重開新文件立這兩個檔案。

24. 帶"s"位元的程式

用ls -l命令列出來的檔案,如果檔案的權限位中出現"s",則這些檔案的SUID(-rwsr-xr-x)或SGID(-r-xr-sr-x)位被設定了。 因?這些程式給執行它的用戶一些特權,所以如果不需要用到這些特權,最好把這些程式的"s"位移去。可以用下面這個命令"chmod a -s <檔案名>"移去相應檔案的"s"位。


可以清除"s"位元的程式包括但不限於:

從來不用的程式
不希望非root用戶執行的程式
偶爾用用,但是不介意先用su命令變成root後再執行。

下面移除了SUID的程式,是作者(Gerhard Mourani)認為有必要移去"s"位。注意,系統可能需要一些SUID的程式才能正常執行,所以要千萬小心。

用下面的命令找到所有帶"s"位元的程式:





[root@deep]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}


用下面的命令將下面的程式除去 SUID:


[root@deep /]# chmod a-s /usr/bin/chage
[root@deep /]# chmod a-s /usr/bin/gpasswd
[root@deep /]# chmod a-s /usr/bin/wall
[root@deep /]# chmod a-s /usr/bin/chfn
[root@deep /]# chmod a-s /usr/bin/chsh
[root@deep /]# chmod a-s /usr/bin/newgrp
[root@deep /]# chmod a-s /usr/bin/write
[root@deep /]# chmod a-s /usr/sbin/usernetctl
[root@deep /]# chmod a-s /usr/sbin/traceroute
[root@deep /]# chmod a-s /bin/mount
[root@deep /]# chmod a-s /bin/umount
[root@deep /]# chmod a-s /bin/ping
[root@deep /]# chmod a-s /sbin/netreport


如果你想知道這些程式到底有什麼用,可以用man命令查看幫助。


例如:

[root@deep]# man netreport

25. /proc/sys 網路安全選項的調整

讓系統對 ping 沒有反應
讓系統對廣播沒有反應
取消 IP source routing
開啟 TCP SYN Cookie 保護
取消 ICMP 接受 Redirect
開啟錯誤訊息保護
開啟 IP 欺騙保護
記錄Spoofed Packets, Source Routed Packets, Redirect Packets
Redhat 6.1 的做法:

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
> echo 0 > $f
> done
[root@deep /]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 0 > $f
> done
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 0 > $f
> done



Redhat 6.2 的做法:

編輯 "/etc/sysctl.conf" 檔案,並加入下面幾行,

# Enable ignoring ping request
net.ipv4.icmp_echo_ignore_all = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Enable IP spoofing protection, turn on Source Address Verification
net.ipv4.conf.all.rp_filter = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1

最後重新啟動 network

[root@deep /]# /etc/rc.d/init.d/network restart



結語:安裝完後的系統安全概要,我在(四)、(五)、(六)這三篇中列出我有做的部份,這些也是我覺的要設定的地方,在 Securing and Optimizing Linux: RedHat Edition v1.3 中的第三章寫了很多,有些我沒有列出來是因為有些是觀念上、有些是平常要做的檢查,若各位想要進一步瞭解,請看一下原文了喔!

自己架一個安全的伺 服器環境(七)
張貼:matt 發表於 Wednesday, November 29 @ 18:58:48 CST

提供伺服器一個透過網路的安全入口(SSH2)

作者:matt (mattli@mxtpa.biglobe.net.tw)
序言
在照著「安裝一台安全的伺服器(一)~(六)」的方式,安裝了一個安全的伺服器環境後,一定會覺得有個地方很奇怪,不知道大家有無注意到,那就是除了在主 機前操作外,我們如何透過網路來維護這台主機、如何將東西傳到這台「安全」的主機上,而且還是在安全的前提下進行呢? 答案就是 SSH ,可能有些人有聽過或現在正在使用了,它可以通過網絡登錄到遠程主機並執行命令。它提供了很強的安全驗證可以在不安全的網絡中進行安全的通訊,而這正是我 們需要的。




SSH 在 Linux 上有兩個軟體可以用,一是 OpenSSH (免費) 二是 SSH2 (商業),我現在使用的是 SSH2,雖然OpenSSH是免費的,而且功能上與 SSH 是類似,但個人覺的在 Client 的工具,還是沒有ssh.com公司提供的 SSH Client_win32 好用 (因為我的日常使用平台還是Windows),它除了遠端登入外,還提供拷貝檔案到主機上的功能,這項功能是我常需要使用的,而 OpenSSH 的 Windows Client 工具中卻沒有 for SSH2 的 scp,所以我只有先用SSH2了,反正自己又不是拿來做商業上的用途,好用為何不用呢?

註:在這裡有一篇文章說明,如何在Windows 下利用 Secure Shell Tunnelling 來與 OpenSSH 做到安全的FTP,可是我試不出來,有人會嗎?這樣就可以真的用OpenSSH了。

更新(2001/01/06):
OpenSSH也可以和SSH Client_win32 相通,只要將 /etc/ssh/sshd_config 內的
Subsystem sftp /usr/libexec/sftp-server
這行打開就可以了。嘿嘿 ,在Window下終於有好用的工具與OpenSSH通了。不過我只試出只用 password 來連,用個人私key 來連,還沒試出來。

注意事項


原始路徑都為「/var/tmp」(當然在實際情況中也可以用其它路徑)。

安裝在RedHat Linux 6.1和6.2下測試通過。

要用「root」用戶進行安裝。

SSH2的版本是2.3.0

軟體的來源


SSH的主頁:http://www.ssh.com
ftp://ftp.ssh.com/pub/ssh/ 或
ftp://ftp.wiretapped.net/wd2a/security/cryptography/ssh/SSH/rpms


1. SSH2 Server :

for redhat: ssh-2.3.0-1nox.i386.rpm (因為伺服器不需X-Window,所以下載不包含X-window 的版本)


2.SSH2 Client : (http://www.ssh.com 要註冊才能下載)

for linux : 在SSH2 Server的RPM內就有了

for window: SSHWin-2.3.0.exe

安裝步驟

A. 下載軟體

SSH2 Server
由於我們要安裝的主機上沒有ftp程式,先從RedHat6.2光碟中,將FTP Client裝起來。再利用 ftp 程式將軟體下載回來。最後再將 ftp 程式移除。

[root@deep tmp]# mount /dev/cdrom /mnt/cdrom
[root@deep tmp]# rpm -ivh /mnt/cdrom/RedHat/RPMS/ftp-0.16-3.i386.rpm
ftp #########################
[root@deep tmp]# ftp ftp.ssh.com
Name (ftp.ssh.com:root): anonymous
Password: abc@abc.net
ftp> cd /pub/ssh/rpms
ftp> get ssh-2.3.0-1nox.i386.rpm
ftp> quit
[root@deep tmp]# rpm -e ftp-0.16-3

SSH2 Windows Client

SSHWin-2.3.0.exe 想辦法下載回來吧!
記得還要到SSH網站上申請 license(非商業的免費),再將 license.dat 下載回來!
B. 安裝

SSH2 Server
[root@deep tmp]# rpm -ivh ssh-2.3.0-1nox.i386.rpm
[root@deep /]# rm /etc/ssh2/hostkey*
[root@deep /]# /usr/local/bin/ssh-keygen2 -P /etc/ssh2/hostkey (為 Server 產生新的 hostkey)


SSH2 Windows Client
在Windows下執行 SSHWin-2.3.0.exe

C. 設定 SSH2 Server (deep:192.168.0.20)

以root身份啟動 sshd

[root@deep /]# /usr/local/sbin/sshd


建一個新的使用者帳號 (若沒有的話)
[root@deep /]# useradd test
[root@deep /]# passwd test


D. 設定 SSH2 Window Client (mynb:192.168.0.100)

啟動 SSH Secure Shell Client
利用 [Help] -> [Import License File] 將下載下來的license.dat 匯入
按一下 Enter 鍵,連接到 SSH2 Server,Host Name: 192.168.0.20、User Name: test
稍微等一下,會出現一個警告視窗,按 "是",再來輸入 Password,這樣便連上SSH2 Server主機了。

選擇 [Edit] -> [Settings...] -> [Global Settings] -> [User Keys] ,按下 [Generate New Keypair] 按鈕。
出現一個 Key Generation 視窗,按二次 [下一步] ,等它產生Key,再按 [下一步] ,輸入
File Name:就是Key的檔案名稱
Comment:隨便給個註解
PassPhrase:就是登入密碼,打入自己要的密碼吧!不要太簡單喔
PassPhrase:再打一次
打完後,再按 [下一步] ,最後按下 [Upload Public Key] 按鈕,出現一個 Upload Public Key 視窗,
再按下 [Upload] 按鈕,等一下後公鑰就傳到 SSH2 Server 上了。
最後按完成,然後你就可以在 User Key 這視窗中看到你剛剛產生的Key。再按 [OK] 離開 settings 視窗。

你也利用可以看一下 test 的 Home 目錄下,有個 .ssh2 目錄,裡面有你的公鑰喔!
[test@deep test]$ ls -al

由於 SSH2 提供兩種連線方式,一種是「使用密碼」,一種是「使用 Key」, SSH2 Server 的預設是判斷有無「Key」,有就使用,若無便「使用密碼」。為了讓系統更安全,我們需要將設定改成「使用Key」,這樣子只有在這台主機上有帳號且有公 鑰的人,才能利用自己的私鑰連上來,因為密碼太簡單還是會便猜出來。

E. 再次設定 SSH2 Server

編輯 /etc/ssh2/sshd2_config,更改設定如下:
## sshd2_config
## SSH 2.0 Server Configuration File
##

# The "*" defines for all hosts
*:

## General settings
VerboseMode no
AllowCshrcSourcingWithSubsystems no
ForcePTTYAllocation no
SyslogFacility DAEMON
## Network settings
Port 22
ListenAddress 0.0.0.0
RequireReverseMapping no
MaxBroadcastsPerSecond 0
KeepAlive yes
NoDelay yes
MaxConnections 5
## Crypto settings
Ciphers AnyCipher
MACs AnyMAC
## User settings
PrintMotd yes
CheckMail yes
UserConfigDirectory "%D/.ssh2"
UserKnownHosts yes
## Public key configurations
HostKeyFile hostkey
PublicHostKeyFile hostkey.pub
RandomSeedFile random_seed
IdentityFile identification
AuthorizationFile authorization
AllowAgentForwarding no
## Tunneling configurations
AllowX11Forwarding no
AllowTcpForwarding no
## Authentication methods
PasswordGuesses 3
AllowedAuthentications publickey,password
RequiredAuthentications publickey,password
## Host restrictions
QuietMode no
## User restrictions
PermitRootLogin no
## SSH1 compatibility
Ssh1Compatibility no
subsystem-sftp sftp-server


重新啟動 sshd2
[root@deep /]# /usr/local/sbin/sshd

這樣子設定後,就只有利用 publickey & privatekey 才能連到主機上,這樣主機也就更安全了。

配置sshd2使其使用TCP-WRAPPERS(inetd超級伺服器)

第一步

編輯"inetd.conf"文件(vi /etc/inetd.conf)並加入這一行:

ssh stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/sshd -i

注意:"-i"參數很重要,它說明sshd是被inetd運行的。在加入這一行後,通過發送一個SIGHUP信號(killall -HUP inetd)來更新"inetd.conf"文件。

[root@deep /root]# killall -HUP inetd

第二步

編輯"hosts.allow"文件(vi /etc/hosts.allow)並加入這一行:

sshd: 192.168.1.

這一行表示IP地址為"192.168.1.X"的主機都可以連接上來。

確定一下 "hosts.deny" 檔案內有下面這一行:

ALL: ALL@ALL

結語:

有關 SSH2 Server與 Client 的相關文件,在 Securing and Optimizing Linux: RedHat Edition v1.3 的第11章有詳細的安裝步驟、或在你安裝的地方就有 Server 在 /usr/doc/ssh-2.3.0,Client 就看 Help 就好了、或是在 SSH 的網站上也有非常詳細的文件可以看(要錢的就是文件比較齊一點....)。

大家看完或試完了後,若有錯誤的地方,告訴我一下吧!