May 08

開發網站,您會選擇什麼字符編碼?

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5 out of 5)
Loading ... Loading ...

有關 Web 字符編碼的問題,已經是老生常談。今天看到 一峰 兄弟和 Lunatic Sun 不謀而合的談到有關 UTF-8 的使用現狀,也談談我的看法。
上圖是 Google 根據近年 Web 頁面編碼趨勢的一個總結。我很欣喜的看到 UTF-8 編碼已經成為了主流,而猶如 一峰 兄弟所言,讓人堪憂的是中文字符編碼還是呈現很平穩的趨勢,這說明目前 UTF-8 編碼並沒有在中文網站中推廣開來。

上圖是 Google 根據近年 Web 頁面編碼趨勢的一個總結。我很欣喜的看到 UTF-8 編碼已經成為了主流,而猶如 一峰 兄弟所言,讓人堪憂的是中文字符編碼還是呈現很平穩的趨勢,這說明目前 UTF-8 編碼並沒有在中文網站中推廣開來。

究其原因,本人認為會有如下幾點:

第一,中文編碼(無論是 GBK、GB2312、GB18030 等)都變成了「傳統」,畢竟這是 中文 的編碼。開發者不願意在字符編碼這塊花太多的心思。

第二,由於早期項目的原因,不得不繼續使用 GBK 等中文編碼。

我 曾經就遇到過這樣的一個項目,當時我很奇怪他們為什麼不用 UTF-8,因為他們面對的客戶不僅僅是國內用戶。而解決這一方案的辦法就只能是使用非常勞累的手段,但這是指標不治本的辦法。雖然最後,在本人的一再堅 持下,最後還是轉成了 UTF-8 編碼,但相信國內還有很多項目都會碰到類似的問題。

第三,開發工具方面的支持,尤其是國內的一些產品。從根本上說,除了基本的思想意識以外,還有就是開發工具的問題。或許有一天,開發者相關的開發工具都默認的就是 Unicode 的話,這樣轉換的成本就會非常的低。

第四(感謝小馬補充),流量大、文字多的中文站點通常都會使用 GB2312,原因很簡單,頁面下載量會比 UTF-8 小(GBK 編碼只需要兩個字節,而 Unicode 需要三個或者以上)。

那麼,我經常使用的些主要的中文站點,目前在使用什麼編碼呢?下面是一個不完全的列表,供大家參考一下(以頁面 meta 標籤的 Content-type 為準)。

淘寶 - GB2312
支付寶 - GB2312
口碑 - GBK
中國雅虎 - GB2312
163 - GB2312
新浪 - GB2312
搜狐 - GB2312
豆瓣 - UTF-8
Yupoo - UTF-8
谷歌 - UTF-8

從上述的站點看來,目前國內一般門戶類型的站點基本上都是 GBK 等編碼,而類似 豆瓣、Yupoo 這樣的新興 「Web2.0 式站點」已經開始嘗試 UTF-8 。在我看來,Unicode 在中文站點的推廣,任重而道遠。

那麼接下來,在您以後的項目中,您會選擇什麼字符編碼?

作者:GraceCode


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




May 07

有朋友問到如何在mysql中使用隨機數
如何寫一個語句能一下更新幾百條MYSQL數據!

需要測試MYSQL數據庫,裡面有一個上萬條數據的數據庫,如何寫一個PHP文件一下每次更新幾百條信息,我都是寫一個循環一次更新一條信息,這樣我知道用WHILE寫就可以了,要是一次更新好比100條數據改如何寫呢!

謝謝
正確答案是:UPDATE cdb_posts  SET  views = rand();

順便給你找了點關於mysql rand函數的實例,如下:
那就在insert 命令中,value()裡面用rand(),注意字段寬度是否夠一直以為mysql隨機查詢幾條數據,就用

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

就可以了。
但是真正測試一下才發現這樣效率非常低。一個15萬餘條的庫,查詢5條數據,居然要8秒以上
查看官方手冊,也說rand()放在ORDER BY 子句中會被執行多次,自然效率及很低。

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

搜索Google,網上基本上都是查詢max(id) * rand()來隨機獲取數據。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是這樣會產生連續的5條記錄。解決辦法只能是每次查詢一條,查詢5次。即便如此也值得,因為15萬條的表,查詢只需要0.01秒不到。
上面的語句採用的是JOIN,mysql的論壇上有人使用

SELECT *
FROM `table`
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;

我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語句還是有很大差距。總覺有什麼地方不正常。
於是我把語句改寫了一下。

SELECT * FROM `table`
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
ORDER BY id LIMIT 1;

這下,效率又提高了,查詢時間只有0.01秒
最後,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因為沒有加上MIN(id)的判斷,結果有一半的時間總是查詢到表中的前面幾行。
完整查詢語句是:

SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
ORDER BY id LIMIT 1;
SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

最後在php中對這兩個語句進行分別查詢10次,
前者花費時間 0.147433 秒
後者花費時間 0.015130 秒
看來採用JOIN的語法比直接在WHERE中使用函數效率還要高很多。

轉自 :  [link]


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




May 07
  1. 啟動計算機
  2. 在windows xp啟動畫面出現後馬上按下F8鍵
  3. 選擇”帶命令行的安全模式”
  4. 運行過程結束時,系統列出系統超級用戶”administrator”
  5. 進入命令行模式,然後就可以用net user password命令來修改密碼了
  6. 比如賬號為fox希望將密碼設置為12345678,那麼可以輸入:net user fox 12345678 /add這樣就強制將”fox”用戶的口令更改”12345678″。
  7. 若想在此添加一新用戶,用戶名為dog,口令為87654321,只要鍵入:net user dog 87654321 /add然後再把這個dog用戶加入管理員組:net localgroup administrators dog /add這樣,用戶”dog”就成為系統管組”administrators”的用戶了。
  8. 最後重新啟動計算機,選擇正常模式下運行,就可以用更改後的口令 “12345678″登錄了。

Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




May 02

該軟件通過修改微軟Windows XP SP3的UXTheme.dll動態鏈接庫,讓您的操作系統支持第三方(非微軟標準格式)的桌面主題.
相比之前放出的uxtheme會讓系統不穩定的問題,這一版本的補丁可以更有效安全地進行破解,並且可以還原回來.
Latest Changes:

  • Better detection of patched or unpatched file
  • More safety checks
  • “Lost hope” key to restore the original file

官網:http://winprj.net/

下載 : 下載


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




May 01

勞動節的由來

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

由於友人M個人訊息所引發我去找出 勞動節的由來 。

五一國際勞動節亦稱「五一節」,在每年的五月一日。它是全世界無產隊級、勞動人民的共同節日。
此節源於美國芝加哥城的工人大罷工。1886年5月1日,芝加哥的二十一萬六千餘名工人為爭取實行八小時工作制而舉行大罷工,經過艱苦的流血鬥 爭,終於獲得了勝利。為紀念這次偉大的工人運動,1889年7月第二國際宣佈將每年的五月一日定為國際勞動節。這一決定立即得到世界各國工人的積極響應。 1890年5月1日,歐美各國的工人階級率先走向街頭,舉行盛大的示威遊行與集會,爭取合法權益。從此,每逢這一天世界各國的勞動人民都要集會、遊行,以 示慶祝。中國人民慶祝勞動節的活動可追溯至1918年。是年,一些革命的知識分子在上海、蘇州、杭州、漢口等地向群眾散發介紹「五一」的傳單。1920年 5月1日,北京、上海、廣州、九江、唐山等各工業城市的工人群眾浩浩蕩蕩地走向街市、舉行了聲勢浩大的遊行、集會,這就是中國歷史上的第一個五一勞動節。 放後,中央人民政府政務院於1949年12月將五月一日定為法定的勞動節,是日全國放假一天。節日,舉國歡慶,人們換上節日的盛裝,興高采烈地聚集在公 園、劇院、廣場,參加各種慶祝集會或文體娛樂活動,並對有突出貢獻的勞動者進行表彰。
1886年5月1日芝加哥城的工人大罷工
5月1日,國際勞動節,它是全世界工人階級鬥爭的歷史紀念,每個國家都很重視它,尤其是美國、加拿大、南非。事件起因是,
1880年美國工人遊行集會要求8小時工作制。1884年,聯邦貿易組織通過了一項解決方案,以立法的形式規定從1886年5月1日開始執行每日 8小時工作制,但此後,工人們仍然被強迫每天工作10小時,12小時,甚至14小時,這使得該項立法明有實亡,而各地的聯邦首腦對此卻表示出十分冷淡和不 友好的態度,於是一場為爭取8小時工作的罷工開始了。
1886年4月,25萬工人參加了五一勞動節遊行示威活動。此項活動由非政府國際工人聯合會組織,活動的中心在芝加哥,商人和政府對這次活動 愈來愈表現出的革命性感到恐懼,當地商界首腦要求增加警察和軍隊的數量。芝加哥商業俱樂部購賣了2000美元的槍支用於警戒對付這次罷工,5月1日這次游 行活動得到了芝加哥紡織工人、鞋工人、房屋裝修工人的支持,5月3日,警察開始向罷工的人群開火,打死打傷四人,一些非政府人士號召第二天在 haymarket廣場集會抗議政府的暴力鎮壓。
這場集會的過程中沒有發生什麼事件,但在最後一位講演者登上講台時,天下起了雨,廣場上只剩下幾百人,180名警察進入廣場疏散人群,這時一顆炸彈飛向警察中間,炸死一名,炸傷七名警察,警察立即向人群開火,打死一名打傷多名群眾。
由於無法斷定是誰扔的炸彈,這個事件成了攻擊勞動節遊行活動的把柄,警察查抄懷疑對象的家和辦公室,有數百人在未指控下被逮捕,尤其是那些此次活 動的領導者被襲擊,8名芝加哥活動的積極倡導者被指控涉嫌廣場炸彈事件和企圖謀反,法庭在證據不足的情況下開庭審判,判決其中4人於1887年11月11 日絞刑。(另一名自殺於獄中,其它三名直到1893年才被釋放)。
這場鬥爭雖然被鎮壓了,但其意義卻十分深遠,此後由於各國工人階級的團結和不斷鬥爭,終於贏得了8小時工作制和勞動節。1889年7月第二國 際宣佈將每年的五月一日定為國際勞動節。這一決定立即得到世界各國工人的積極響應。1890年5月1日,歐美各國的工人階級率先走向街頭,舉行盛大的示威 遊行與集會,爭取合法權益從此,每逢這一天世界各國的勞動人民都要集會、遊行,以示慶祝。


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




