由於權限限制的緣故,我們不能單純用echo與「>>」來新增/etc/hosts設定,而應該用sh -c。例如:
sudo -- sh -c "echo '10.0.0.254 mfsmaster' >> /etc/hosts"
/etc/hosts是做什麼用的? / What is /etc/hosts?
/etc/hosts 是電腦裡面設定 hostname 跟 IP配對的設定檔,跟DNS的角色很像,可是 /etc/hosts 這個可由使用者自行控制。
根據
維基百科的定義:
hosts檔案是一個用於儲存電腦網路中各節點資訊的電腦檔案。這個檔案負責將主機名對映到相應的IP位址。hosts檔案通常用於補充或取代網路中DNS的功能。和DNS不同的是,電腦的使用者可以直接對hosts檔案進行控制。
在Windows裡面,hosts的位置會在 C:\Windows\System32\drivers\etc\hosts 。在Linux裡面,hosts則是在 /etc/hosts 裡面。以Linux來說,/etc/hosts的內容大致上如下:
127.0.0.1 localhost.localdomain localhost
127.0.1.1 zentyal.zentyal.dlll.nccu.edu.tw zentyal
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
系統安全性的關鍵 / Security Issues
必須注意的是,/etc/hosts 是系統安全性一個非常關鍵的系統檔案。因為修改 /etc/hosts 可以將網路連線偷天換日、讓使用者連線到錯誤的網站。舉例來說, 我們可以在 /etc/hosts 裡面加入以下 設定:
這樣子連線到
www.google.com.tw的網站時,就會被引導到192.168.11.50這個伺服器去。當然,這個IP不是Google真的伺服器,而可能是惡意人士的釣魚網站,你可能就會在未查覺的情況下將帳號密碼輸入到別人的電腦裡面了。
正因為如此, /etc/hosts 是系統安全性的一大關鍵,所以一般人是無法修改這個檔案。在Linux當中,我們必須要以root的身份才能做修改,但是如果要用bash script腳本檔的形式來自動新增 /etc/hosts 的設定,那就得用特殊的方式來設定了。
如何用腳本檔新增設定? / How to add configuration to /etc/hosts by script?
一般網路上在教的方法,都是用echo搭配 >> 來運作,例如:
sudo echo "10.0.0.254 mfsmaster" >> /etc/hosts
但是會導致權限問題,而無法輸入:
-bash: /etc/hosts: Permission denied
那正式的做法應該是用sudo -- sh -c,指令是:
sudo -- sh -c "echo '10.0.0.254 mfsmaster' >> /etc/hosts"
sh的-c參數的意思是:「執行一個字串類型的指令,可以用特殊參數0來替換$1, $2等參數」,總之就是這樣子就能夠用較高權限來設定 /etc/hosts 了。
好,那我繼續來整合MooseFS跟Zentyal。
(more...)
Comments