歡迎您光臨本站 註冊首頁

Linux系統安全加固(一)

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

Linux系統安全加固(一)

去年8月,某所網站遭黑客攻擊癱瘓雖然港交所隨後及時啟用備用系統,但還是致使7支股票1支債卷被迫停牌,次日再次遭受攻擊而癱瘓;在去年年底繼CSDN信息安全出現之後,網上更是傳出包括人人網等多家公司的用戶被公開,日益凸顯的網路安全事件說明了目前基礎網路還面臨著諸多威脅,木馬殭屍網路終端惡意軟體, 跨境化網路攻擊都是直接威脅.因此,確保系統安全變得尤為重要,接下來在具體介紹Linux系統的安全性之前,首先介紹一些信息安全的基礎知識,這些基礎知識看似枯燥,但對於今後加固Linux系統,保證系統安全運行尤為重要. 一、Linux的安全機制 近年來,Linux系統由於其出色的性能和穩定性、開放源代碼的靈活性和可擴展性,以及較低廉的成本,而受到計算機工業界的廣泛關注和應用.在安全性方面,Linux內核提供了經典的Unix自主訪問控制(root用戶、用戶ID安全機制), 以及部分支持了POSIX.1e標準草案中的Capabilities安全機制.自主訪問控制(Discretionary Access Control,DAC)是指主體對客體的訪問許可權是由客體的屬主或超級用戶決定的,此許可權一旦確定,將作為以後判斷主體對客體是否有及有什麼許可權的惟一依據.只有客體的屬主或超級用戶才有權更改這些許可權.傳統Linux系統提供DAC支持,客體在Linux系統當中主要是指文件、目錄等系統資源,主體是指訪問這些資源的用戶或進程.控制粒度為客體的擁有者、屬組和其他人.下面就這樣模型的三個要素,即客體(文件)、主體(文件)和訪問許可權一一介紹. 1.文件系統及訪問許可權 Linux為每個文件都分配了一個文件所有者,稱為文件主,並賦予文件主惟一的註冊名.對文件的控制取決於文件主或超級用戶(root).文件或目錄的創建者對所創建的文件或目錄擁有特別使用權,文件的所有關係是可以改變的,文件或目錄的所有權可以轉讓給其它用戶,但只有文件主或root用戶才有權改變文件的所有關係. 文件的所有權標誌是用戶ID(UID).chown命今可以更改某個文件或目錄的所有權.例如,超級用戶把自己的一個文件拷貝給用戶cg,為了讓用戶cg能夠存取這個文件,超級用戶(root)應該把這個文件的屬主設為cg,否則,用戶cg就無法存取這個文件. chown命令的語法格式如下: chown [cfhvR] 用戶 或 組 [文件1] [文件2].... 用戶可以是用戶名或用戶ID.文件是以空格分開的、要改變許可權的文件列表,可以用通配符表示文件名.如果改變了文件或目錄的所有權,原文件主將不再擁有該文件或目錄的許可權.系統管理員經常使用chown命令,在將文件拷貝到另一個用戶的目錄下以後,讓用戶擁有使用該文件的許可權. 在Linux下,每個文件又同時屬於一個用戶組.當創建一個文件或目錄時,系統就會賦予它一個用戶組關係,用戶組的所有成員都可以使用此文件或目錄.文件用戶組關係的標誌是GID.文件的GID只能由文件主或超級用戶(root)來修改.chgrp命令可以改變文件或目錄的擁有者或所屬群組,其語法格式如下: chgrp [cfhRv] group文件名或目錄 其中,group是用戶組ID;文件名是以空格分開的,它支持通配符. Linux系統中的每個文件和目錄都有訪問許可許可權,用它來確定誰可以通過何種方式對文件和目錄進行訪問及操作.訪問許可權規定三種不同類型的用戶,即文件主(owner)、同組用戶(group)、可以訪問系統的其它用戶(others).訪問許可權規定三種訪問文件或目錄的方式,即讀 (r)、寫 (w)、可執行 (x). 對於文件,讀許可權(r)表示只允許指定用戶讀其內容,而禁止對其做任何的更改操作.將所訪問的文件內容作為輸入的命令需要有讀的許可權,例如命令more、head、cat等.寫許可權(w)表示允許指定用戶打開並修改文件,例如命令cp、vi、mv等.執行許可權(x)允許指定用戶將該文件作為一個程序執行.可以使用“ls -l”查看一個文件的詳細屬性. # ls -l /etc/passwd -rw-r--r-- 1 root root 1606 Aug 25 20:10 /etc/passwd 對於目錄,讀許可權(r)可以列出存儲在該目錄下的文件,即讀目錄內容列表.這一許可權允許Shell使用文件擴展名字元列出相匹配的文件名.寫許可權(w)表示允許從目錄中刪除或添加新的文件,通常只有目錄主才有寫許可權.執行許可權(x)允許在目錄中查找,並能用cd命令將工作目錄改到該目錄.使用“ls - ld”命令可以查看一個目錄的詳細屬性. # ls -ld /var drwxr-xr-x 14 root root 360 Aug 25 20:30 /var 二、用戶和賬號管理 Linux是一個多用戶系統,因此對用戶的管理是系統管理的基本組成部分.安裝Linux的用戶很可能就是該系統的管理員,也就是許可權最高的root.通過對用戶的管理,分清了用戶之間的責、權、利,保證了系統安全.對於如何添加和刪除一個用戶等常規的管理,這裡就不再贅述了,下面重點介紹一下同用戶管理關係密切的幾個配置文件. 1. /etc/passwd文件 用“ls -l”命令可以看到該文件屬主是root用戶,只有root用戶能對該文件進行寫操作,其它用戶只能進行讀的操作. /etc/passwd文件當中以行為單位,每行是一個記錄保存一個用戶的信息,參數之間用冒號隔開,用cat可以查看其內容. # cat /etc/passwd at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash bin:x:1:1:bin:/bin:/bin/bash cyrus:x:96:12:User for cyrus-imapd:/usr/lib/cyrus:/bin/bash daemon:x:2:2:Daemon:/sbin:/bin/bash dhcpd:x:102:65534:DHCP server daemon:/var/lib/dhcp:/bin/false ftp:x:40:49:FTP account:/srv/ftp:/bin/bash games:x:12:100:Games account:/var/games:/bin/bash gdm:x:50:106:Gnome Display Manager daemon:/var/lib/gdm:/bin/false sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin notes:x:500:500::/home/notes:/bin/bash .................... 上面代碼 第一列是用戶名; 第二列是用戶的密碼; 第三列是用戶的數字ID,即用戶的UID; 第四列是用戶的主組的ID,即用戶的GID; 第五列是用戶的全名,或者是註釋; 第六列是用戶主目錄的位置,這個目錄通常位於/home目錄下, 目錄名與用戶ID 相同;第七列是用戶的默認控制台Shell. 注意,在上面的文件當中,所有用戶的Password列是一個“x”,但這並不是說用戶的密碼是x .這是早期的Unix系統密碼是以一個強度比較弱的加密手段將密碼加密后, 以文本的形式存儲在這個文件中.現在已經很少有人再這樣做了.Linux系統採取的解決的方法是,在/etc/passwd文件中存放密碼的位置只是存放一個“x”,而經過加密的密碼存放於/etc/shadow文件中.這項技術通過將用戶信息與密碼數據分離而提高了安全性.並且採用了強度更高的加密演算法來保存密碼.一個映像密碼條目的樣例如下所示: # cat /etc/shadow at:!:15200:0:99999:7::: bin:*:15200:::::: cyrus:!:15200:0:99999:7::: daemon:*:15200:::::: dhcpd:!:15200:0:99999:7::: ftp:*:15200:::::: ....... news:*:15200:::::: nobody:*:15200:::::: ntp:!:15200:0:99999:7::: postfix:!:15200:0:99999:7::: root:$2a$05$KXPwlTHjhgw4w0nY07zHx.6RlOpdmudzlRh6LfUp2tvjwyGglHP5y:15200:::::: sshd:!:15200:0:99999:7::: 2./etc/shadow 文件 /etc/shadow的格式與/etc/passwd類似,由若干個欄位組成,欄位之間用“:” 隔開,這些欄位格式如下:登錄名:加密口令:一次修改時間:最小時間間隔:最大時間間隔:警告時間;不活動時間:失效時間:標誌每個欄位含義如下: ◆登錄名是與/etc/passwd文件中的登錄名相一致的用戶賬號. ◆ 口令欄位存放的是加密后的用戶口令字.如果為空,則對應用戶沒有口令,登錄時不需要口令; ◆ 一次修改時間表示的是從某個時刻起,到用戶一次修改口令時的天數.時間起點對不同的系統可能不一樣. ◆ 最小時間間隔指的是兩次修改口令之間所需的最小天數. ◆ 最大時間間隔指的是口令保持有效的最大天數. ◆警告時間欄位表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數. ◆ 不活動時間表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數. ◆ 失效時間欄位給出的是一個絕對的天數,如果使用了這個欄位,那麼就給出相應賬號的生存期.期滿后,該賬號就不再是一個合法的賬號,也就不能再用來登錄了. 3.系統審計 Linux的日誌文件用來記錄整個操作系統使用狀況,他們是黑客攻擊的重點目標,作為一個Linux網路系統管理員要充分用好以下幾個日誌文件. ◆ /var/log/lastlog文件 記錄進入系統的用戶信息,包括登錄的時間、登錄是否成功等信息.這樣用戶登錄后只要用lastlog命令查看一下/var/log/lastlog文件中記錄的所用賬號的登錄時間,再與自己的用機記錄對比一下就可以發現該賬號是否被黑客盜用. 可以用以下命令查看其空間佔用情況
#du -h /var/log/lastlog 有時候需要清空,使用以下命令 #cat /dev/null >; /var/log/lastlog ◆ /var/log/secure文件 記錄系統自開通以來所有用戶的登錄時間和地點,可以給系統管理員提供更多的參考. ◆ /var/log/wtmp文件 記錄當前和歷史上登錄到系統的用戶的登錄時間、地點和註銷時間等信息.用last命令可以查看,若想清除系統登錄信息,只需刪除這個文件,系統會生成新的登錄信息. 用以下命令查看 #last -f /var/log/wtmp 以上幾個文件都是由系統的klogd和syslogd守護進程進程記錄的.通常klogd用來記錄系統內核所產生的日誌信息,也就是工作在系統內核態的進程所產生的日子記錄; 而syslogd用來記錄工作在用戶態的進程的日誌信息,這些程序包括用戶進程、網路伺服器進程和多數的系統守護進程.因此,對於管理人員而言,通過及時檢查syslogd記錄的信息能夠發現絕大多數的系統異常情況. 下面介紹一下syslogd進程的記錄格式和配置方法.syslogd負責發送、記錄系統內核及工具所產生的信息.整個機制由系統調用syslog()、系統守護進程syslogd,以及配置文件/etc/syslog.conf共同組成.當系統內核及工具產生信息時,通過調用syslog(),把信息送往syslogd,它再根據/etc/syslog.conf中的配置要求,、將這些信息分別做如下處理: 記錄到系統日誌中; 輸出到系統控制台上; 轉發給指定的用戶; 通過網路轉發給其它主機上的syslogd. 通過配置syslog.conf,可以靈活地對信息的發送和保存進行控制. sys1ogd進程在系統啟動時由/etc/rc.d/rc2.d/S12syslog 啟動.如果需要手工啟動或停止syslogd,可以使用下面命令: # /etc/rc.d/init.d/syslog start | stop # cat /etc/syslog.conf # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* /var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log /etc/syslog.conf文件中的一項配置記錄由“選項”(Selector)和“動作”(Action)兩個部分組成,兩者間用Tab製表符進行分隔.而“選項” 又由一個或多個形如“類型.級別”格式的保留欄位組合而成,各保留欄位問用分號分隔. 保留欄位中的“類型” 代表信息產生的源頭,可以是如下欄位: kern 由Kernel產生的信息. user 由用戶進程產生的信息,對那些由程序或不在此列出的工具產生的信息,其預設類型都是“user”. mail 郵件系統產生的信息. daemon 系統守護進程的信息,如in.ftpd、telnetd. auth 由login、su、getty等進行身份認證時產生的信息 syslog 由syslogd內部產生的信息. lpr 行列印spooling系統的信息. news USENET網路新聞系統的信息. uucp UUCP系統信息. cron 和at工具信息. local 0-7 保留為local使用. mark syslogd 內部產生的時間戳信息. * 為通配符,表示除mark之外的所有其它類型(此符號不可用以代表所有級別). 保留欄位中的“級別” 代表信息的重要性,可以是下面欄位: emerg 緊急,處於Panic狀態,通常應廣播到所有用戶. alert 告警,當前狀態立即進行糾正,例如系統資料庫崩潰. crit 關鍵狀態的警告. err 表示其它錯誤. warning 警告. notice 非錯誤狀態的報告,但應特別處理. info 通報信息. debug 調試程序時的信息. none 通常調試程序時用,指示帶有none級別的類型產生的信息無需送出,例如“*.debug;mail.none”表示調試時除郵件信 息外其它信息都送出. “動作”域指示信息發送的目的地,可以是如下參數: /filename 日誌文件,由絕對路徑指出的文件名,此文件事先建立. @host 遠程主機. userl,user2 指定用戶,如果指定用戶已登錄,那麼他們將收到信息. * 表示所有用戶, 已登錄的用戶都將收到信息. 下面來看一看Linux下的一個實例/etc/syslog.conf文件: .............. *.err;kern.debug;daemon.notece;mail.crit /var/adm/messages .............. 上面這行中的“action”就是大家關心的/var/adm/messages文件,輸出到它的信息源頭“selector”為*.err表 示所有的一般錯誤信息;kern.debug 表示核心產生的調試信息;daemon.notice表示守護進程的注意信息;mail.crit表示郵件系統的關鍵警告信息. 了解了syslog.conf格式之後,再來看/var/adm/messages中所記錄的日誌信息: ..... Nov l4 l 8:59:05 host sshd(pam_unix)[2l9l3]:authentication failure ; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=202.21.60.5 user=root Aug 25 1:13:01 host syslogd 1.5.1: restart. ..... 由上可以看到每行記錄都按照日期、時間、主機名、進程名、進程的PID,以及來自該進程的消息中間用空格分割.兩條記錄分別記錄了一次失敗的root登錄和一次syslogd進程的重起.系統會使用newsyslog定期檢查syslog輸出的messages 文件和maillog文件,將舊數據壓縮保存為備份文件. 4.其它日誌 除了系統登錄記錄和syslog記錄之外,在FreeBsd系統里,使用自己的記錄方式.系統每天都會自動檢查系統的安全設置, 包括對SetUID、SetGID的執行文件的檢查,其結果將輸出到/var/log/setuid.today文件中,管理員可以與/var/log/security.yesterday文件對比,尋找系統安全設置的變化. 在系統啟動的時候,就將內核的檢測信息輸出到屏幕上,這些信息可以幫助用戶分析系統中的硬體狀態.一般使用dmesg命令來查看一次啟動時輸出的這個檢測信息,這些信息被系統保存在/var/log/dmesg文件中. #cat /var/log/dmesg |more Linux version 2.6.18-92.el5 (brewbuilder@hs20-bc2-3.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-41)) #1 SMP Tue Apr 29 13:16:1 2 EDT 2008 BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009f800 (usable) BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved) BIOS-e820: 00000000000dc000 - 00000000000e4000 (reserved) BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved) ............................ 此外,各種Shell還會記錄用戶使用的命令歷史,使用用戶主目錄下的文件來記錄這些命令歷史,通常這個文件的名字為.bash-history或.history (csh)等. 本文講主介紹了Linux系統的基本安全機制、Linux系統如何對用戶和文件進行訪問許可權的設置,以及linux的日誌系統,這些都是一些基本的系統管理和安全管理的知識,希望讀者能結合系統的運維工作,從中受到啟發,更好的把工作做好.

本文出自 「李晨光原創技術博客」 博客,謝絕轉載!



[火星人 ] Linux系統安全加固(一)已經有427次圍觀

http://coctec.com/docs/linux/show-post-45812.html