Apr 30

你變心,我依然愛你?你變老變醜,我依然愛你?還是你要死了,我也愛你,至死方休?甚至至死不渝?

為了歌誦「生命誠可貴、愛情價更高」,許許多多的電影、小說,都由此作為主軸。當男女主角高喊:「就算你下一秒便要死了,也讓我愛你到最後一刻」的時候,男女主角的眼淚掉下來了,觀眾的眼淚掉下來了。電影於是大賣,我們再度相信有個人願意為愛而死。

死就死嘛,不過是兩腿一伸,眼睛一閉。可是,要怎麼死?
MTV裡常用的情節,就是車禍。男主角趕著去見女主角(或女主角趕著去見男主角),滿心期待的時候,「砰」的一聲天旋地轉,死前腦子裡想的還是差幾步便見到面的愛人,真應了長輩平時罵人的那句話:「趕頭趕命,趕住去死呀!」。

如果是小說、電影、電視劇,車禍這種死法就太快速了,不足以表現兩個人驚天地動鬼神的愛戀。最好的表現手法,就是絕症。

絕 症是不會馬上死的,剩下的幾個月便是精華所在 ─ 沒病的那個人,看著病人日夜消瘦,心疼;有病的那個人,覺得自己耽誤了愛人的大好人生,也心疼;生病的人日漸消瘦、形同枯槁、頭髮掉落,看顧照料的人依舊 深情款款的說:「你 / 妳在我心裡是最帥 / 美的」。感人肺俯的同時,還猛下重藥,強調愛情不分美醜、不分生死。只要有愛,躺在病床上、頭髮掉光光,也是天堂?

究竟有沒有愛情能夠支 撐到失去生命的前一秒鐘?不在其位,不謀其政。沒得絕症,我們就別忘下評論。可是,他們得的絕症,會不會怪了一點?根據衛生署的調查,台灣十大絕症,理當 由肺癌、肝癌、或子宮頸癌開始,小說或電視劇裡的熱門癌症如血癌、骨癌則永遠敬陪末座,更別提像是「再生性貧血」、「紅斑狼瘡」這種罕見絕症,若不是編劇 (或作者)有心製造特別,怕是我們一輩子都不會知道。

為什麼同樣是用來表現「愛至死不渝」的絕症,偏偏要撿這些想得也得不來的?如果男主 角得的是肺癌呢?我們立刻聯想到,也許他是個大煙剷,拿來演文弱的愛情劇,不適合;如果得的是肝癌呢?立刻延伸聯想到了個大酒鬼,更不合用;如果是攝護腺 癌呢?總之就是在命根子附近動刀,一個弄不好,變成大太監,怎麼演文藝愛情片?再看女主角,如果女主角得的是子宮頸癌呢?根據我們半調子的醫學常識,得子 宮頸癌的女性,多半有較頻繁且複雜的性生活,這樣的形象,實在不適合當個獲得珍貴愛情的女主角。

再說那些比愛情還難得到的稀奇古怪絕症, 難道想當明星要經過身材外貌甄選,想得絕症也有狗眼看人低?台灣的尿毒症患者人數佔全世界第二名,尿毒症行不行?不行,扯上尿太髒,且尿毒症病人大多肥 胖,不合格!小腦萎縮症行不行?不行,患病的患者會連話都說不清楚,怎麼談情說愛?怎麼握著另一半的手說:「我愛你 / 妳至死不渝」?

(編按:日劇《一公升眼淚》女主角阿也患的正是小腦萎縮症啊!)

