1. 程式人生 > >Linux主機安全筆記

Linux主機安全筆記

linux

說明: Linux主機安全筆記部分內容參考網絡上各位大神所整理的資料,部分內容不斷增加、修改。當然本人對Linux系統不是很專業,大家將計看看。


一 BIOS安全(硬件上的安全)

  • 最基本最簡單的安全配置,保障計算機硬件配置等不被別人更改.給BIOS設置密碼,防止改變啟動順序從軟盤或 光盤啟動.防止特殊的啟動盤啟動用戶的系統,進入rescue或其他模式.改變或刪除當前配置等.每一個細心的網 管每個細節都不應該忽視!

  • 禁止使用contral+alt+delete重起機器編輯/etc/inittab文件,註釋掉下面一行.

ca::ctrlaltdel:/sbin/shutdown-t3 -r now

該成:(使用#)

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

二 帳號安全

口令,系統的第一道防線,目前大多數數攻擊都是截獲口令或猜測口令等口令攻擊開始的. /etc 目錄下主要存放系統的配置文件.我們要對這個目錄下的好多文件進行修改.

  1. /etc/login.defs文件是login程序的配置文件.口令的長度和口令的有效期等可以在這裏設置.

[[email protected] ~]# vi /etc/login.defs

...

PASS_MAX_DAYS 9999 密碼被用最多天數

PASS_MIN_DAYS 0 密碼被用最少天數

PASS_MIN_LEN 5 系統默認密碼長度5,我們可以該成8或更多.

PASS_WARN_AGE 7 密碼有效期警告,超過7天將提示用戶更換新的密碼.

...

技術分享

  1. /etc/profile文件是環境變量設置文件.在此文件設置環境變量將對所有用戶生效.我們要在此文件設置自動 註銷帳戶的時間.及命令的歷史記錄數.

[[email protected]~]# vi /etc/profile

...

HOSTNAME=`/bin/hostname`

HISTSIZE=1000這裏1000代表用戶操作命令的歷史記錄.應盡量小一些.設置成0也可以,呵呵.

tmout=600添加此行,如果系統用戶在600秒(10分鐘)內不做任何操作,將自動註銷這個用戶.

...

技術分享

  1. /etc/passwd文件存放系統用戶名,用戶標識(UID),組標識(GID)等的地方.我們要在這裏找到並清除沒有設置 口令的用戶.同時還要清除一些特別帳號(因為可能會存在潛在的危險).

[[email protected] ~]# vi /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

...

wh::500:501::/home/wh:/bin/bash

仔細觀察上面的一行(wh用戶),在第二項,兩個冒號中間什麽都沒有,而上面的的用戶(如root用戶)都是x. 這表 明此用戶沒有密碼.要不添加上,要不刪掉.

技術分享

  1. 特別帳號的處理 如果不啟動用sendmail,刪除如下用戶

[[email protected]]# userdel adm

[[email protected]]# userdel lp

[[email protected]]# userdel sync

[[email protected]]# userdel shudown

[[email protected]]# userdel halt

[[email protected]]# userdel mail

如果不用Xwindows服務器.可有刪除

[[email protected]]# userdel news

[[email protected]]# userdel uucp

[[email protected]]# userdel operator

[[email protected]]# userdel games

如果不允許匿名FTP帳號登陸,可刪除

[[email protected]]# userdel gopher

[[email protected]]# userdel ftp

  1. 不使用root用戶登錄系統

  • # useradd arcky.li

  • # vim /etc/passwd

  • # 改 :arcky.li:x:500:500::/home/arcky.li:/bin/bash

# 為: arcky.li:x:0:0::/home/arcky.li:/bin/bash   -->給arcky.li增加root權限,0:0為root的uid以及gid即用戶組id與管理組id

  • # vim /etc/passed

  • # 改:root:x:0:0:root:/root:/bin/bash

# 為:root:x:0:0:root:/root:/sbin/nologin -->修改root不能登錄系統

  1. 利用lastb查看最後登錄系統的主機,檢查是否有非法用戶登錄並且檢查/var/log/btmp是否過大,如果過大說明有非法用戶登錄系統

技術分享

  1. fail2ban可以監視系統日誌,然後匹配日誌的錯誤信息執行相應的屏蔽的作用 yum install fail2ban -y安裝


三 重要文件的安全設置.

首先要了解兩個命令

1. chmod:改變文件的屬主

2. chattr:改變文件屬性

我們要做的是把重要文件的屬主改成root並給相應的權限,還有就是改變文件的屬性讓它禁止被修改

我們來統計一下重要文件:(其實,只要你不想讓其他用戶更改的文件都可以這麽做,我這裏只是為安全而選擇了

下面的文件.)

  • /etc/passwd,passwd-,passwd.OLD,group,group- 用戶,組的ID等信息文件.

  • /etc/shadow,shadow-,gshadow,gshadow- 用戶,組密碼加密文件.

  • /etc/xinetd.conf 網絡守護進程主配置文件

  • /etc/inittab 系統在啟動是會讀取這個文件裏的內容.

  • /etc/services 防止未經許可的刪除或添加服務

  • /etc/rc.d/rc.sysinit 系統啟動是需要讀取的文件,

  • /etc/rc.d/init.d/*

以一個文件為例,其它都一樣

[[email protected]]# chmod 700 passwd

[[email protected]]# chattr +i passwd

當chattr+i時就是禁止對文件進行修改,當我們要添加用戶時,就會有麻煩,因為passwd文件禁止修改寫入.所以我們還要該掉它的屬性.chattr -i.

四 防止攻擊系統安全設置

  1. 限制用戶使用系統資源,主要包括資源最大進程數,內存使用量等.這樣可以防止DOS類型攻擊.

需要編輯文件

[[email protected] /]# vi /etc/security/limits.conf

...

(這三行是添加的)

*hard core 0 禁止創建core文件

*hard rss 5000 其他用戶(除root)最多使用5M內存

*hard nproc 20 最多進程數限制在20

技術分享

註:*表示所有登陸到linux的用戶.

#End of file

[[email protected] /]# vi /etc/pam.d/login

...

在文件末尾加入下面一行

sessionrequired /lib/security/pam_limits.so

  1. 限制控制臺的訪問

[[email protected] /]# vi /etc/securetty

...

我們註釋掉

tty1

#tty2

#tty3

只留下tty1,這時,root僅可在tty1終端登錄

  1. 禁止外來ping請求.

[[email protected] /]# vi /etc/rc.d/rc.local

...

在最後加入一行

echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

技術分享

  1. 防止IP地址欺騙

[[email protected] /]# vi /etc/host.conf

加入如下幾行

orderbind,hosts

multioff

nospoofon

技術分享

5. 使用TCP_WRAPPER

在默認情況下linux系統允許所有請求,可用TCP_WRAPPER增強安全性,

在/etc/hosts.deny寫入"ALL:ALL"禁止所有請求

[[email protected] /]# vi /etc/hosts.deny

#

#hosts.deny This file describes the names of the hosts which are

# *not* allowed to use the localINET services, as decided

# by the ‘/usr/sbin/tcpd‘ server.

#

#The portmap line is redundant, but it is left to remind you that

#the new secure portmap uses hosts.deny and hosts.allow. In particular

#you should know that NFS uses portmap!

"ALL:ALL"

技術分享

把允許訪問的客戶,或服務添加到/etc/hosts.allow,冒號左邊為服務,冒號右邊為授權的機器

[[email protected] /]# vi /etc/hosts.allow

#

#hosts.allow This file describes the names of the hosts which are

# allowed to use the local INETservices, as decided

# by the ‘/usr/sbin/tcpd‘ server.

#

vsftp:211.101.46.253 註:僅如許IP地址為211.101.46.253的機器訪問FIP服務器

6. 刪減登錄信息

[[email protected] ~]# rm -f /etc/issue

[[email protected] ~]# rm -f /etc/issue.net

[[email protected] ~]# touch /etc/issue

[[email protected] ~]# touch /etc/issue.net

五 確保開啟服務的安全性

我們先來看一下自己系統開啟了多少服務.

[[email protected]~]# ps -eaf | wc -l

技術分享

我們可以通過當前的進程裏在來看一下都是什麽服務

[[email protected] ~]# ps -aux

Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 19232 1504 ? Ss Sep20 0:01 /sbin/init

root 2 0.0 0.0 0 0 ? S Sep20 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S Sep20 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S Sep20 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S Sep20 0:00 [stopper/0]

root 6 0.0 0.0 0 0 ? S Sep20 0:40 [watchdog/0]

root 7 0.0 0.0 0 0 ? S Sep20 0:00 [migration/1]

技術分享

  • 查看連接狀態,帶有LISTEN的代表正在開啟的端口,開啟的服務. [[email protected]~]# netstat -an

技術分享


  • 查看啟動服務

[[email protected]~]# cd /etc/rc.d

[[email protected]]# ls

init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit

如果你的系統是X(圖形化啟動的話)運行級別是5,那就是rc5.d,我的是rc3.d,運行級別是3.(多用戶模式)

是哪個模式就進入哪個目錄,看一下

[[email protected]]# cd rc3.d/

linux在開機時會讀取/etc/rc.d/rcX.d(根據X的運行級別)


服務進程說明,可以根據此列表來確認那些服務器是可關閉的進程:

  • amd: 自動安裝NFS(網絡文件系統)守侯進程

  • apmd: 高級電源管理

  • Arpwatch:記錄日誌並構建一個在LAN接口上看到的以太網地址和IP地址對數據庫

  • atd 運行用戶用At命令調度的任務。也在系統負荷比較低時 運行處理任務。

  • Autofs:自動安裝管理進程automount,與NFS相關,依賴於NISBootparamd:引導參數服務器,為LAN上的無盤工作站提供引導所需的相關信息

  • crond:Linux下的計劃任務

  • Dhcpd:啟動一個DHCP(動態IP地址分配)服務器

  • Gated:網關路由守候進程,使用動態的OSPF路由選擇協議

  • gpm: gpm為文本模式下的Linux程序如mc(Midnight Commander)提供了鼠標的支持。它也支持控制臺鼠標的拷貝,粘貼操作以及彈出式菜單。

  • Httpd:WEB服務器

  • Inetd:支持多種網絡服務的核心守候程序

  • Innd:Usenet新聞服務器

  • keytable 該程序的功能是轉載您在/etc/sysconfig/keyboards裏說明的鍵盤映射表,該表可以通過kbdconfig工具進行選 擇。您應該使該程序處於激活狀態。

  • ldap LDAP代表Lightweight Directory Access Protocol, 實現了目錄訪問協議的行業標準。

  • Linuxconf:允許使用本地WEB服務器作為用戶接口來配置機器

  • Lpd:打印服務器

  • Mars-nwe:mars-nwe文件和用於Novell的打印服務器

  • mcserv Midnight Commander服務進程允許遠程機器上的用戶通過MidnightCommander文件管理器操作本機文件。服務進程用PAM來驗證用戶,需要給出“用戶名/口令”以通過驗證

  • named:DNS服務器

  • netfs:安裝NFS、Samba和NetWare網絡文件系統

  • network:激活已配置網絡接口的腳本程序

  • nfs:打開NFS服務

  • nscd:nscd(Name Switch Cache daemon)服務器,用於NIS的一個支持服務,它高速緩存用戶口令和組成成員關系

  • Pcmcia pcmcia主要用於支持筆記本電腦。

  • portmap:RPC portmap管理器,與inetd類似,它管理基於RPC服務的連接

  • postgresql:一種SQL數據庫服務器random 保存和恢復系統的高質量隨機數生成器,這些隨機數是系統一些隨機行為提供的

  • routed:路由守候進程,使用動態RIP路由選擇協議

  • rstatd:一個為LAN上的其它機器收集和提供系統信息的守候程序

  • ruserd:遠程用戶定位服務,這是一個基於RPC的服務,它提供關於當前記錄到LAN上一個機器日誌中的用戶信息

  • rwalld:激活rpc.rwall服務進程,這是一項基於RPC的服務,允許用戶給每個註冊到LAN機器上的其他終端寫消息

  • rwhod:激活rwhod服務進程,它支持LAN的rwho和ruptime服務

  • sendmail:郵件服務器sendmail

  • smb:Samba文件共享/打印服務

  • snmpd:本地簡單網絡管理候進程

  • squid:激活代理服務器squid

  • syslog:一個讓系統引導時起動syslog和klogd系統日誌守候進程的腳本

  • Webmin webmin是基於web的集系統管理與網絡管理於一身的強大管理工具。利用webmin的強大功能,用戶可以通過web瀏覽器來方便地設置自己的服務器、dns、samba、nfs、本地/遠程文件系統以及許多其他的系統配置。

  • xfs:X Window字型服務器,為本地和遠程X服務器提供字型集

  • xntpd:網絡時間服務器

  • ypbind:為NIS(網絡信息系統)客戶機激活ypbind服務進程

  • yppasswdd:NIS口令服務器

  • ypserv:NIS主服務器

  • gpm:管鼠標的identd:AUTH服務,在提供用戶信息方面與finger類似

六 日誌的安全.

日誌的安全問題,也就是通過日誌來查看那些可疑的用戶登陸過機器。目前比較流行的ELK日誌分析系統,建議大家有空可以研究研究。Linux系統三個重要的日誌文件如下:

  • /var/log/wtmp 記錄每個用戶登陸和推出時間的永久記錄.

  • /var/run/utmp 記錄當前登陸到系統的每個用戶信息.

  • /var/log/lastlog 每個用戶最後一次登陸的信息(最新的信息)

wtmp和utmp都是二進制文件,它們要用命令來查看內容.

1. 命令who,查看utmp文件當前的每個用戶的信息,它默認輸出包括用戶名,終端類型,登陸時間及遠程主機.如下:

[[email protected]]# who

root pts/0 May 4 22:10 (192.168.0.5)

如果指明了文件,則回顯示自wtmp創建以來所有登陸的用戶信息.

[[email protected]]# who /var/log/wtmp

root tty1 May 4 20:44

root pts/0 May 4 20:52(211.101.46.195)

2. 命令w,查看utmp文件並顯示當前系統中每個用戶和它所運行的進程信息.如:

[[email protected]]# w

23:00:48 up 54 min, 1 user, load average: 0.00, 0.00,0.00

USER TTY FROM [email protected] IDLE JCPU PCPU WHAT

root pts/0 192.168.0.5 22:10 0.00s 0.03s 0.00s w

3. users,顯示當前當前登陸的用戶數量.如,

[[email protected]]# users

root root

這表明兩個root用戶在同時登陸這臺機器.

4. last命令,用來顯示wtmp文件第一次 創建以來所有登陸過的用戶.如:

[[email protected]]# last

root pts/1 192.168.0.5 Fri May 4 23:01 - 23:02 (00:00)

root pts/0 192.168.0.5 Fri May 4 22:10 still logged in

reboot system boot 2.6.9-34.EL Fri May 422:07 (00:59)

root pts/0 192.168.0.5 Fri May 4 21:38 - down (00:27)

reboot system boot 2.6.9-34.EL Fri May 421:36 (00:29)

root pts/1 192.168.0.5 Fri May 4 21:09 - down (00:25)

我們也可以指明用戶,[[email protected] log]# last root

root pts/1 192.168.0.5 Fri May 4 23:01 - 23:02 (00:00)

root pts/0 192.168.0.5 Fri May 4 22:10 still logged in

wtmpbegins Tue May 1 08:13:04 2007

5. 命令ac,根據wtmp文件中每個用戶進入和退出時間.(以小時計算),不用參數代表全部

[[email protected]]# ac

total 2.88

[[email protected]]# ac -d 代表每天總連接時間

Today total 2.89

[[email protected]]# ac -p 代表每個用戶總連接時間

root 2.89

total 2.89

我們要養成經常查看日誌來觀察有無可疑用戶等問題的存在.


七、常見安全隱患以及解決方法

  • 竊聽:利用對數據加密方法

  • 篡改:利用哈西算法檢驗數據的完整性(MD5 SHA1)

 opensslenc -e -des3 -a -in /etc/passwd -out /home/passwd.des3 #加密

openssl enc -d -des3 -a -in/home/passwd.des3 -out /home/passwd #解密

diff /home/passwd /etc/passwd #對比兩個文件是否一致

 -e encrypt 加密;後面可以加很多加密的算法,如-des3加密算法

-d decrypt解碼

-a/-base64 base64 encode/decode, dependingon encryptyion flag。#base64編碼/解碼,這取決於加密的標誌。

-in inputfile

-out outputfile

MD5: Message-Digest Algorithm 5(信息摘要算法)。MD5算法的哈希值大小為128。是一種不可逆的算法。不管輸入法數據長短,最終哈西出來的數據長度是一樣的。

技術分享

   MD5字符加密  

SHA1: Secure Hash Algorithm(安全哈希算法)。SHA1算法哈希值大小為160。是一種不可逆的算法。

   技術分享

  • 偽裝(偽裝WIF): 利用身份認證確保是否被授權(用戶密碼、數據證書、CA證書)

  • 網絡中斷-->DDOS攻擊:加大帶寬,加多服務器


本文出自 “無心傷害” 博客,請務必保留此出處http://arckyli.blog.51cto.com/13756/1968076

Linux主機安全筆記