安全運維之文件系統保護

来源:https://www.cnblogs.com/lynk/archive/2019/12/24/12091725.html
-Advertisement-
Play Games

在Linux系統中,如果一個進程以root許可權運行或者一個用戶以root用戶身份登錄,那麼它的許可權就不再有任何限制,因此如果一旦root許可權被黑客掌握,對於系統來說將會是一場災難,在這種情況下,文件系統保護將會成為系統的最後一道防線,合理的設置文件系統保護可以最大限度的降低攻擊對系統造成的破壞。 鎖 ...


在Linux系統中,如果一個進程以root許可權運行或者一個用戶以root用戶身份登錄,那麼它的許可權就不再有任何限制,因此如果一旦root許可權被黑客掌握,對於系統來說將會是一場災難,在這種情況下,文件系統保護將會成為系統的最後一道防線,合理的設置文件系統保護可以最大限度的降低攻擊對系統造成的破壞。

鎖定重要文件

如果系統中存在一些非常重要的文件,可以通過chattr命令將其鎖定,這樣即使是root用戶也沒法對文件進行修改和刪除。該命令可以修改ext2、ext3、ext4文件系統下的文件屬性,而且這個命令只能由root用戶執行。對應的,lsattr可以用來查詢文件屬性。
chattr命令的語法如下:

chattr [-RV] [-v version] [mode] /路徑/文件

主要參數如下:

  • -R:遞歸修改所有文件及子目錄
  • -V:詳細顯示修改內容,並列印輸出
  • mode:
    • +:追加參數
    • -:移除參數
    • =:更新為指定參數
    • a:append,設定後只能添加數據,而不能刪除數據,只有root用戶可以設置這個屬性。
    • c:compress,設定文件是否壓縮後再儲存。讀取時需要自動解壓。
    • i:immutable,設定文件不能被寫入、修改、刪除、重命名、設定軟硬鏈接。
    • s:安全刪除,文件被刪除後全部收回硬碟空間。
    • u:保留刪除,系統會保留其數據塊,以便恢複數據。

lsattr命令的語法如下:

lsattr [-adiRvV] /路徑/文件

主要參數如下:

  • -a:列出所有文件,包括"."開頭的文件
  • -d:顯示指定目錄的屬性
  • -R:以遞歸方式列出目錄下所有文件及子目錄的屬性
  • -v:顯示文件或目錄版本。

以下是建議進行保護的文件:

$ chattr -R +i /bin /boot /lib/sbin
$ chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
$ chattr +i /etc/passwd
$ chattr +i /etc/shadow
$ chattr +i /etc/hosts
$ chattr +i /etc/resolv.conf
$ chattr +i /etc/fstab
$ chattr +i /etc/sudoers
$ chattr +s /var/log/messages
$ chattr +s /var/log/stmp

為文件系統進行保護雖然可以提高系統安全性,但是也會在一些情況下造成不便,例如在一些軟體的安裝與升級時,可能需要去掉相關目錄的immutable屬性和append-only屬性,對日誌文件設置了append-only屬性也可能會導致日誌輪換(logrotate)無法進行。
所以在使用chattr前,需要結合伺服器的應用環境來權衡如何設置保護。

而且chattr命令不能保護/、/dev、/tmp、/var等目錄:

  • 根目錄如果設置的不可修改屬性,那麼系統會無法工作
  • /dev在工作時,syslog需要刪除並重新建立/dev/log下的套接字設備
  • /tmp會有很多程式和系統程式在這個目錄下建立臨時文件
  • /var是系統和程式的日誌目錄,如果將其設置為不可修改,系統將無法記錄日誌

文件許可權檢查

不正確的設置文件許可權會造成安全隱患,及時發現這些隱患可以防範於未然。
以下是一些查找不安全許可權的方法:

  • 查找系統中任何用戶都有寫許可權的文件和目錄:
#對文件:
$ find / -type f -perm -2 -o -perm -20 |xargs ls -al
#對目錄:
$ find / -type d -perm -2 -o -perm -20 |xargs ls -ld
  • 查找系統中含有“s”位的程式:
$ find / -type f -perm -4000 -o -perm -2000 -print |xargs ls -al
  • 查找系統中所有suid及sgid文件
#suid
$ find / -user root -perm -2000 -print -exec md5sum () \;
#sgid
$ find / -user root -perm -4000 -print -exec md5sum () \;
  • 檢查系統中沒有屬主的文件
$ find / -nouser -o -nogroup

/tmp、/var/tmp、/dev/shm安全保護

