然后在計(jì)算機(jī)B中進(jìn)入任何一個(gè)普通用戶,鍵入以下命令:
rcmd hostshut -l shutdown vi /etc/passwd
或 rcmd hostshut -l shutdown vi /etc/shadow
這樣,該普通計(jì)算機(jī)用戶已在計(jì)算機(jī)B中用vi命令打開了計(jì)算機(jī)A中包括root超級用戶在內(nèi)的所有用戶的密碼文本。接下來只要改動(dòng)或刪除這些密碼,就可以輕松地用telnet、rlogin等遠(yuǎn)程命令登錄到計(jì)算機(jī)A的任何一個(gè)用戶中。如果此時(shí)闖入的是一個(gè)惡意用戶, 對計(jì)算機(jī)A來說其后果將不堪設(shè)想。
2.解決問題
為了解決這個(gè)安全問題,首先可以封閉inetd守護(hù)進(jìn)程中的部分遠(yuǎn)程功能,如telnet、shell、login、exec等,方法是直接用vi修改/etc/inetd.conf文件,在上述功能前添加#號,然后執(zhí)行/etc/inetd命令即可。但這樣大大削弱了Unix系統(tǒng)的網(wǎng)絡(luò)功能,并可能影響到其他計(jì)算機(jī)應(yīng)用方案的實(shí)施。
經(jīng)過實(shí)踐,筆者發(fā)現(xiàn)了一種相當(dāng)安全的關(guān)機(jī)方法,該方法采用了輸入/輸出重定向、Unix啞終端技術(shù)和Unix定時(shí)系統(tǒng)來實(shí)現(xiàn)安全的關(guān)機(jī)。具體做法如下:
首先在超級用戶中輸入如下命令,使tty12終端成為啞終端:
#disable /dev/tty12
由于需要在啞終端tty12中運(yùn)行關(guān)機(jī)程序,而啞終端的窗口在原始模式下工作, 所以不能用Unix系統(tǒng)命令read進(jìn)行輸入,必須自己編寫一個(gè)能在原始模式下實(shí)現(xiàn)輸入/輸出功能的程序。用cc -lcurses命令編譯以下源程序,并生成可執(zhí)行文件safehalt:
file://安全關(guān)機(jī)程序
#include
#include
#include
#include
main()
{
WINDOW *win;
char til[]=“是否現(xiàn)在關(guān)機(jī)?確認(rèn)請按yes:”,s1[4],sum[100];
struct termio save,term;
initscr(); raw(); noecho();
keypad(stdscr,TRUE); clear();
ioctl(0,TCGETA,&term);
save=term;
win=newwin(24,80,0,0);
while(s1[0]!=‘q’)
{
s1[0]=‘