想要得到一份至死不渝的愛情是那麼困難,我們這些好手好腳的人,成天沒頭沒腦的找,找的人心灰意冷,沒得絕症也想割腕自殺。不是有一首歌這麼唱的嗎?「全世界的女生都這樣,情願坐上鐵達尼號,連生命都不要。」你也是個為了得到一份深刻的愛情,而願意犧牲生命的人嗎?

只 是啊,那些纏綿悱惻的愛情劇,用各種疾病暗示了談情說愛的條件論。愛情當然可以至死不渝,只是我們都不是帥哥美女。鐵達尼號是人人都坐得起的嗎?究竟這艘 沉沒的大船,暗示的是愛情真偉大,還是帥哥真偉大?你看美麗人生的時候,你把自己當成坐輪椅的常盤貴子,還是推輪椅的木村拓哉?你看藍色生死戀的時候,把 自己當成是受盡虐待還得了絕症的恩熙,還是深深愛著恩熙的俊熙?你看著這些感人肺俯愛情劇的時候,你腦子裡想的是:「我也願意為愛犧牲」還是「怎麼沒有人 願意為我犧牲」?

絕症無法造就至死不渝,反倒是至死不渝本身就患有絕症,存活率只有 0.00000001。

想要得到這樣至高無上的愛情,也不是沒有可能,只是機率恰恰等於得到罕見絕症的機率那般渺茫罷了。


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




Apr 19

全方位性格大解構 Enneagram

你精力充沛,總是動力過人,因為你有很強的爭勝慾望!你喜歡接受挑戰,會把你自己的價值與成就連成一線。成就型的你會全心全意去追求一個目標,因為你相信「天下沒有不可能的事」。動力十足的你,最好做leader帶領其他人啦!

自戀、炫耀
第三型的人傾向看自己成為頗大、頗重要的,所以有一點點的自戀、自我膨脹。所以你們都會把自己最好的一面給友人看,甚至極端時,會在朋友面前撒謊,以求 「保持」自己在朋水心目中的形象。很多時,第三型真正的實力往往沒有那麼強,因為他們的表達實有一點點誇張。

害怕親密
第三型的你很害怕親密關係,不是說你們會沒有朋友,只是當關係進深的時候,你可能會因怕真面目被看見而避開、逃掉。所以,親密/好朋友關係對第三型說並不 容易建立,因為他們害怕被人看見自己的真面目,也因此很難開放自己與人坦誠交往。

第三型的你好勝心頗強,通常認為自己不能在朋友面前「認衰」,所以會表現得「很棒很棒」的,但世界上沒有一個人是十全十美的完人啊!當能容許自己以真面目視人,你的生活將很快樂!

心情highhigh時
健康的第三型是有自信的,並且覺得自己很棒,通常總有某些很傑出的地方令別人羨慕、欽佩。所以在朋友堆中,他們會是「明星」,得到很多的注意及羨慕的眼 光。這些也正正是成就型在人際關係裡所需要的。

情緒downdown時
在心底裡,第三型的人的競爭性、處處想超越別人:所以身邊的朋友都會成為他們的比較對象,且有可能看不起比下去的人。亦因為他們很著重給予別人完全卓越的 印象,所以會不斷包裝自己,滿口自跨的話,令自己顥得比真實的面貌來得強。他們真正的面目很難讓人看見。

朋友看你是
「好叻」、「好sharp」、「好串」、有時會說:「_!好叻咩!」

提升有時努力努力
走向「六仔」,會是成功的團隊領袖,有涵養,有實力,而且能適當運用策略,小心行事,會是很好的管理人員。

後退有時注意注意
會跌向「九仔」,兵敗如山倒,一蹶不振,毫無主見,自我放棄,到最後會一事無成,充滿無用感。

閱讀這篇文章的其餘部分 »


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




Apr 14

母語教學

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

[youtube lZCyx-_AFWk]


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




Mar 29

打開防火場udp 514 port

syslog server: ( ex : 192.168.0.200 )
#vi /etc/rc.conf
syslogd_flags=”-a 192.168.0.0/24:514″

syslog client:
#vi /etc/syslog.conf
*.* @192.168.0.200

PS: 請自行替換斜體黑字部份。


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書




Mar 27

3.2 VSFTP 安全與效能兼備的ftp 服務器
3.2.1 VSFTP 概述
FTP,file transfer protocol,這是檔案傳輸的通訊協議,也是一般最常用來傳
送檔案的方式。讀者在使用RedHat9 的時候,可能會感受到ftp server 有一些改
變:第一,就是ftp server 只剩下vsftp,原有的wuftp 等都沒放入 第二,就是
vsftp 從XINETD 中獨立出來,並將設定檔從/etc/vsftpd.conf 之中移到
/etc/vsftpd/vsftpd.conf。
為什麼做這樣的改變?可以想見的是vsftp 已有獨立運作的能力,不需要XINETD
來做更進一步的管控,並且類似sendmail、httpd、ssh、samba 等,將設定文件的
放入/etc 下獨立的目錄。
FTP 分為兩類,一種為PORT FTP,也就是一般的FTP 另一類是PASVFTP,分述如下

