日本老熟妇一二三区-麻豆视频精品一区-人妻中文字幕xx-一区二区美女少妇-日本成人一级在线

  • Unix網(wǎng)絡(luò)的兩個(gè)安全問(wèn)題

    雖然已經(jīng)有許多文章對(duì)有關(guān)Unix網(wǎng)絡(luò)的安全性問(wèn)題進(jìn)行了廣泛的論述,但隨著技術(shù)的進(jìn)步和人們對(duì)安全問(wèn)題的認(rèn)識(shí)的深入,總是不斷有安全問(wèn)題被暴露出來(lái),并被加以修正。本文介紹兩個(gè)由于技術(shù)上認(rèn)識(shí)不足而造成的安全問(wèn)題,并給出解決方法。 
    關(guān)機(jī)用戶(hù)的安全問(wèn)題。 
          近年來(lái),許多文章相繼介紹了一種所謂最安全的Unix的關(guān)機(jī)用戶(hù)。其主要思想是直接在/etc/passwd文件或/etc/shadow文件中的關(guān)機(jī)用戶(hù)一行的末尾加入/etc/shutdown命令或加入/etc/haltsys命令以代替/bin/sh命令。這樣即使有人知道了關(guān)機(jī)用戶(hù)的密碼(或沒(méi)有設(shè)置關(guān)機(jī)用戶(hù)的密碼),也不能通過(guò)關(guān)機(jī)用戶(hù)進(jìn)入U(xiǎn)nix系統(tǒng),關(guān)機(jī)用戶(hù)被嚴(yán)格界定為有且僅有關(guān)機(jī)功能的超級(jí)用戶(hù)。這一關(guān)機(jī)用戶(hù)已被公認(rèn)為“最安全的關(guān)機(jī)用戶(hù)”。 
          該用戶(hù)和其他的關(guān)機(jī)方法相比安全性有所提高,特別是在單機(jī)狀態(tài)下,其安全性值得信賴(lài)。但令人遺憾的是,該關(guān)機(jī)用戶(hù)在Unix網(wǎng)絡(luò)中也存在著一定的安全隱患。這主要是由關(guān)機(jī)用戶(hù)本身的用途所造成的,首先由于網(wǎng)絡(luò)中的用戶(hù)幾乎都需要關(guān)機(jī)用戶(hù),所以關(guān)機(jī)用戶(hù)往往不設(shè)密碼或由多人同時(shí)掌握密碼;另一方面要關(guān)閉Unix系統(tǒng)就必須使關(guān)機(jī)用戶(hù)具有超級(jí)用戶(hù)的權(quán)限。這樣,雖然不能用DEL鍵中斷或su命令等手段非法侵入U(xiǎn)nix系統(tǒng), 但利用一些網(wǎng)絡(luò)遠(yuǎn)程命令卻有可能通過(guò)關(guān)機(jī)用戶(hù)侵入U(xiǎn)nix系統(tǒng),甚至進(jìn)入超級(jí)用戶(hù)root的sh狀態(tài)。 
    1.提出問(wèn)題 
          假設(shè)計(jì)算機(jī)A中有一個(gè)關(guān)機(jī)用戶(hù)名為shutdown,其設(shè)置和權(quán)限控制按“最安全的關(guān)機(jī)用戶(hù)”的方法設(shè)定,因?yàn)橄到y(tǒng)管理員、軟件管理員、一般操作員都要使用該用戶(hù), 故而未對(duì)其設(shè)置密碼。設(shè)計(jì)算機(jī)A的IP地址為129.15.21.77。 
          此時(shí)如果想從另一臺(tái)計(jì)算機(jī)(假設(shè)為計(jì)算機(jī)B)中向計(jì)算機(jī)A發(fā)起攻擊,則利用Unix系統(tǒng)網(wǎng)絡(luò)遠(yuǎn)程命令, 通過(guò)計(jì)算機(jī)A的“最安全的關(guān)機(jī)用戶(hù)”:shutdown即可達(dá)到目的。首先在計(jì)算機(jī)B中的/etc/hosts文件中加入如下代碼: 
    129.15.21.77 hostshut 
    然后在計(jì)算機(jī)B中進(jìn)入任何一個(gè)普通用戶(hù),鍵入以下命令: 
    rcmd hostshut -l shutdown vi /etc/passwd 
    或 rcmd hostshut -l shutdown vi /etc/shadow 
          這樣,該普通計(jì)算機(jī)用戶(hù)已在計(jì)算機(jī)B中用vi命令打開(kāi)了計(jì)算機(jī)A中包括root超級(jí)用戶(hù)在內(nèi)的所有用戶(hù)的密碼文本。接下來(lái)只要改動(dòng)或刪除這些密碼,就可以輕松地用telnet、rlogin等遠(yuǎn)程命令登錄到計(jì)算機(jī)A的任何一個(gè)用戶(hù)中。如果此時(shí)闖入的是一個(gè)惡意用戶(hù), 對(duì)計(jì)算機(jī)A來(lái)說(shuō)其后果將不堪設(shè)想。 
    2.解決問(wèn)題 
          為了解決這個(gè)安全問(wèn)題,首先可以封閉inetd守護(hù)進(jìn)程中的部分遠(yuǎn)程功能,如telnet、shell、login、exec等,方法是直接用vi修改/etc/inetd.conf文件,在上述功能前添加#號(hào),然后執(zhí)行/etc/inetd命令即可。但這樣大大削弱了Unix系統(tǒng)的網(wǎng)絡(luò)功能,并可能影響到其他計(jì)算機(jī)應(yīng)用方案的實(shí)施。 
    經(jīng)過(guò)實(shí)踐,筆者發(fā)現(xiàn)了一種相當(dāng)安全的關(guān)機(jī)方法,該方法采用了輸入/輸出重定向、Unix啞終端技術(shù)和Unix定時(shí)系統(tǒng)來(lái)實(shí)現(xiàn)安全的關(guān)機(jī)。具體做法如下: 
    首先在超級(jí)用戶(hù)中輸入如下命令,使tty12終端成為啞終端: 
    #disable /dev/tty12 
    由于需要在啞終端tty12中運(yùn)行關(guān)機(jī)程序,而啞終端的窗口在原始模式下工作, 所以不能用Unix系統(tǒng)命令read進(jìn)行輸入,必須自己編寫(xiě)一個(gè)能在原始模式下實(shí)現(xiàn)輸入/輸出功能的程序。用cc -lcurses命令編譯以下源程序,并生成可執(zhí)行文件safehalt: 
    file://安全關(guān)機(jī)程序 
    #include<curses.h> 
    #include<termio.h> 
    #include<stdio.h> 
    #include<string.h> 
    main() 


    WINDOW *win; 

    char til[]=“是否現(xiàn)在關(guān)機(jī)?確認(rèn)請(qǐng)按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]=‘\0’;s1[1]=‘\0’;s1[2]=‘\0’; 
    mvwaddstr(win,5,0,til); 
    wrefresh(win); 
    read(0,&s1[0],1); 
    if(s1[0]==‘y’) 

    sprintf(sum,“%s%s”,til,s1); 
    mvwaddstr(win,5,0,sum); 
    wrefresh(win); 
    read(0,&s1[1],1); 
    if(s1[1]==‘e’) 

    sprintf(sum,“%s%s”,til,s1); 
    mvwaddstr(win,5,0,sum); 
    wrefresh(win); 
    read(0,&s1[2],1); 
    if(s1[2]==‘s’) 
    system(“/etc/shutdown -g0 -y”); 



    keypad(stdscr,FALSE); echo(); 
    noraw(); endwin(); 

    最后編制一個(gè)Unix的shell腳本atsh,包括以下內(nèi)容: 
    at now +1 day 
    /usr/bin/safehalt 
    執(zhí)行一次atsh腳本程序后,該程序以后會(huì)自動(dòng)執(zhí)行。 
          這樣每天在tty12屏幕上都會(huì)自動(dòng)運(yùn)行一個(gè)關(guān)機(jī)程序,當(dāng)輸入yes后,機(jī)器將被關(guān)閉,當(dāng)然也可以在程序中設(shè)置關(guān)機(jī)密碼。該方法徹底排除了由關(guān)機(jī)用戶(hù)引起的安全性問(wèn)題。 
    自動(dòng)傳輸數(shù)據(jù)的安全問(wèn)題 
          在Unix系統(tǒng)中自動(dòng)批量發(fā)送數(shù)據(jù)文件的方法主要有兩種:一種方法是在用戶(hù)的宿主目錄下增加.netrc文件, 并在文件中加入遠(yuǎn)程機(jī)器的host名、用戶(hù)名和密碼,然后在建有.netrc文件的用戶(hù)登錄后用ftp自動(dòng)批量發(fā)送文件;另一種方法是用Unix的shell編寫(xiě)一個(gè)批處理的腳本文件, 以執(zhí)行該腳本文件來(lái)自動(dòng)批量發(fā)送數(shù)據(jù)。上述兩種方法雖然都可以實(shí)現(xiàn)自動(dòng)批量發(fā)送數(shù)據(jù)文件的目的,但卻存在一些安全隱患。這兩種方法都使用了純文本文件的方式來(lái)存放遠(yuǎn)程機(jī)器的host名、IP地址、用戶(hù)名和密碼,因此只要用簡(jiǎn)單的Unix命令如cat、vi、more等就可以對(duì)遠(yuǎn)程機(jī)器的主要秘密一覽無(wú)遺。 
          為增加安全性,必須對(duì)這些秘密信息進(jìn)行隱藏和加密。筆者用C語(yǔ)言程序的二進(jìn)制代碼封裝遠(yuǎn)程機(jī)器的IP地址、host名、用戶(hù)名和密碼以增加其安全性。在用C語(yǔ)言進(jìn)行編程封裝時(shí),注意不能在程序中把遠(yuǎn)程機(jī)器的IP地址、host名、用戶(hù)名和密碼等重要信息直接賦值給字符串變量。如果直接賦值給字符串變量,就很容易被人用Unix命令strings、hd和DOS操作系統(tǒng)的常用工具pctools從C程序的二進(jìn)制代碼中找到上述重要信息。還要注意不能在程序執(zhí)行過(guò)程中產(chǎn)生帶有上述遠(yuǎn)程機(jī)器重要信息的中間文件。如果出現(xiàn)這些中間文件,雖然可以在程序結(jié)束前刪除它們,但遇到發(fā)送的數(shù)據(jù)文件數(shù)量多時(shí)間長(zhǎng)時(shí), 這些中間文件就有可能被調(diào)看而泄密,所以最好不要在程序中產(chǎn)生中間文件。 
          下面這個(gè)簡(jiǎn)短的程序例子是從本地機(jī)器的超級(jí)用戶(hù)中把數(shù)據(jù)文件發(fā)送到另一臺(tái)機(jī)器的超級(jí)用戶(hù)中, 可以實(shí)現(xiàn)多個(gè)文件的連續(xù)自動(dòng)批量發(fā)送。盡管該程序使用了超級(jí)用戶(hù)進(jìn)行數(shù)據(jù)發(fā)送,但由于編程時(shí)進(jìn)行了巧妙的設(shè)計(jì),所以當(dāng)它被編譯成可執(zhí)行代碼后,很難從這些二進(jìn)制代碼中發(fā)現(xiàn)有關(guān)本地計(jì)算機(jī)和遠(yuǎn)程計(jì)算機(jī)的安全方面的重要信息。同時(shí),該程序采用了管道通信方法從而在執(zhí)行過(guò)程中不會(huì)產(chǎn)生任何中間文件,安全性相對(duì)較高。實(shí)現(xiàn)代碼如下: 
    file://安全發(fā)送數(shù)據(jù) 
    #include<stdio.h> 
    #include<string.h> 
    main(int argc,char *argv[]) 

    int i,u1,u2,u3,u4; 
    float ip1,ip2; 
    char pw[10]=“”,us[5]=“”,ftpn[4]=“”; 
    char ftpcmd[500]=“”,runl[10]=“”; 
    char ftpprt[256]=“”; 
    FILE *fftp; 
    if(argc>1) 

    us[0]=‘u’;us[1]=‘s’;us[2]=‘e’;us[3]=‘r’; 
    u1=‘r’;u2=‘o’;u3=‘o’;u4=‘t’; 
    pw[0]=‘5’;pw[1]=‘1’;pw[2]=‘2’; 
    pw[3]=‘7’;pw[4]=‘3’; 
    pw[5]=‘7’;pw[6]=‘4’; 
    ftpn[0]=‘f’;ftpn[1]=‘t’;ftpn[2]=‘p’; 
    ip1=106.73;ip2=168.13; 
    printf(“\f 從本機(jī)數(shù)據(jù):\n”); 
    for(i=1;i<argc;i++) 

    sprintf(runl,“l(fā) %s”,argv[i]); 
    system(runl); 

    sprintf(ftpcmd,“%s%s -n -i %.2f.%.2f < 
    sprintf(ftpcmd,“%s%s %c%c%c%c %s \n”,ftpcmd,us,u1,u2,u3,u4,pw); 
    sprintf(ftpcmd,“%scd /usr/tmp \n”,ftpcmd); 
    for(i=1;i<argc;i++) 

    sprintf(ftpcmd,“%sput %s \n”,ftpcmd,argv[i]); 
    sprintf(ftpcmd,“%sls %s \n”,ftpcmd,argv[i]); 


    sprintf(ftpcmd,“%sCMD\n”,ftpcmd); 

    printf(“\n正在發(fā)送……\n”); 

    fftp=popen(ftpcmd,“r”); 

    i=0; 

    while(fgets(ftpprt,256,fftp)!=NULL) 



    i++; 

    if(i>0) 

    printf(“%s”,ftpprt); 



    pclose(fftp); 






     
     
    網(wǎng)站首頁(yè)  |  關(guān)于我們  |  聯(lián)系我們  |  廣告服務(wù)  |  版權(quán)隱私  |  友情鏈接  |  站點(diǎn)導(dǎo)航