歡迎您光臨本站 註冊首頁

對linux安全設置中需要注意和掌握的地方

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

伺服器的安全 (防範於未然 比入侵后再修補漏洞要好的多 一旦遭到入侵以後 當你發現你的水平在黑客的水平之下
話 最好重裝系統 並且更新你軟體的版本為最新的) 註明 : 如果沒有查出被入侵的原因 和對方使用什麼漏洞以及路徑
重裝系統也是於事無補

需要注意的地方:

1.使用 複雜的口令( 都是廢話 但是卻是 非常關鍵的 很多資料都談到了 我也不必再重複)

使用 chage -M 60 用戶名
來設置 60 天為口令的最長有效期
並且要設置 一個驗證模塊 pam_cracklib.so

這個模塊 是用來檢查 口令強度 它會調用 cracklib 來測試口令是否會被破解
它會檢查 你的口令
1是不是和原來的口令一樣 或者只是變換了大小寫
2檢查口令是否太短
3 口令是否和原來的相像
只要 把 /etc/pam.d/passwd
文件中的 添加 passwor required pam_cracklib.so retry=3 minlength=12 difok=5
retry=3 就是給用戶3次機會設置口令 並且長度至少為12 至少要有5個字元和舊口令不同
password required pam_cracklib.so retry=3 minlen=12 difok=3
password required pam_unix.so use_authtok nullok md5


2.屏棄 不安全的連接方式 : telnet 以及 ftp 都是不安全的連接方式 ( 盡量採用 ssh 和sftp 等等
有加密的通訊方式 防止通訊數據被人嗅探或者截獲)