PORT FTP
這是一般形式的FTP,首先會建立控制頻道,默認值是port 21,也就是跟port
21 建立聯機,並透過此聯機下達指令。第二,由FTP server 端會建立數據傳輸頻
道,默認值為20,也就是跟port 20 建立聯機,並透過port 20 作數據的傳輸。
PASV FTP
跟PORT FTP 類似,首先會建立控制頻道,默認值是port 21,也就是跟port 21 建
立聯機,並透過此聯機下達指令。第二,會由client 端做出數據傳輸的請求,包
括數據傳輸port 的數字。
這兩者的差異為何?PORT FTP 當中的數據傳輸port 是由FTP server 指定,而
PASV FTP 的數據傳輸port 是由FTP client 決定。通常我們使用PASV FTP,是在
有防火牆的環境之下,透過client 與server 的溝通,決定數據傳輸的port。

3.2.2 範例

3.2.1. 直接啟動VSFTP 服務
這個範例是套用RedHat 的預設範例,直接啟動vsftp。
[root@relay vsftpd]# /sbin/service vsftpd start
Starting vsftpd for vsftpd: [ OK ]

3.2.2. 更換port 提供服務:將預設的port 21 更換為2121
為了安全,或是以port 來區隔不同的ftp 服務,我們可能會將ftp port 改為21
之外的port,那麼,可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
listen_port=2121
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

3.2.3. 特定使用者peter、john 不得變更目錄
使用者的預設目錄為/home/username,若是我們不希望使用者在ftp 時能夠
切換到上一層目錄/home,則可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
將底下三行
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
改為
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
Step2. 新增一個檔案: /etc/vsftpd/chroot_list
內容增加兩行:
peter
john
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
若是peter 欲切換到根目錄以外的目錄,則會出現以下警告:
ftp> cd /home
550 Failed to change directory.

3.2.4. 取消anonymous 登入
若是讀者的主機不希望使用者匿名登入,則可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf

anonymous_enable=YES
改為
anonymous_enable=NO
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

3.2.5. 安排歡迎話語
若是我們希望使用者在登入時,能夠看到歡迎話語,可能包括對該主機的說明,或
是目錄的介紹,可參考以下步驟。
首先確定在/etc/vsftpd/vsftpd.conf 當中是否有底下這一行
dirmessage_enable=YES
RedHat9 的默認值是有上面這行的。
接著,在各目錄之中,新增名為.message 的檔案,再這邊假設有一個使用者
test1,且此使用者的根目錄下有個目錄名為abc,那首先我們在/home/test1
之下新增.message,內容如下:
Hello~ Welcome to the home directory
This is for test only…
接著,在/home/test1/abc 的目錄下新增.message,內容如下:
Welcome to abc’s directory
This is subdir…
那麼,當使用者test1 登入時,會看到以下訊息:
230- Hello~ Welcome to the home directory
230-
230- This is for test only…
230-
若是切換到abc 的目錄,則會出現以下訊息:
250- Welcome to abc’s directory
250-
250- This is subdir …

3.2.6. 對於每一個聯機,以獨立的process 來運作
一般啟動vsftp 時,我們只會看到一個名為vsftpd 的process 在運作,但若是讀
者希望每一個聯機,都能以獨立的process 來呈現,則可執行以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
setproctitle_enable=YES
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
使用ps -ef 的指令,可以看告不同使用者聯機的情形,如下圖所示:
[root@home vsftpd]# ps -ef|grep ftp
root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER
nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1:
IDLE
nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2:
IDLE
root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp
[root@home vsftpd]#

3.2.7. 限制傳輸檔案的速度:
本機的使用者最高速度為200KBytes/s,匿名登入者所能使用的最高速度為
50KBytes/s
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下兩行
anon_max_rate=50000
local_max_rate=200000
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
在這邊速度的單位為Bytes/s,其中anon_max_rate 所限制的是匿名登入的
使用者,而local_max_rate 所限制的是本機的使用者。VSFTPD 對於速度的限
制,範圍大概在80%到120%之間,也就是我們限制最高速度為100KBytes/s,
但實際的速度可能在80KBytes/s 到120KBytes/s 之間,當然,若是頻寬不足
時,數值會低於此限制。