在Linux系統中,/tmp/var/tmp目錄用於存放臨時文件,但臨時文件對所有用戶來說都可讀可寫可執行,這就為系統安全留下了安全隱患,這些目錄可能被攻擊者留下惡意腳本進行信息收集或偽裝。但如果修改臨時文件的讀寫許可權,就有可能影響系統和程式的正常運行。因此,這些目錄需要通過特殊設置來保護。
/dev/shm是一個記憶體共用設備,在Linux啟動時會預設載入/dev/shm/dev/shm在載入時,使用的是tmpfs文件系統,而tmpfs文件系統是一個記憶體文件系統,會將該文件系統中的文件全部主流進記憶體中。這樣通過/dev/shm就可以直接操控系統記憶體。

保護/tmp的方法:

  • 如果/tmp是獨立磁碟分區的話,將/etc/fstab中的/tmp掛載屬性修改為如下:
LABEL=/tmp    /tmp        ext3    rw,nosuid,noexec,nodey 0 0

其中,
* nosuid:不允許任何suid程式
* noexec:不允許執行腳本程式
* nodev:不存在設備文件

  • 如果是/var分區下的一個目錄,那麼可以先將/var/tmp中的數據移動到/tmp分區下,然後在/var做一個指向/tmp的軟連接即可:
$ mv /vat/tmp/* /tmp
$ ln -s /tmp /var/tmp
  • 如果/tmp是根目錄下的一個目錄,可以通過創建一個loopback文件系統利用Linux內核中的loopback特性將文件系統掛載到/tmp下,然後在掛載時設定掛載選項:
$ dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000
$ mke2fs -j /dev/tmpfs
$ cp -av /tmp /tmp.old
$ mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
$ chmod 1777 /tmp
$ mv -f /tmp.old/* /tmp/
$ rm -rf /tmp.old

然後編輯/etc/fstab,添加如下內容:

/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0

完成後,建議驗證一下配置是否生效,在tmp文件夾下建立一個shell文件嘗試執行。

保護/dev/shm的方法:

  • /dev/shm是一個設備文件,所以也可以通過修改/etc/fstab實現,將/etc/fstab中掛載屬性修改為如下所示:
tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 目錄 Linux伺服器部署.Net Core筆記:一、開啟ssh服務 Linux伺服器部署.Net Core筆記:二、安裝FTP Linux伺服器部署.Net Core筆記:三、安裝.NetCore運行環境 Linux伺服器部署.Net Core筆記:四、安裝Supervisor進程守護 Li ...
  • 一個採圖工具,所以界面做的很簡單。 private SapAcquisition m_Acquisition; private SapBuffer m_Buffers; private SapAcqToBuf m_Xfer; private SapView m_View; private SapCo ...
  • "普通許可權管理詳細說明" 一,特殊許可權:SUID,SGID,STICKY 1,SUID 預設情況下,用戶發起的進程的屬主是其發起者,因此,進程以發起者的身份去訪問別的資源。 SUID的作用:用戶執行某個程式文件時,如果此程式文件擁有SUID許可權,則此進程的屬主不是其發起者,而是這個程式文件的屬主。 ...
  • 以上是用php5.5 連接mysql資料庫時報的錯。 於是我用php5.4 連接正常沒有報錯。 這與mysql版本無關係,php 5.x版本,如5.2、5.3、5.4、5.5,怕跟不上時代,新的伺服器直接上5.5,但是程式出現如下錯誤:Deprecated: mysql_connect(): The ...
  • 配置步驟 一、windows 10 開發機配置 _windows 10 1809後支持ssh命令_ 1、生成ssh密鑰。使用以下命令,先生成本地公鑰和私鑰 執行完後,本地用戶文件夾【C:\Users\用戶名\.ssh】會生成 id_rsa 和 id_rsa.pub 兩個文件,分別對應 私鑰 和 公鑰 ...
  • confluence jira svn teamtoy openproject ...
  • everspin的MR25H10是一個1,048,576位磁阻隨機存取存儲器(MRAM)設備,由131,072個8位字組成。MR25H10提供串列EEPROM和串列快閃記憶體相容的讀/寫時序,沒有寫延遲,並且讀/寫壽命不受限制。 與其他串列存儲器不同,讀取和寫入都可以在記憶體中隨機發生,而兩次寫入之間沒有延 ...
  • 一,從索引庫查找文件:locate 索引庫:操作系統會周期性的遍歷根文件系統,然後生成索引庫 手動更新索引庫: 語法: 只匹配basename: 統計出有多少個符合條件的文件: 使用基本正則表達式: 註意:構築索引,需要遍歷整個根文件系統,非常消耗資源。 二,直接從文件系統里查找:find 下麵寫道 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...