Linux Mint 17 “Qiana” Mate筆記及安裝紀錄(虛擬機)

Linux Mint 17 “Qiana” 按照原定計畫(無正式官方資料來源、參考資訊為 List of Linux Mint releases – Wikipedia) 在五月底(昨天)推出正式版了,初期只有 Cinnamon 以及 Mate 兩種桌面環境的版本,KDE 及 xfce 桌面環境的版本還得再多等一小段時間。奇妙的是這次官網上資訊截至目前為止都還沒有更新,只有 RC released 的消息,應該是太忙還沒更新吧。

科技網站 ZDNet 日前針對 Linux Mint 17 RC(release candidate) 候選發布版本發表了一篇 Mint 17: The best Linux desktop to date 來推薦這套作業系統,由於 Linux Mint 主要發行版都是基於Ubuntu的關係,這次的版本同樣和所基於的 Ubuntu 14.04 是所謂的 LTS(long-term support) 長期支援版本,擁有五年的後續支援,所以也是公司企業可以考量使用的版本。

剛好最近有些人問到推薦的 Linux distribution,個人在 Debian GNU/Linux系列遊走至目前為止的經驗,以 Desktop 來說,Linux Mint的使用者體驗真的不錯,這邊就記錄一下 Linux Mint 17 Mate的安裝過程,因為在虛擬機上記憶體比較小一點,這邊選的是32位元的 Mate 版本,如果記憶體有到4GB或是更大的容量則建議選擇64位元版本。

繼續閱讀

Visual Studio(2012)使用nuGet管理套件,搭配版本控制系統的處理

有些不相關程式本身的東西習慣上不會送進版本控制系統

在Visual Studio裡面有個還滿好用的套件管理機制 – NuGet

透過NuGet可以很方便的安裝各種套件,如 nunit,而裝進來的套件會被放在專案目錄底下的packages資料夾,如果這個目錄沒有進版本控制系統,重新拉一份專案repository則會遇到相關檔案遺失的問題

可以透過以下步驟解決這問題

1.在Visual Studio選項裡面啟用Allow NuGet to download missing packages during build
VisualStudio2012-options- packages
(這個設定是跟著開發環境的)

2.在專案上面啟用 Enable NuGet Package Restore
VisualStudio2012-project-menu
(這個設定是跟著專案的)

然後專案的csproj, sln裡面會加上對應的設定,專案底下還會多一個.nuget資料夾,裡面會有binary的nuget以及nuget的設定,把這些東西加進專案repositry送個commit,之後build project的時候就會自動把需要的packages拉下來了

Git repository中,檔名大小寫的重新命名

Git-Logo-1788C

身為一套優秀的版本控制系統,很遺憾的是git對於檔名的處理是大小寫不分的(case-insensitive)

如果只是把program.cs改為Program.cs,用git status會看不到任何改變…

如果自己動手git mv呢?

$ git mv program.cs Program.cs
fatal: destination exists, source=program.cs, destination=Program.cs

是不是很悲劇…?

在網路上有看到一種作法:
$git mv program.cs program.css && git mv program.css Program.cs

不過這也太累了吧Orz…

後來發現加上 --force (-f)的參數就可以搞定這問題了:
$ git mv -f program.cs Program.cs

關於git mv的–force參數說明是這樣的:
Force renaming or moving of a file even if the target exists

看來只能暫時這樣處理了,用到的機會目前看起來也不是很多就是了~

台灣portsnap mirror(portsnap.tw.FreeBSD.org)好像掛了

昨天跟今早陸續試了三次

$sudo portsnap fetch
Password:
Looking up portsnap.tw.FreeBSD.org mirrors… none found.
Fetching snapshot tag from portsnap.tw.FreeBSD.org… failed.
No mirrors remaining, giving up.

$sudo portsnap fetch
Password:
Looking up portsnap.tw.FreeBSD.org mirrors… none found.
Fetching snapshot tag from portsnap.tw.FreeBSD.org… failed.
No mirrors remaining, giving up.

$sudo portsnap fetch
Password:
Looking up portsnap.tw.FreeBSD.org mirrors… none found.
Fetching snapshot tag from portsnap.tw.FreeBSD.org… failed.
No mirrors remaining, giving up.

日本有沒有呢?
繼續閱讀

用 apache, nginx, PHP架網站要注意的安全事項

在 Linux 底下,拿 apache 或 nginx + php 是架網站非常常見的組合 (LAMP/LNMP),這篇要筆記一下怎麼藏伺服器相關的版本資訊

對於開發平台來說這些 http header 資訊可以幫忙除錯,但對於開放使用者存取的服務,若非使用上的需求,建議是把相關的http header藏起來,減少資訊洩漏