3.2.8. 針對不同的使用者限制不同的速度:
假設test1 所能使用的最高速度為250KBytes/s,test2 所能使用的最高速度為
500KBytes/s。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
user_config_dir=/etc/vsftpd/userconf
Step2. 新增一個目錄:/etc/vsftpd/userconf
mkdir /etc/vsftpd/userconf
Step3. 在/etc/vsftpd/userconf 之下新增一個名為test1 的檔案
內容增加一行:
local_max_rate=250000
Step4. 在/etc/vsftpd/userconf 之下新增一個名為test2 的檔案
內容增加一行:
local_max_rate=500000
Step5. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

3.2.9-1. 建置一個防火牆下的ftp server,使用PORT FTP mode:
預設的ftp port:21 以及ftp data port:20
啟動VSFTPD 之後執行以下兩行指令,只允許port 21 以及port 20 開放,其它關
閉。
iptables -A INPUT -p tcp -m multiport –dport 21,20 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT –reject-with tcp-reset

3.2.9-2. 建置一個防火牆下的ftp server,使用PORT FTP mode:
ftp port:2121 以及ftp data port:2020
Step1. 執行以下兩行指令,只允許port 2121 以及port 2020 開放,其它關閉。

iptables -A INPUT -p tcp -m multiport –dport 2121,2020 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT –reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下兩行
listen_port=2121
ftp_data_port=2020
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
在這邊要注意,8、9 兩個例子中,ftp client(如cuteftp)的聯機方式不能夠選
擇passive mode,否則無法建立數據的聯機。也就是讀者可以連上ftp
server,但是執行ls、get 等等的指令時,便無法運作。

3.2.10. 建置一個防火牆下的ftp server,使用PASS FTP mode:
ftp port:2121 以及ftp data port 從9981 到9986。
Step1. 執行以下兩行指令,只允許port 2121 以及port 9981-9990 開放,其它關
閉。
iptables -A INPUT -p tcp -m multiport –dport
2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT –reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下四行
listen_port=2121
pasv_enable=YES
pasv_min_port=9981
pasv_max_port=9986
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
在這邊要注意,在10 這個例子中,ftp client(如cuteftp)的聯機方式必須選擇
passive mode,否則無法建立數據的聯機。也就是讀者可以連上ftp server,但是
執行ls,get 等等的指令時,便無法運作。

3.2.11. 將vsftpd 與TCP_wrapper 結合
若是讀者希望直接在/etc/hosts.allow 之中定義允許或是拒絕的來源地址,可執
行以下步驟。這是簡易的防火牆設定。
Step1. 確定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的設定為YES,如下圖

示:
tcp_wrappers=YES
這是RedHat9 的默認值,基本上不需修改。
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
Step3. 設定/etc/hosts.allow,譬如提供111.22.33.4 以及10.1.1.1 到10.1.1.
254 連
線,則可做下圖之設定:
vsftpd : 111.22.33.4 10.1.1. : allow
ALL : ALL : DENY

3.2.12. 將vsftpd 併入XINETD
若是讀者希望將vsftpd 併入XINETD 之中,也就是7.x 版的預設設定,那
麼讀者可以執行以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf

listen=YES
改為
listen=NO
Step2. 新增一個檔案: /etc/xinetd.d/vsftpd
內容如下:
service vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
Step3. 重新啟動xinetd
[root@home vsftpd]# /sbin/service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]

3.2.3 設定檔說明
在範例中,有些省略的設定可以在這邊找到,譬如聯機的總數、同一個位址的聯機
數、顯示檔案擁有者的名稱等等,希望讀者細讀後,可以做出最適合自己的設定。

格式
vsftpd.conf 的內容非常單純,每一行即為一項設定。若是空白行或是開頭為#的
一行,將會被忽略。內容的格式只有一種,如下所示
option=value
要注意的是,等號兩邊不能加空白,不然是不正確的設定。
===ascii 設定=====================
ascii_download_enable
管控是否可用ASCII 模式下載。默認值為NO。
ascii_upload_enable
管控是否可用ASCII 模式上傳。默認值為NO。
===個別使用者設定===================
chroot_list_enable
如果啟動這項功能,則所有的本機使用者登入均可進到根目錄之外的數據夾,除了

