Linux 編寫安全巡檢腳本

来源:https://www.cnblogs.com/yuzly/archive/2019/05/01/10725729.html
-Advertisement-
Play Games

Linux 編寫安全巡檢腳本 檢測/etc/passwd,/etc/shadow文件是否鎖定 檢測/etc/login.defs配置文件中密碼有效期設置是否得當 檢查所有用戶賬戶(非系統賬戶)中是否存在密碼永久有效問題(檢查/etc/shadow文件每一行中的密碼期限值) 檢查系統預設歷史命令記錄條 ...


Linux 編寫安全巡檢腳本

檢測/etc/passwd,/etc/shadow文件是否鎖定

檢測/etc/login.defs配置文件中密碼有效期設置是否得當 

檢查所有用戶賬戶(非系統賬戶)中是否存在密碼永久有效問題(檢查/etc/shadow文件每一行中的密碼期限值)

檢查系統預設歷史命令記錄條數(/etc/profile)和管理員帳號的歷史命令條數(~/.bash_logout)是否存在安全隱患

檢查終端自動註銷功能是否啟用,自動註銷配置文件分為系統配置文件(/etc/profile)和各個用戶自己的配置文件(~/.bash_profile)

檢查系統預設管理員賬號是否為root(用戶ID、組ID為0)

檢查是否禁用重啟熱鍵Ctrl+Alt+Del功能

檢查su用戶切換認證功能是否啟用

檢查grub.conf文件中是否開啟加密功能“password --md5

檢查系統是否有足夠的磁碟空間

檢查開放的終端個數

系統弱口令檢測,調用john

埠掃描功能,調用nmap

###檢測/etc/passwd,/etc/shadow文件是否鎖定
lock=$(lsattr /etc/passwd /etc/shadow |grep i |wc -l) 
if [ $lock -ne 2 ]  
then
  echo "該系統中的賬戶和密碼配置文件沒有鎖定,存在安全隱患!"
fi
###檢測/etc/login.defs配置文件中密碼有效期設置是否得當
day=$(grep "^PASS_MAX_DAYS" /etc/login.defs |awk '{print $2}')
if [ $day -gt 30 ]
then
  echo "/etc/login.defs該配置文件中賬戶有效期設置大於30天,存在安全隱患!"    
fi
###檢查所有用戶賬戶(非系統賬戶)中是否存在密碼永久有效問題(檢查/etc/shadow文件每一行中的密碼期限值)
#1.首先在/etc/passwd文件中找到所有非系統帳號(uid>500和root賬戶),導入到一個文件
awk -F: '{if($3>=500|| $3==0) print $1}' /etc/passwd >account.txt
#2.迴圈遍歷account.txt文件,過濾/etc/shadow中存在和account.txt文件一樣的賬戶
for i in $(cat account.txt)
do
 grep "^$i" /etc/shadow |awk -F: '{if($5>30) print ""$1"" ":賬戶存在密碼有效期大於30天安全隱患!"}'
done
###檢查系統預設歷史命令記錄條數(/etc/profile)和管理員帳號的歷史命令條數(~/.bash_logout)是否存在安全隱患
history_num=$(grep "^HISTSIZE" /etc/profile |awk -F= '{print $2}')
num=$(grep "history -c" /root/.bash_logout |wc -l)
if [ $history_num -gt 100 ]||[ $num -eq 0 ]
then
  echo "該系統預設歷史記錄存在安全隱患!"
fi
###檢查終端自動註銷功能是否啟用,自動註銷配置文件分為系統配置文件(/etc/profile)和各個用戶自己的配置文件(~/.bash_profile)
#1.首先檢測系統配置文件/etc/profile是否有啟用終端自動註銷
#2.如何系統配置文件沒有啟用終端自動註銷,然後在迴圈檢查各個賬戶的配置文件是否啟用終端自動註銷功能
timeout=$(grep "^export TMOUT" /etc/profile)
#-n是判斷一個變數是否是否有值 
if [ ! -n "$timeout" ]
then
  #得到位於/home目錄下用戶賬戶的個數,-w 統計單詞的個數
  cd /home
  n=$(ls |wc -w)
  #把/home下的所有賬戶名導入到一個文件
  ls >/root/user.txt
  for((i=1;i<=$n;i++))
  do
    for j in $(cat /root/user.txt)
    do
      TMout=$(grep "^export TMOUT" /home/$j/.bash_profile)
      if [ ! -n "$TMout" ]
      then
        echo "賬戶$j沒有啟用終端自動註銷,存在安全隱患!"
      fi
    done
    break    
  done
