問題描述
安裝好了centOS服務器,一直用Secure CRT工具通過ssh服務來遠程連接linux,很方便的進行各種操作。今天偶然嘗試了一下在非root的一般用戶下執行重啟服務器的命令,發現一般用戶是沒有權限執行重啟的,果斷使用sudo命令再次執行,終於重啟成功,卻發現Secure CRT再也連不上服務器了,郁悶不已,去網上查找各種資料總算有了一點粗淺的認識,記錄下來,也讓其他的linux beginner們能夠少走些彎路吧。
普通用戶下執行重啟命令:
shutdown -r now 或者 reboot
其中-r為重啟,改為-h則為關機;而now為馬上,也可以改成數字,單位是分鍾,也是使用shutdown命令可以實現定時關機和重啟。
以上的命令在普通用戶下是沒有權限執行的,需要sudo,有關sudo命令的配置在之前的博文中已經詳細解釋過(參見:http://www.cnblogs.com/bxljoy/p/3868494.html):
sudo shutdown -r now input passwd:
根據提示輸入該用戶的密碼,回車執行,系統開始重啟,Secure CRT的ssh連接自動斷開,然后就會無法連接了。
原因及解決方案
我經過測試發現,如果切換到root用戶下,執行上述的重啟命令是正常的,可以用ssh連接到服務器,所以問題的原因應該是普通用戶重啟之后網絡不通。
在之前的博文中我們曾經介紹過linux的網絡配置,/etc/sysconfig/network-scripts/ifcfg-eth0的配置文件中,ONBOOT=yes必須設置,這樣可以保證系統重啟時,網絡服務也會自啟動,否則會導致網絡不通。
而我們知道,重啟動網絡服務的命令為:
service network restart
而重啟服務的命令的執行必須要有root用戶的權限,所以通過一般用戶進行重啟后,執行此類重啟服務的命令都沒有足夠的權限,從而導致了服務的啟動失敗。
這也是我自己猜測,並沒有找到太詳細的資料,希望有高手能夠對這個問題進行詳細的解釋。
另外,linux重啟時,會執行/etc/rc*.d目錄下的各種服務啟動腳本,而/etc/rc*.d其實是/etc/rc.d/rc*.d的鏈接(類似於windows的快捷方式),其中,我在/etc/rc.d/rc.local文件中找到了service network restart的命令,不知道是否執行的就是這里的服務啟動命令,希望高手指正。