在/etc/vsftpd.chroot_list 之中的使用者之外。默認值為NO。
userlist_enable
用法:YES/NO
若是啟動此功能,則會讀取/etc/vsftpd.user_list 當中的使用者名稱。此項功能
可以在詢問密碼前就出現失敗訊息,而不需要檢驗密碼的程序。默認值為關閉。
userlist_deny
用法:YES/NO
這個選項只有在userlist_enable 啟動時才會被檢驗。如果將這個選項設為YES,
則在/etc/vsftpd.user_list 中的使用者將無法登入 若設為NO , 則只有在
/etc/vsftpd.user_list 中的使用者才能登入。而且此項功能可以在詢問密碼前就
出現錯誤訊息,而不需要檢驗密碼的程序。
user_config_dir
定義個別使用者設定文件所在的目錄,例如定義
user_config_dir=/etc/vsftpd/userconf,且主機上有使用者test1,test2,那我
們可以在user_config_dir 的目錄新增文件名為test1 以及test2。若是test1 登
入,則會讀取user_config_dir 下的test1 這個檔案內的設定。默認值為無。
===歡迎語設定=====================
dirmessage_enable
如果啟動這個選項,使用者第一次進入一個目錄時,會檢查該目錄下是否有.
message這個檔案,若是有,則會出現此檔案的內容,通常這個檔案會放置歡迎話
語,或是對該目錄的說明。默認值為開啟。
banner_file
當使用者登入時,會顯示此設定所在的檔案內容,通常為歡迎話語或是說明。默認
值為無。
ftpd_banner
這邊可定義歡迎話語的字符串,相較於banner_file 是檔案的形式,而
ftpd_banner 是字串的格式。預設為無。
===特殊安全設定====================
chroot_local_user
如果設定為YES,那麼所有的本機的使用者都可以切換到根目錄以外的數據夾。預
設值為NO。
hide_ids
如果啟動這項功能,所有檔案的擁有者與群組都為ftp,也就是使用者登入使用
ls -al之類的指令,所看到的檔案擁有者跟群組均為ftp。默認值為關閉。
ls_recurse_enable
若是啟動此功能,則允許登入者使用ls -R 這個指令。默認值為NO。
write_enable
用法:YES/NO
這個選項可以控制FTP 的指令是否允許更改file system,譬如STOR、DELE、
RNFR、RNTO、MKD、RMD、APPE 以及SITE。預設是關閉。
setproctitle_enable
用法:YES/NO
啟動這項功能,vsftpd 會將所有聯機的狀況已不同的process 呈現出來,換句話
說,使用ps -ef 這類的指令就可以看到聯機的狀態。默認值為關閉。
tcp_wrappers
用法:YES/NO
如果啟動,則會將vsftpd 與tcp wrapper 結合,也就是可以在/etc/hosts.
allow 與/etc/hosts.deny 中定義可聯機或是拒絕的來源地址。
pam_service_name
這邊定義PAM 所使用的名稱,預設為vsftpd。
secure_chroot_dir
這個選項必須指定一個空的數據夾且任何登入者都不能有寫入的權限,當vsftpd
不需要file system 的權限時,就會將使用者限制在此數據夾中。默認值為
/usr/share/empty

===紀錄文件設定=====================
xferlog_enable
用法:YES/NO
如果啟動,上傳與下載的信息將被完整紀錄在底下xferlog_file 所定義的檔案中
。預設為開啟。
xferlog_file
這個選項可設定紀錄文件所在的位置,默認值為/var/log/vsftpd.log。
xferlog_std_format
如果啟動,則紀錄文件將會寫為xferlog 的標準格式,如同wu-ftpd 一般。默認值
為關閉。