fi
###檢查系統預設管理員賬號是否為root(用戶ID、組ID為0)
 awk -F: '{if($3 == 0 && $4 == 0 && $2="root") print "root是預設管理員!" }' /etc/passwd
###檢查/etc/passwd文件中是否存在多餘的超級用戶賬號(用戶ID、組ID為0)
awk -F: '{if($3 == 0 && $1 != "root") print ""$1"賬戶具有管理員許可權" }' /etc/passwd
###檢查/etc/passwd文件中是否有可疑賬號(是否存在多餘的賬號)
#1.事先備份一份/etc/passwd文件,然後添加帳號測試,把添加帳號之後/etc/passwd配置文件與之前備份的文件進行逐行逐個對比(每行中每個節點),存在異常,提示哪個帳號有問題
###檢查是否禁用重啟熱鍵Ctrl+Alt+Del功能
start_shutdown=$(grep "^#start on control-alt-delete" /etc/init/control-alt-delete.conf)
exec_shutdown=$(grep "^#exec /sbin/shutdown" /etc/init/control-alt-delete.conf)
if [ ! -n "$start_shutdown" ]&&[ ! -n "$exec_shutdown" ]
then
  echo "該系統沒有禁用重啟熱鍵,存在安全隱患!"
fi
###檢查su用戶切換認證功能是否啟用
pam_wheel=$(grep "pam_wheel.so use_uid" /etc/pam.d/su)
if [ ! -n "$pam_wheel" ]
then
  echo "該系統沒有啟用su切換用戶認證,存在安全隱患!"
else
  #NF 當前記錄中的欄位個數,就是有多少列
  num_in_wheel=$(cat /etc/group |grep wheel |awk -F: '{print $4}'|awk -F "," '{print NF}')
  if [ $num_in_wheel -gt 2 ]
  then
    echo "太多用戶能切換到root,存在安全隱患!"
  fi
fi
###檢查grub.conf文件中是否開啟加密功能“password --md5
passwd_grub=$(grep "password" /boot/grub/grub.conf)
if [ ! -n "$passwd_grub" ]
then
  echo "grub菜單沒有開啟加密功能,存在安全隱患!"
