本文從用戶角度討論UNIX系統安全,闡述口令,文件保護,目錄保護, 與用戶程序有關的某些特殊特性和使用crypt命令加密,並給出一些重要的安全忠告,以幫助用戶保護自己的戶頭安全。 1.口令安全 UNIX系統中的/etc/passwd文件含有全部系統需要知道的關於每個用戶的信息(加密後的口令也可能存於/etc/shadow文件中). /etc/passwd中包含有用戶的登錄名,經過加密的口令,用戶號,用戶組號,用戶注釋,用戶主目錄和用戶所用的shell程序。 其中用戶號(UID)和用戶組號(GID)用於UNIX系統唯一地標識用戶和同組用戶及用戶的訪問權限。 /etc/passwd中存放的加密的口令用於用戶登錄時輸入的口令經計算後相比較,符合則允許登錄,否則拒絕用戶登錄。 用戶可用passwd命令修改自己的口令不能直接修改/etc/passwd中的口令部份。 一個好的口令應當至少有6個字符長,不要取用個人信息(如生日,名字,反向拼寫的登錄名,房間中可見的東西), 普通的英語單詞也不好(因為可用字典攻擊法),口令中最好有一些非字母(如數字,標點符號,控制字符等),還要好記一些,不能寫在紙上或計算機中的文件中, 選擇口令的一個好方法是將兩個不相關的詞用一個數字或控制字符相連,並截斷為8個字符.當然,如果你能記住8位亂碼自然更好. 不應使用同一個口令在不同機器中使用, 特別是在不同級別的用戶上使用同一口令,會引起全盤崩潰.用戶應定期改變口令,至少6個月要改變一次,系統管理員可以強制用戶定期做口令修改. 為防止眼明手快的人竊取口令,在輸入口令時應確認無人在身邊. 2.文件許可權 文件屬性決定了文件的被訪問權限,即誰能存取或執行該文件。 用ls -l可以列出詳細的文件信息,如: -rwxrwxrwx 1 pat cs440 70 Jul 28 21:12 zombin包括了文件許可,文件聯結數,文件所有者名,文件相關組名,文件長度,上次存取日期和文件名. 其中文件許可分為四部分: -:表示文件類型. 第一個rwx:表示文件屬主的訪問權限. 第二個rwx:表示文件同組用戶的訪問權限. 第三個rwx:表示其他用戶的訪問權限. 若某種許可被限制則相應的字母換為-. 在許可權限的執行許可位置上, 可能是其它字母,s,S,t,T.s和 S可出現在所有者和同組用戶許可模式位置上, 與特殊的許可有關,後面將要討論, t和T可出現在其他用戶的許可模式位置上,與"粘貼位"有關而與安全無關。小寫字母(x,s,t)表示執行許可為允許,負號或大寫字母(-,S或T)表示執行許可為不允許. 改變許可方式可使用chmod命令,並以新許可方式和該文件名為參數.新許可方式以3位8進制數給出,r為4,w為2,x為1.如rwxr-xr--為754. chmod也有其它方式的參數可直接對某組參數修改,在此不再多說,詳見UNIX系統的聯機手冊。 文件許可權可用於防止偶然性地重寫或刪除一個重要文件(即使是屬主自己)! 改變文件的屬主和組名可用chown和chgrp,但修改後原屬主和組員就無法修改回來了。 3.目錄許可 在UNIX系統中,目錄也是一個文件,用ls -l列出時, 目錄文件的屬性前面帶一個d,目錄許可也類似於文件許可,用ls列目錄要有讀許可, 在目錄中增刪文件要有寫許可,進入目錄或將該目錄作路徑分量時要有執行許可, 故要使用任一個文件,必須有該文件及找到該文件的路徑上所有目錄分量的相應許可 .僅當要打開一個文件時,文件的許可才開始起作用,而rm,mv只要有目錄的搜索和寫許可,不需文件的許可,這一點應注意. 4.umask命令 umask設置用戶文件和目錄的文件創建缺省屏蔽值,若將此命令放入.profile文件,就可控制該用戶後續所建文件的存取許可.umask命令與chmod命令的作用正好相反,它告訴系統在創建文件時不給予什麼存取許可. 5.設置用戶ID和同組用戶ID許可用戶ID許可(SUID)設置和同組用戶ID許可(SGID)可給予可執行的目標文件(只有可執行文件才有意義) 當一個進程執行時就被賦於4個編號,以標識該進程隸屬於誰,分別為實際和有效的UID,實際和有效的GID.有效的UID和GID一般和實際的UID和GID相同,有效的UID和GID用於系統確定該進程對於文件的存取許可.而設置可執行文件的SUID許可將改變上述情況,當設置了SUID時,進程的有效UID為該可執行文件的所有者的有效UID,而不是執行該程序的用戶的有效UID,因此,由該程序創建的都有與該程序所有者相同的存取許可. 這樣,程序的所有者將可通過程序的控制在有限的范圍內向用戶發表不允許被公眾訪問的信息.同樣,SGID是設置有效GID.用chmod u+s 文件名和chmod u-s文件名來設置和取消SUID設置. 用chmod g+s 文件名和chmod g-s文件名來設置和取消SGID設置當文件設置了SUID和SGID後chown和chgrp命令將全部取消這些許可. 6.cp mv ln和cpio命令 cp拷貝文件時,若目的文件不存在則將同時拷貝源文件的存取許可, 包括SUID和SGID許可.新拷貝的文件屬拷貝的用戶所有,故拷貝另人的文件時應小心,不要被其他用戶的SUID程序破壞自己的文件安全. mv移文件時,新移的文件存取許可與原文件相同,mv僅改變文件名.只要用戶有目錄的寫和搜索許可,就可移走該目錄中某人的SUID程序且不改變其存取許可. 若目錄許可設置不正確,則用戶的SUID程序可被移到一個他不能修改和刪除的目錄中, 將出現安全漏洞. ln為現有文件建立一個鏈,即建立一個引用同一文件的新名字. 如目的文件已經存在,則該文件被刪除而代之以新的鏈,或存在的目的文件不允許用戶寫它,則請求用戶確認是否刪除該文件,只允許在同一文件系統內建鏈.若要刪除一個SUID文件,就要確認文件的鏈接數,只有一個鏈才能確保該文件被刪除.若SUID文件已有多個鏈,一種方法是改變其存取許可方式, 將同時修改所有鏈的存取許可,也可以chmod 000 文件名,不僅取消了文件的SUID和SGID許可,而且也取消了文件的全部鏈.要想找到誰與自己的SUID程序建立了鏈,不要立刻刪除該程序,系統管理員可用ncheck命令找到該程序的其它鏈. cpio命令用於將目錄結構拷貝到一個普通文件中,而後可再用cpio命令將該普通文件轉成目錄結構.用-i選項時,cpio從標准輸入設備讀文件和目錄名表,並將其內容按檔案格式拷貝到標准輸出設備,使用-o選項時, cpio從標准輸入設備讀取先已建好的檔案,重建目錄結構.cpio命令常用以下命令做一完整的目錄系統檔案: find fromdir -printcpio -o > archive 根據檔案文件重建一個目錄結構命令為: cpio -id < archive cpio的安全約定如下: (1)檔案文件存放每個文件的信息,包括文件所有者,小組用戶, 最後修改時間最後存取時間,文件存取許可方式. *根據檔案建立的文件保持存放於檔案中的存取許可方式. *從檔案中提取的每個文件的所有者和小組用戶設置給運行 cpio -i命令的用戶,而不是設置給檔案中指出的所有者和小組用戶. *當運行cpio -i命令的用戶是root時,被建立的文件的所有者和小組用戶是檔案文件所指出的. *檔案中的SUID/SGID文件被重建時,保持SUID和SGID許可, 如果重建文件的用戶不是root,SUID/SGID許可是檔案文件指出的用戶/小組的許可. (2)現存文件與cpio檔案中的文件同名時,若現存文件比檔案中的文件更新,這些文件將不被重寫. (3)如果用修改選項U,則同名的現存的文件將被重寫. 可能會發生一件很奇怪的事:如被重寫的文件原與另一個文件建了鏈,文件被重寫後鏈並不斷開,換言之,該文件的鏈將保持,因此,該文件的所有鏈實際指向從檔案中提取出來的文件,運行cpio無條件地重寫現存文件以及改變鏈的指向. (4)cpio檔案中可含的全路徑名或父目錄名給出的文件. 7.su和newgrp命令 (1)su命令:可不必注銷戶頭而將另一用戶又登錄進入系統,作為另一用戶工作它將啟動一新的shell並將有效和實際的UID和GID設置給另一用戶. 因此必須嚴格將root口令保密. (2)newgrp命令:與su相似,用於修改當前所處的組名. 8.文件加密 crypt命令可提供給用戶以加密文件, 使用一個關鍵詞將標准輸入的信息編碼為不可讀的雜亂字符串,送到標准輸出設備.再次使用此命令,用同一關鍵詞作用於加密後的文件,可恢復文件內容. 一般來說,在文件加密後,應刪除原始文件,只留下加密後的版本,且不能忘記加密關鍵詞.在vi中一般都有加密功能用vi -x命令可編輯加密後的文件. 關於加密關鍵詞的選取規則與口令的選取規則相同. 由於crypt程序可能被做成特洛依木馬,故不宜用口令做為關鍵詞.最好在加密前用pack或compress命令對文件進行壓縮後再加密. 9.其它安全問題 (1)用戶的.profile文件 由於用戶的HOME目錄下的.profile文件在用戶登錄時就被執行.若該文件對其他人是可寫的 則系統的任何用戶都能修改此文件,使其按自己的要求工作.這樣可能使得其他用戶具有該用戶相同的權限. (2)ls -a 此命令用於列出當前目錄中的全部文件,包括文件名以.開頭的文件,查看所有文件的存取許可方式和文件所有者,任何不屬於自己但存在於自己的目錄中的文件都應懷疑和追究. (3).exrc文件 為編輯程序的初始化文件,使用編輯文件後,首先查找$HOME/.exrc文件和./.exrc文件,若該文件是在$HOME目錄中找到, 則可像.profile一樣控制它的存取方式,若在一個自己不能控制的目錄中,運行編輯程序,則可能運行其他人的.exrc文件, 或許該.exrc文件存在那裡正是為了損害他人的文件安全.為了保證所編輯文件的安全,最好不要在不屬於自己或其他人可寫的目錄中運行任何編輯程序. (4)暫存文件和目錄 在UNIX系統中暫存目錄為/tmp和/usr/tmp,對於程序員和許多系統命令都使用它們,如果用這些目錄存放暫存文件,別的用戶可能會破壞這些文件.使用暫存文件最好將文件屏蔽值定義為007, 但最保險的方法是建立自己的暫存文件和目錄:$HOME/tmp,不要將重要文件存放於公共的