圖例,用 Chrome 瀏覽器看出 Server版本為 Ubuntu 14.04 + apache2.4 + PHP 5.5.9 :
ubuntu_apache_php_header_in_chrome

本篇拿 Ubuntu/Debian based GNU/Linux 示範,開始動手之前,大家可以先用 curl 這個工具把網站的 header 撈出來,改完之後就可以比較看看結果!

命令如下,127.0.0.1 請換成自己的網址~

結果大概會長這樣:

HTTP/1.1 200 OK
Date: Wed, 30 Dec 2015 08:36:26 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8

有看出端倪了吧?

接下來講動手做,先說 http 伺服器的部分:

– nginx:
在 nginx.conf 的 http 區段(用大括號括起來的部分)裡面找到 server_tokens 這個設定並設為 off,記得拿掉前面的註解,如果找不到這行也可以自己新增:
server_tokens off;

重啟 nginx 後大功告成:

– apache:
以apache 2.4.x為例子,相關設定預設會在 apache 設定檔路徑(/etc/apache2)的 conf-enabled/security.conf 裡面,看設定檔名稱就可以顧名思義知道和安全性有些關係

如果找不到conf-enabled/security.conf 但找的到 conf-available/security.conf,表示設定檔沒被啟用,可以透過這個命令啟用:

這邊我們要改兩個設定,分別是 ServerTokens 和 ServerSignature

ServerTokens 會在每一次伺服器回應請求的時候送出,設定值分別有 Full | OS | Minimal | Minor | Major | Prod 這六個選項
從左至右分別為洩漏最多的資訊量到最少的資訊量,預設通常是 OS、建議改成 Prod,這樣就只不會顯示伺服器名稱以外的任何資訊

ServerSignature 不是在 http header 裡面的資訊,但會出現在一些apache自動產生的頁面,顯示出伺服器版本以及virtual host等資訊
預設值為 On,這邊為 Off,當 Server 產生一些錯誤或是檔案列表頁面時,就不會洩漏太多的伺服器版本資訊

重啟 apache 後大功告成:

改完之後再用curl測試一次結果會發現Server header後面版本、系統等資訊都藏好了:

HTTP/1.1 200 OK
Date: Wed, 30 Dec 2015 08:37:20 GMT
Server: Apache
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8

但上面的 php 還在,而且還看得出來是ubuntu系統,如果你有啟用一些額外的module 可能都會順便被印出來,所以接下來講 php:

php這邊要改的這個設定叫做 expose_php,這個設定會放在 php.ini 裡面、預設是 On、這邊要調成 Off
expose_php = Off

如果該選項為On,則 http header 裡面會含有一個 X-Powered-By 的資訊,除了讓大家知道你用的是php以外,還有使用到的相關模組,還有可能會因此透漏PHP以及作業系統的版本,因各個unix系統幾乎都有自己維護的套件版本,在編譯時可能會因此把作業系統及其版本資訊包進去(如 5.4.4-14+deb7u9 就透漏了他可能正在使用 Debian Wheezy (7.x)),這個資訊不關的話,Apache2的 ServerTokens 很有可能就白設了XD

改完後這邊要重啟的服務因人而異,如果是 php 搭配 nginx 可能是要重啟 php-fpm 或 php-cgi,如果是把php編成apache的module的話就是重啟apache

重啟後大功告成(自己看要重新啟動哪個服務~因人而異):

HTTP/1.1 200 OK
Date: Wed, 30 Dec 2015 08:39:05 GMT
Server: Apache
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8

恩,有沒有看到 X-Powered-By 不見了?

補充一點,php.ini 可能因為不同的  php 使用方式 (apache module / cgi / cli 等) 會有 “很多份",以 php5 為例,如果你是用 apache 的 php module,則設定檔會在 /etc/php5/apache2/,若是使用command line的php,設定檔會在/etc/php5/cli/,不確定的話 … 保險起見,可以將 /etc/php5/ 底下一層各個目錄都翻一下,每份 php.ini 都改一改 (mods-available 是放模組的就不用了)

最後補充,以上方法僅用於 “藏" 資訊,對於找工具針對特定版本伺服器的攻擊也許有點幫助,但並不能真的提升伺服器以及網頁程式本身的安全性,不能就此掉以輕心! 程式面該過濾、跳脫、阻擋的還是要做,永遠不能相信client傳過來的訊息啊~!

另外有一些像是 libapache2-mod-security2 這類的工具可以幫忙防禦一些常見攻擊或是弱點,不過設定不好的情況下也是有很大機率遇到其他狀況,要不要用就見仁見智了,我是遇過用了 mod security 之後預設設定會造成 Discuz 的上傳故障的問題 …