fi
###檢查系統是否有足夠的磁碟空間
#該變數用於獲取磁碟的已使用空間的百分比值
Usedspace=$(df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')

if [ $Usedspace -gt 80]
then
  echo "你的磁碟空間已不足,請清理磁碟!"
else
  echo "你的磁碟空間很充足!已用空間為$Usedspace%"
fi
###檢查開放的終端個數
tty_num=$(grep "^env ACTIVE_CONSOLES" /etc/init/start-ttys.conf|awk -F "-" '{print $2}'|awk -F "]" '{print $1}')
echo "開放$tty_num個終端"
###系統弱口令檢測,調用john
#通過find查找john是否存在,存在說明john已經安裝
exist_john=$(find / -name john)
if [ ! -n "$exist_john" ]
then
  #不存在,編譯安裝john
  tar zxvf /tmp/john-1.8.0.tar.gz -C /usr/src
  cd /usr/src/john-1.8.0/src
  echo "該系統沒有安裝john,正在安裝,請稍等......"
  make clean linux-x86-64 &>/dev/null
  echo "該系統已經安裝完john"
  cd /usr/src/john-1.8.0/run/
  cp /etc/shadow /root
  #用自己的字典 --worldlist
  ./john  --wordlist=/root/dict.txt /root/shadow
else
  cd /usr/src/john-1.8.0/run/
  cp /etc/shadow /root
  #用自己的字典
  ./john  --wordlist=/root/dict.txt /root/shadow
fi
###埠掃描功能,調用nmap
exist_nmap=$(find / -name nmap)
if [ ! -n "$exist_nmap" ]
then
  #不存在nmap則安裝,通過搭建本地yum倉庫安裝
  mount /dev/sr0 /mnt &>/dev/null
  #搭建本地倉庫
  cd /etc/yum.repos.d
  cat >>yuzly.repo<<OK
[yuzly]
name=yuzly
baseurl=file:///mnt
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
OK
  #安裝nmap
  echo "該系統沒有安裝nmap,正在安裝nmap,請稍等....."
  yum -y install nmap &>/dev/null
  nmap -p 135,136,137,138,139,445,21,23,3389 192.168.133.130
else
  nmap -p 135,136,137,138,139,445,21,23,3389 192.168.133.130
fi

 

 

#檢測/etc/passwd文件中是否和root用戶的uid相同,或者是否同時存在兩個uid一樣的用戶
echo "帳號存在安全隱患,該賬戶為root賬戶:"
awk -F: '{if($3 == 0 && $1 != "root") print $1 }' /etc/passwd

#檢測/etc/passwd文件中,是否存在密碼占位符(x)被修改
echo "帳號存在安全隱患,該帳號存在密碼占位符(x)被修改!:"
awk -F: '{if($2!="x" && $3>=500) print $1}' /etc/passwd

#檢測賬戶是否存在未設密碼
#檢測哪些賬戶空口令(賬戶被鎖定)
echo "賬戶沒有密碼!:"
awk -F: '{if($2=="!!") print $1}' /etc/shadow

#檢測那些賬戶是空密碼賬戶
echo "空密碼賬戶:"
awk -F: '{if($2=="") print $1}' /etc/shadow
#檢測失效時間
echo "以下賬戶密碼沒有失效時間:"
awk -F: '{if($7=="") print $1}' /etc/shadow
#檢測密碼是否永久有效
echo "下麵密碼是否永久有效,存在安全風險:"
awk -F: '{if($5==99999) print $1}' /etc/shadow

#檢測系統內置賬戶中以/bin/bash結尾的賬戶是否被鎖定
grep "/bin/bash$" /etc/passwd | awk -F: '{print $1}' >>account1.txt
Name=$(cat account1.txt)
cat /etc/shadow |grep "^$Name" |awk '{print $1}'>>account2.txt
cat account2.txt | awk -F: '($2~/^!!/){print ""$1"" ":是以/bin/bash結尾已被鎖定的賬戶"}'

 


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

-Advertisement-
Play Games
更多相關文章
  • .Net平臺下相容.NET Standard 2.0,一個實現以Lambda表達式轉轉換標準SQL語句,支持MySQL、SQL Server資料庫方言,使用強類型操作數據的輕量級ORM工具,在減少魔法字串同時,通過靈活的Lambda表達式組合,實現業務數據查詢的多樣性。 如果想找到替代EF方案,Sq... ...
  • 本篇是對EFCore 進行下封裝並實現基本的增刪改查的同步非同步方法及針對不同資料庫的批量插入、sql語句直接操作資料庫; 一、 先定義基礎倉儲介面IRepository 二、實現IRepository介面 三、BaseRepository是個抽象類,有些比較複雜的sql語句通過EF來處理比較麻煩,還 ...
  • 項目開始設計的是運行在windows下,所以一開始採用的是windows服務模式來獲取多媒體文件信息,後來要求調整為可以在Linux下運行,經過這兩天的資料查找,實現了Linux下通過.NET來獲取多媒體文件信息的功能。詳情如下: 1、運行環境是CentOS 7 2、編譯環境是VS2017+.NET ...
  • 為什麼說是最佳實踐呢?因為在實際開發中踩坑了,而且發現網上大多數文章給出的解決方法都不能很好地解決問題。尤其是在獲取類型為 ,輸出為: 數據的時候。網上千篇一律的說寫一個 的擴展。但是給出的代碼 中對於 方法都沒有貼出代碼或者 方法的書寫存在一定的問題。這就導致了,如果你執行一個Oracle存儲過程 ...
  • 在接觸supervisor進程管理工具之前,使用springboot打包部署到linux伺服器的流程是這樣子的,如下圖所示: 上圖展示的就是最一般的流程,如果項目是小項目或者demo可以這樣子去部署,但是實際生產中會有各種各樣的問題存在,比如: 1. 項目發佈之後,由於各種可能的原因,伺服器宕機或者 ...
  • bios必須設置u盤為第一啟動項 編輯E:\EFI\BOOT\grub.cfg中所有inst.stage2=hd:LABEL=*與捲標名稱一致(區分大小寫)(linux系統寫入鏡像無需修改) inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 ...
  • 格式: echo -e "\033[字背景顏色;字體顏色m字元串\033[0m" 轉義序列要是通過彩色化提示符來增加個性化,就要用到轉義序列。 轉義序列就是一個讓 shell 執行一個特殊步驟的控制指令。 轉義序列通常都是以 ESC 開頭(這也是它的命名原因)。 在 shell 里表示為 ^[。這種 ...
  • 安裝Linux操作系統的5種方法以及心得這幾天沒有調別的東西,想起自己還不太會在沒有安裝光碟的時候安裝Linux,於是試了一下Linux的五種安裝方法,下麵是我的一些 篇一:安裝Linux操作系統的5種方法以及心得 這幾天沒有調別的東西,想起自己還不太會在沒有安裝光碟的時候安裝Linux,於是試了一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...