3. 對敏感文件的許可權設置 必須非常謹慎:
日誌文件 首先創建一個用戶組: groupadd logs
進入日誌目錄: /var/log
把所有的文件都歸進 logs用戶組 chgrp -R logs .
把所有目錄的許可權都 設置為 rwxr-x--- 就是750
所有的文件設置為 rw-r----- 就是640
chmod -R 700 /etc/rc.d/init.d/* 
這表示只有root才允許讀、寫、執行該目錄下的script文件。

hosts.deny hosts.allow

{控制台訪問安全
1、取消普通用戶的控制台訪問許可權,你應該取消普通用戶的控制台訪問許可權。
比如shutdown、reboot、halt等命令。
  # rm -f /etc/security/console.apps/
  是你要註銷的程序名。
2、不允許從不同的控制台進行root登陸
  "/etc/securetty"文件允許你定義root用戶可以從那個TTY設備登陸。你可以編輯"/etc/securetty"文件,再不需要登陸的TTY設備前添加「#」標誌,來禁止從該TTY設備進行root登陸。
  在/etc/inittab文件中有如下一段話:
  # Run gettys in standard runlevels
  1:2345:respawn:/sbin/mingetty tty1
  2:2345:respawn:/sbin/mingetty tty2
  #3:2345:respawn:/sbin/mingetty tty3
  #4:2345:respawn:/sbin/mingetty tty4
  #5:2345:respawn:/sbin/mingetty tty5
  #6:2345:respawn:/sbin/mingetty tty6
  系統默認的可以使用6個控制台,即Alt+F1,Alt+F2...,這裡在3,4,5,6前面加上「#」,註釋該句話,這樣現在只有兩個控制台可供使用,最好保留兩個。然後重新啟動init進程,改動即可生效!}


修改 /etc/ssh/sshd_config
里的
PermitRootLogin yes 修改為 no
這樣就能防止 root 直接遠程登陸

如果 不希望 用口令驗證來登陸 可以選擇 基於密鑰的登陸方式
將以下配置做一下簡單的修改:
#AuthorizedKeysFile .ssh/authorized_keys 將#註釋去掉
該選項用於設置用戶公鑰文件存儲位置,系統默認位置在用戶目錄下的.ssh/authorized_keys

#PasswordAuthentication yes 將#去掉,並將yes改成no
系統默認使用基於密碼的驗證方式,這樣就禁止了使用基於密碼驗證方式,而改成了基於密鑰的驗證方式,從而提高了系統的安全性
2. 密鑰製作具體的過程
(1) 添加遠程登陸用戶
# adduser remoter
# passwd remoter //為reomter設置密碼,我在我把密碼設為fire
# su ?l remoter
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/remoter/.ssh/id_rsa): 密鑰保存的路徑
Created directory '/home/remoter/.ssh'.
Enter passphrase (empty for no passphrase): 輸入密鑰密碼,在此我設為fire
Enter same passphrase again:
Your identification has been saved in /home/remoter/.ssh/id_rsa. 私鑰密碼保存徑
Your public key has been saved in /home/remoter/.ssh/id_rsa.pub. 公鑰密碼保存路徑
The key fingerprint is:
ff:50:a6:95:5d:1a:39:96:14:f7:e6:7f:91:ea:6f:b4 reomter@linuxhero 密碼指紋
(2)重命名公鑰
$ ls ?al 可以看到在/home/reomter/目錄下有一個.ssh文件,進入該目錄,
$ cd .ssh
$ mv id_rsa.pub authorized_keys 將其重命名與以下修改的配置文件一至,注意不要拼寫錯
(3)將私鑰下載到本地。
可以利用remoter相應的FTP用戶名和密碼登陸,將id_rsa下載到本地.
再使用puttygen.exe處理用戶私鑰。運行」puttygen.exe」點擊」load」選取開始下載的id_rsa,
系統要求輸入私鑰密碼輸入,如圖所示,
在這裡我輸入的私鑰密碼為fire.
輸入密碼后,單擊確定再點點save private key按鈕,將密鑰保存為id.ppk.
(4)基於密鑰的遠程登陸
運行putty.exe , 選擇「Session",在"HostName(orIP address)"輸入IP:192.168.0.20,port:22
再選擇"Connection",選「SSH」->"Auth"->"Browse"選取開始轉換過來的密鑰,單擊"Open

輸入用戶名:reomter,密碼為fire,是私鑰密碼,而不是系統用用戶密碼.
3. SSH服務配置文件的詳細介紹
#Port 22 指定的SSHD使用的埠,為了安全你還可以在此修改默認埠
#Protocol 2,1 指定優先使用的SSH協議
#ListenAddress 0.0.0.0 使用的IP地址(IPV4格式)
#ListenAddress :: 使用的IP地址 (IPV6格式)

# HostKey for protocol version 1 使用SSH1協議的密鑰
#HostKey /etc/ssh/ssh_host_key SSH1密鑰的保存路徑
# HostKeys for protocol version 2 使用SSH2協議的密鑰
#HostKey /etc/ssh/ssh_host_rsa_key SSH2協議rsa密鑰保存路徑
#HostKey /etc/ssh/ssh_host_dsa_key SSH2協議dsa密鑰的保存路徑

# Lifetime and size of ephemeral version 1 server key SSH1伺服器密鑰的生命周期
#KeyRegenerationInterval 3600 密鑰重建周期,單位為秒
#ServerKeyBits 768 伺服器密鑰的長度

# Logging 日誌
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH 日誌方式
SyslogFacility AUTHPRIV 日誌方式
#LogLevel INFO 日誌等級

# Authentication:

#LoginGraceTime 120 登陸延時
#PermitRootLogin yes 禁止root用戶登陸
#StrictModes yes 嚴格模式

#RSAAuthentication yes RSA驗證
#PubkeyAuthentication yes 公鑰驗證
#AuthorizedKeysFile .ssh/authorized_keys 密鑰存放路徑

# rhosts authentication should not be used 禁止rhosts驗證模式
#RhostsAuthentication no rhosts驗證模式
# Don't read the user's ~/.rhosts and ~/.shosts files 不讀取用戶的~/.rhosts and ~/.shosts 文件

#IgnoreRhosts yes 忽略Rhosts

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes 基於密碼的驗證模式
#PermitEmptyPasswords no 允許空密碼



4.對一些關鍵的 切換命令 比如 su mount ..等等 要嚴加控制 其使用許可權 (su 需要指定專門的用戶才可以使用 防止}
暴力破解 mount 防止 有人通過遠程掛載 一些 目錄 上面suid 和sgid 的 程序 用於入侵或者攻擊)

禁止任何人通過su命令改變為root用戶
su(Substitute User替代用戶)命令允許你成為系統中其他已存在的用戶。如果你不希望任何人通過su命令改變為root用戶或對某些用戶限制使用su命令,你可以在su配置文件(在"/etc/pam.d/"目錄下)的開頭添加下面兩行:
編輯su文件(vi /etc/pam.d/su),在開頭添加下面兩行:
auth sufficient /lib/security/pam_rootok.so debug 
auth required /lib/security/Pam_wheel.so group=wheel 
這表明只有"wheel"組的成員可以使用su命令成為root用戶。你可以把用戶添加到"wheel"組,以使它可以使用su命令成為root用戶。
還可以把su 命令歸進 專門的用戶組和用戶 同樣達到這樣的效果

防止 有人通過遠程掛載 一些 目錄 上面suid 和sgid 的 程序 用於入侵或者攻擊
修改/etc/fstab
只給分區必須的許可權
像這樣LABEL=/bakups /bakups ext3 nosuid,noexec 1 2

noexec表示不能在這個分區運行程序,nosuid不能使用nosuid的程序,根據情況自行設置其他分區,一般來說/tmp,/usr都要nosuid


5.經常的更新 和升級軟體的版本 ( 但是注意 盲目的升級軟體版本 很可能會造成新的軟體 運行不正常)
redhat 有可以從 redhat network 獲得 更新的功能 使用 up2date 就可以更新系統的各類服務的數據包


6.sudo 的設置 ( 這個工具是授權 非root用戶 運行root 用戶的一些命令)



7.suid 和sgid 位的設置 ( 這個的危害 恐怕是非常嚴重的 )
suid 位和sgid 位的設置 chmod u+s 文件 和chmod g+s 文件
查找 suid 位的文件的命令:
# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
禁止其中不必要的程序:

----# chmod a-s program_name


umask 命令


8.各種服務配置文件的設置 (卸載 自己沒有開設的服務的數據包 不要保留 )


9.為了防止dns欺騙 要對的設置 進行修改 必須 讓伺服器 進行反相解析 並且要 設置為 先從 外部dns伺服器上
獲得數據 不要 設置為 直接讀取自己機子的緩存信息
修改"/etc/host.conf"文件
"/etc/host.conf"說明了如何解析地址。編輯"/etc/host.conf"文件(vi /etc/host.conf),加入下面這行:
# Lookup names via DNS first then fall back to /etc/hosts. 
order bind,hosts 
# We have machines with multiple IP addresses. 
multi on 
# Check for IP address spoofing. 
nospoof on 
第一項設置首先通過DNS解析IP地址,然後通過hosts文件解析。第二項設置檢測是否"/etc/hosts"文件中的
主機是否擁有多個IP地址(比如有多個以太口網卡)。第三項設置說明要注意對本機未經許可的電子欺騙。


10.最好可以使用 vpn 來替代 利用外部網路直接連接 遠程伺服器

11. hosts.deny hosts.allow 文件 阻擋 非授權用戶訪問系統服務
第一步:
編輯hosts.deny文件(vi /etc/hosts.deny),加入下面這行
# Deny access to everyone. 
ALL: ALL@ALL, PARANOID
這表明除非該地址包好在允許訪問的主機列表中,否則阻塞所有的服務和地址。
第二步:
編輯hosts.allow文件(vi /etc/hosts.allow),加入允許訪問的主機列表,比如:
ftp: 202.54.15.99 foo.com
202.54.15.99和 foo.com是允許訪問ftp服務的ip地址和主機名稱。

tcpdchk程序是tepd wrapper設置檢查程序。它用來檢查你的tcp  
wrapper設置,並報告發現的潛在的和真實的問題。設置完后,運行下面這個命令:
[Root@kapil /]# tcpdchk 


12.iptables 防火牆設置 (這裡需要嚴格設置 並且要設置 關鍵文件的許可權 同時在這裡 在保證安全的前提下
盡量少的 規則可以提高效率和處理速度 對出口數據同樣要嚴格控制 防止反相連接 或者成為別人dos 攻擊的發源
地 !)

#輸出鏈允許源地址是xxx.xxx.xxx.xxx的數據輸出,也可以指定網卡例: ?i eth0 (防止成為別人dos 攻擊的發源
地 !)
iptables -A OUTPUT -s xxx.xxx.xxx.xxx -j ACCEPT
#限制ping包每一秒鐘一個,10個后開始
iptables -A INPUT -p icmp -d xxx.xxx.xxx.xxx -m limit --limit 1/s --limit-burst 10 -j ACCEPT

#限制IP碎片,每秒鐘只允許100個碎片,防止DoS攻擊
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
需要的人可以到下面的地址看 動畫
http://www.fineacer.com/Soft_Show.asp?SoftID=231
http://www.fineacer.com/Soft_Show.asp?SoftID=254

13.at 計劃任務的 檢查 (包括at.deny at.allow 文件的檢查) 這裡強調一下 很多服務都有這樣地後綴名為 deny allow
文件 設置不當 就會給人以可乘之機 所以前面說的 對服務設置地了較 同樣非常重要)


14.cron 設置 檢查 定期運行的 列表裡 有什麼不妥當的 shell

15.系統在分區過程中 最好能夠 把一些目錄分開 如果有多的硬碟 最好把/home 和 應用程序的目錄分在各自單獨的
硬碟上 並且做好 用戶的磁碟配額 來防止 入侵后對系統進行 惡意的寫數據 破壞硬碟的數據 最大限度上保證
數據的安全
----經常檢查磁碟空間對維護Linux的文件系統非常必要。而Linux中對磁碟空間維護使用最多的命令就是df和du了。

----df命令主要檢查文件系統的使用情況,通常的用法是:

----#df -k

----Filesystem 1k-blocks Used Available Use% Mounted on

----/dev/hda3 1967156 1797786 67688 96% /

----du命令檢查文件、目錄和子目錄佔用磁碟空間的情況,通常帶-s選項使用,只顯示需檢查目錄佔用磁碟空間的總計,
而不會顯示下面的子目錄佔用磁碟的情況。

----% du -s /usr/X11R6/*

----34490 /usr/X11R6/bin

----1 /usr/X11R6/doc

----3354 /usr/X11R6/include


16.做好 raid 磁碟列陣 來防止硬碟的損壞 (安全不僅僅 指的是 系統的安全還 包括數據的安全和通訊的安全)

目前 raid的方案分為7個級別
其中 0, 1, 5 三個級別經常用到

17.文件的文件完整性檢查 工具 tripwire 用來檢查文件的 完整性 ( 所以強烈建議 linux 系統的管理員
在工作過程中 做好工作筆記 記錄在對系統設置修改中 更改的設置) 完整性檢查的數據不要保存到這台
主機的硬碟上 最好使用移動介質(cdrom 或者移動硬碟)

18.檢查一些容易被黑客替換的命令文件 ls mount netstat lsof top ..... 並且要備份一套 完整的沒有做過修改的
系統檢查文件的 備份 (防止 這些檢查工具被 木馬話或者被替換 )

19.最好 使用 chattr 命令 給寫文件加上 一些屬性 比如 +i 這樣可以防止任意更改文件 給日誌文件加上 +a的
屬性 這個屬性是只許添加 不許更改的屬性
反正修改 grub 的內容
chattr +i /etc/grub
防止未經許可的刪除或添加服務:
[root@kapil /]# chattr +i /etc/services

需要注意的目錄 /bin /sbin /usr/bin 和/lib 這些目錄都是不經常變動的
(雖然不能阻止 獲得root 用戶的黑客修改參數 但是對 防範腳本攻擊卻非常有效 可以避免
軟體本身有漏洞 造成被人修改 至少可以延緩 別人的攻擊速度 對方停留在系統的時間越長 留下的日誌也就越多
還有專門的工具 可以增強這個功能 設置后甚至於root 用戶都無權修改)

20.備份文件 這樣可以在出現問題的時候快速恢複數據

21.syslogd 日誌 最好設置一個遠程日誌伺服器來保存日誌 (這樣在黑客攻破主機后 為了擦除 日誌記錄 就必須攻擊
日誌伺服器 並且日誌伺服器上有可能只有開啟日誌的服務 從而為入侵增加了難度 爭取了 大量的時間)
在這裡 還要說明一點 一旦root 用戶被攻破 黑客很容易從syslog-ng的配置文件中 發現日誌文件發送的目標
(就是遠程的日誌伺服器地址) 黑客可能無法攻破日誌主機但是 很有可能發動 dos 攻擊導致日誌主機崩潰無法記錄
黑客在後面 所做的操作 這樣會對通過日誌文件找出他攻擊的方法 造成很大的難度
所以 為了能夠欺騙 黑客 可以 設置日誌發送到內部網路中的假的或者不存在的目標 同時在網路中 設置一個秘密
的日誌主機 通過一種軟體 passlogd 把秘密的日誌伺服器的網卡設置成為混和模式 來記錄網路中傳送的所有日誌
(passlogd 是一種日誌嗅探工具)
如果是使用交換機 可以在交換機上設置對這個秘密日誌伺服器的某一個埠轉發所有的數據包

所以建議: 同時設置2個日誌伺服器 一個秘密 一個為公開 這樣 可以對黑客的攻擊日誌伺服器 起到很好的作用

由於日誌文件是以明文傳輸的 容易被人截獲 所以需要以加密的方式來傳遞日誌信息 可以使用stunnel 來加密數據

(stunnel 在安全焦點有下載) 但是由於加密了 就會導致passlogd 嗅探工具失效 所以這需要自己平衡



22.logsentry 日誌監視工具 這個是用來在發現 監視工具中設置的一些敏感的 日誌可以
儘快 發到 管理員手上


23.protsentry 埠監視工具 這個可以設置一些埠 來防止黑客對系統的踩點(掃描) 這工具還可以設置 一些
被掃描后 運行什麼腳本的功能 所以功能強大 如果可以設置的好 可以非常有效的防止 黑客對系統的掃描

24. 刪除所有的特殊賬戶
你應該刪除所有不用的預設用戶和組賬戶(比如lp, sync, shutdown, halt, news, uucp, operator, games, gopher等)。
刪除用戶:
[root@kapil /]# userdel LP 
刪除組:
[root@kapil /]# groupdel LP 
修改/etc/profile 文件
上面強調的都是從 網路上攻擊的防範方法:

其實物理的安全同樣重要 要是人家 拿走了你的硬碟 恐怕你的設置再安全也是 於事無補

25.同時對 bios 設置和 給grub 加密 還有 對自己離開主機是 鎖定 系統都是非常必要的 ( 可以防止 別人通過
物理接觸來攻破系統)

Bios Security
一定要給Bios設置密碼,以防通過在Bios中改變啟動順序,而可以從軟盤啟動。這樣可以阻止別人試圖
用特殊的啟動盤啟動你的系統,還可以阻止別人進入Bios改動其中的設置(比如允許通過軟盤啟動等)。


26.上面的做的再好 沒有管理員的責任心 敬業精神 警惕心 和上進心 (每天需要對日誌 和關鍵信息的 查閱 應該是管理
員的必修課 同時需要不斷的學習 增強自己的技術水平) 再強的硬體和環境 都是一堆擺設 只會 成為黑客談論的
笑柄 說白了 安全在於人為 不要怪罪於軟體和硬體 本身 !!

-------------------------引用黑客常說的一句話; 沒有入侵不了的系統
我加上一句 :但是事在人為 肯定會有打敗不了的管理員

最後忠告大家 當發現自己被某個 ip入侵 請不要採取極端的惡意攻擊活動 最好 發信件告知 (因為攻擊主機很可能
是 黑客的跳板) 採取惡意攻擊 搞不好會把自己 搞進監獄

由於我並不是一個 非常了解入侵 的一個菜鳥 上面的有些知識點 有出入 希望大家給予添加和指導

[火星人 ] 對linux安全設置中需要注意和掌握的地方已經有743次圍觀

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