===逾時設定======================
accept_timeout
接受建立聯機的逾時設定,單位為秒。默認值為60。
connect_timeout
響應PORT 方式的數據聯機的逾時設定,單位為秒。默認值為60。
data_connection_timeout
建立數據聯機的逾時設定。默認值為300 秒。
idle_session_timeout
發呆的逾時設定,若是超出這時間沒有數據的傳送或是指令的輸入,則會強迫斷線
,單位為秒。默認值為300。
===速率限制======================
anon_max_rate
匿名登入所能使用的最大傳輸速度,單位為每秒多少bytes,0 表示不限速度。默
認值為0。
local_max_rate
本機使用者所能使用的最大傳輸速度,單位為每秒多少bytes,0 表示不限速度。
預設值為0。
===新增檔案權限設定==================
anon_umask
匿名登入者新增檔案時的umask 數值。默認值為077。
file_open_mode
上傳檔案的權限,與chmod 所使用的數值相同。默認值為0666。
local_umask
本機登入者新增檔案時的umask 數值。默認值為077。
===port 設定======================
connect_from_port_20
用法:YES/NO
若設為YES,則強迫ftp-data 的數據傳送使用port 20。默認值為YES。
ftp_data_port
設定ftp 數據聯機所使用的port。默認值為20。
listen_port
FTP server 所使用的port。默認值為21。
pasv_max_port
建立資料聯機所可以使用port 範圍的上界,0 表示任意。默認值為0。
pasv_min_port
建立資料聯機所可以使用port 範圍的下界,0 表示任意。默認值為0。
===其它========================
anon_root
使用匿名登入時,所登入的目錄。默認值為無。
local_enable
用法:YES/NO
啟動此功能則允許本機使用者登入。默認值為YES。
local_root
本機使用者登入時,將被更換到定義的目錄下。默認值為無。
text_userdb_names
用法:YES/NO
當使用者登入後使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有
者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則將此功能
開啟。默認值為NO。
pasv_enable
若是設為NO,則不允許使用PASV 的模式建立數據的聯機。默認值為開啟。
===更換檔案所有權===================
chown_uploads
用法:YES/NO
若是啟動,所有匿名上傳數據的擁有者將被更換為chown_username 當中所設定的
使用者。這樣的選項對於安全及管理,是很有用的。默認值為NO。
chown_username
這裡可以定義當匿名登入者上傳檔案時,該檔案的擁有者將被置換的使用者名稱。
預設值為root。
===guest 設定=====================
guest_enable
用法:YES/NO
若是啟動這項功能,所有的非匿名登入者都視為guest。默認值為關閉。
guest_username
這裡將定義guest 的使用者名稱。默認值為ftp。
===anonymous 設定==================
anonymous_enable
用法:YES/NO
管控使否允許匿名登入,YES 為允許匿名登入,NO 為不允許。默認值為YES。
no_anon_password
若是啟動這項功能,則使用匿名登入時,不會詢問密碼。默認值為NO。
anon_mkdir_write_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許新增目錄,當然,匿名使用者必須要有對上層
目錄的寫入權。默認值為NO。
anon_other_write_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許更多於上傳與建立目錄之外的權限,譬如刪除
或是更名。默認值為NO。
anon_upload_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許上傳目錄的權限,當然,匿名使用者必須要有
對上層目錄的寫入權。默認值為NO。
anon_world_readable_only
用法:YES/NO
如果設為YES,匿名登入者會被允許下載可閱讀的檔案。默認值為YES。
ftp_username
定義匿名登入的使用者名稱。默認值為ftp。
deny_email_enable
若是啟動這項功能,則必須提供一個檔案/etc/vsftpd.banner_emails,內容為
email
address。若是使用匿名登入,則會要求輸入email address,若輸入的email
address 在此檔案內,則不允許聯機。默認值為NO。
===Standalone 選項==================
listen
用法:YES/NO
若是啟動,則vsftpd 將會以獨立運作的方式執行,若是vsftpd 獨立執行,如
RedHat9的默認值,則必須啟動 若是vsftpd 包含在xinetd 之中,則必須關閉此功
能,如RedHat8。在RedHat9 的默認值為YES。
listen_address
若是vsftpd 使用standalone 的模式,可使用這個參數定義使用哪個IP address
提供這項服務,若是主機上只有定義一個IP address,則此選項不需使用,若是有
多個IP address,可定義在哪個IP address 上提供ftp 服務。若是不設定,則所
有的IP address均會提供此服務。默認值為無。
max_clients
若是vsftpd 使用standalone 的模式,可使用這個參數定義最大的總聯機數。超過
這個數目將會拒絕聯機,0 表示不限。默認值為0。
max_per_ip
若是vsftpd 使用standalone 的模式,可使用這個參數定義每個ip address 所可
以聯機的數目。超過這個數目將會拒絕聯機,0 表示不限。默認值為0。
=============================

3.2.4 FTP 數字代碼的意義
110 重新啟動標記應答。
120 服務在多久時間內ready。
125 數據鏈路埠開啟,準備傳送。
150 文件狀態正常,開啟數據連接端口。
200 命令執行成功。
202 命令執行失敗。
211 系統狀態或是系統求助響應。
212 目錄的狀態。
213 文件的狀態。
214 求助的訊息。
215 名稱系統類型。
220 新的聯機服務ready。
221 服務的控制連接埠關閉,可以註銷。
225 數據連結開啟,但無傳輸動作。
226 關閉數據連接端口,請求的文件操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的文件操作完成。
257 顯示目前的路徑名稱。
331 用戶名稱正確,需要密碼。
332 登入時需要賬號信息。
350 請求的操作需要進一部的命令。
421 無法提供服務,關閉控制連結。
425 無法開啟數據鏈路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 命令終止:有本地的錯誤。
452 未執行命令:磁盤空間不足。
500 格式錯誤,無法識別命令。
501 參數語法錯誤。
502 命令執行失敗。
503 命令順序錯誤。
504 命令所接的參數不正確。
530 未登入。
532 儲存文件需要賬戶登入。
550 未執行請求的操作。
551 請求的命令終止,類型未知。
552 請求的文件終止,儲存位溢出。
553 未執行請求的的命令,名稱不正確。


Written by 傻仔仔

光波24書網(http://www.24reader.com/) - 免費電子書

  

光波24書網(http://www.24reader.com/) - 新到電子書

  

光波24書網(http://www.24reader.com/) - 快將推出電子書