信安Note_day29
Linux進程和計劃任務管理
程序和進程的關系
程序:保存在硬盤、光盤等介質中的可執行代碼和數據,是靜態保存的代碼。
進程:在CPU及內存中運行的程序代碼,是動態執行的代碼。
父、子進程:每個進程可以創建一個或多個進程。每個進程在不同的環境下,可能產生不同的進程,所以存在父、子進程的說法。
查看進程
ps(查看進程信息)
查看靜態的進程統計信息
查詢出的信息數據包含以下內容:
-
VSZ:虛擬內存
-
RSS:物理內存
-
STAT:S-休眠 R-運行 Z-僵死 <-高優先級 N-低優先級 s-父進程 +-前臺進程 l-多線程 T停止
-
TIME:進程占用cpu的時間
-
VIRT:占用swap內存大小
-
PR:優先級
-
RES:占用物理內存大小
-
SHR:共享內存大小,兩個進程間通信時所需
-
START :開啟時間
常用選項:
-
a:所有與進程有關的進程
-
u:以用戶為主的格式顯示進程信息
-
x:所有與終端無關的進程
格式:
-
ps -elf:將以長格式顯示系統中所有進程信息,包含更豐富的內容(其中PPID列表示進程的父進程的PID號)
-
ps aux(常用):將顯示系統中所有的進程信息
PID:該進程在系統中的數字ID號,在當前系統中是唯一的; %CPU:CPU占用百分比; %MEM:內存占用百分比
-
查找某個進程常用命令:
#ps aux | grep “bash”
top(動態查看進程信息)(較少使用)
查看動態的進程排名信息
執行top命令進入動態檢測后的命令符號如下:
-
M:根據內存使用進行排序
-
P:根據CPU使用排序
-
T:根據累計運行時間進行排序
-
l:是否顯示啟動時間、平均負載等信息
-
t:是否顯示進程和CPU狀態相關信息
-
m:是否顯示內存相關信息
-
c:是否顯示完整命令行信息
-
k:終止某個進程
-
q:退出top
-
h:可以獲得top程序的在線幫助信息
-
使用空格鍵可以強制更新進程狀態顯示
注意:#top -d 1 //一秒鐘刷新一次
pgrep(查看進程信息)(特定信息)
根據特定條件查詢進程PID信息
使用案例:
-
#pgrep -lu root //查看root用戶開啟的進程與PID(-l顯示進程名)
-
#pgrep -l -U zhangsan -t tty1 //指定張三用戶在tty1終端下運行的進程(-U指定特定用戶,-t指定終端)
pstree(查看進程信息)(層次關系)
以樹形結構列出進程信息
命令選項:
-
-a:顯示完整信息
-
-u:列出對應用戶名
-
-p:列出對應PID號
使用案例:
-
#pstree -aup //查看進程樹詳細信息
-
#pstree -aup root //查看root用戶打開的進程
├─sshd,1008 -D
│?????????└─sshd,1266
│ ????????????????└─bash,1268
│???????????????????????? └─pstree,1299 -aup
第一個sshd,1008 -D,為centos本機開啟的ssh服務的進程號。
第二個sshd,1266子進程為CRT連接所使用的進程號。
第三個bash,1268,是CRT連接的子進程,代表使用bash命令行的進程號。
第四個pstree,1299 -aup,是bash的子進程,是剛剛執行的pstree命令所產生的程序進程。
補充知識:yum provides pstree命令,可以查看pstree命令屬于哪一個軟件包,若沒有安裝的話,可以使用yum install命令安裝。
控制進程
進程的啟動方式
四種:
-
手工啟動
-
前臺啟動:用戶輸入命令,直接執行程序
-
后臺啟動:在命令行尾加入“&”符號
(cp /dev/cdrom aa.iso & //將此命令過程調入后臺執行)
-
調度啟動
-
at命令可設置任務定時啟動執行
-
crontab可實現任務的周期性執行
進程的前后臺調度
Ctrl+Z 組合鍵:將當前進程掛起,即調入后臺并停止執行。
jobs 命令:查看處于后臺的任務列表
(#jobs -l //查看后臺程序及其編號)
fg 命令:將后臺進程恢復到前臺運行,可指定任務序號
(#fg 1 //將后臺程序調入前臺)
命令cp /dev/cdrom aa.iso:執行后可以按“Ctrl+z”將此操作調入后臺并暫停
命令bg 1:將后臺暫停的任務恢復啟動
終止進程
Ctrl+C:中斷正在執行的命令。
kill命令:通過PID結束進程
#pgrep -l "sshd" //查詢sshd的PID #ps aux | grep "sshd" //更加詳細的查看PID #kill 2888 //將查詢到的PID進行執行操作 #pgrep -l "sshd" //再次查看時,沒有信息 選項 -9 //強制殺死進程, 如:使用vim打開一個文件,使用Ctrl+z掛起后無法使用kill殺死,則需-9選項(基本所有的kill命令都會使用此選項)killall命令:使用進程名結束進程
(killall -9 vim //結束vim的所有進程)
pkill命令:根據特定條件終止相應的進程。
常用選項:
-
-U:根據進程所屬的用戶名終止相應進程
-
-t:根據進程所在的終端終止相應進程
計劃任務管理
at 一次性計劃任務
使用at命令設置的任務只在指定時間點執行一次,若只指定時間則表示當天的該時間,若只指定日期則表示該日期的當前時間
可以在at交互環境中輸入多條命令,最后按Ctrl+D組合鍵提交
#date //查看時間 #date -s 20170320 //修改系統日期 #date -s 08:20 //修改系統時間 # yum install -y at # systemctl start atd //啟動該程序 # systemctl enable atd # at 08:20 2017-03-20 at> mkdir 123 //輸入完成后Ctrl+d提交 at> <EOT> # atq //任務還未執行時查看狀態。 # atq 2 ? ? ? Thu Dec 12 12:12:00 2019 a root 3 ? ? ? Thu Dec ?5 12:13:00 2019 a root # at -c 3 //查詢第三個任務詳細任務信息 #atrm 3 //查看編號后可以刪除此任務crontab 周期性計劃任務
按照預先設置的時間周期(分鐘、小時、天……)重復執行用戶指定的命令操作,屬于周期性計劃任務。
啟用周期性任務有一個前提條件,即對應的系統服務crond必須已經運行
主要設置文件:
-
全局配置文件,位于文件:/etc/crontab
-
系統默認的設置,位于目錄:/etc/cron.*/
-
用戶定義的設置,位于文件:/var/spool/cron/用戶名
注意全局配置和系統默認配置中的內容一般不需要用戶去修改,用戶只需設置/var/spool/cron/目錄下與本帳號同名的文件即可。
編輯計劃任務:crontab -e [-u 用戶名]
查看計劃任務:crontab -l [-u 用戶名]
刪除計劃任務(整個計劃項目刪除):crontab -r [-u 用戶名]
注意:root用戶可以管理指定用戶的計劃任務,普通用戶只能管理自己的計劃任務。
用戶只需執行“crontab -e”命令后會自動調用文本編輯器(默認為vi)并打開“/var/spool/cron/用戶名”文件,無需手動指定文件位置
crontab任務配置的格式:
| 分鐘 | 取值為從0到59之間的任意整數 |
| 小時 | 取值為從0到23之間的任意整數 |
| 日期 | 取值為從1到31之間的任意整數 |
| 月份 | 取值為從1到12之間的任意整數 |
| 星期 | 取值為從0到7之間的任意整數,0或7代表星期日 |
| 命令 | 要執行的命令或程序腳本 |
說明:
-
前面5個字段用于指定任務重復執行的時間規律,第6個字段用于指定具體的任務內容
-
crontab任務配置記錄中,所設置的命令在“分鐘+小時+日期+月份+星期”都滿足的條件下才會運行
關于時間數值的特殊表示辦法:
* ? 表示該范圍內的任意時間 , ? ?表示間隔的多個不連續時間點 - ? 表示一個連續的時間范圍 / ? 指定間隔的時間頻率使用案例:
0 ?17 ?* ?* ?1-5 周一到周五每天17:00 30 ?8 ?* ?* ?1,3,5 每周一、三、五的8點30分 0 ?8-18/2 ?* ?* ?* 8點到18點之間每2小時 0 ?* ?*/3 ?* ?* 每3天具體案例
每天早上7:50自動開啟sshd服務,22點50時關閉 每隔5天清空一次FTP服務器公共目錄/var/ftp/pub 每周六的7:30時,重新啟動httpd服務 每周一、三、五的17:30時,打包備份/etc/httpd目錄 每月1日與周一到周五的23點重啟web服務 ? [root@localhost root]# crontab -e 50 ?7 ? * * * ? /sbin/service ?sshd ?start 50 ?22 * * * ? /sbin/service ?sshd ?stop 0 ? ?0 ? */5 * * ? /bin/rm -rf /var/ftp/pub/* 30 ?7 ? * * 6 ? /sbin/service ?httpd ?restart 30 17 * * 1,3,5 ? /bin/tar ?jcf ?httpdconf.tar.bz2 ?/etc/httpd/ 0 23 ?1 ? * ?1-5 ? /sbin/service ?httpd ?restartLinux分析和排查系統故障
日志文件分析
日志的功能:用于記錄系統、程序運行中發生的各種事件。通過閱讀日志,有助于診斷和解決系統故障。
日志文件的分類:
-
內核及系統日志(內容最豐富):由系統服務rsyslog統一進行管理,日志格式基本相似。
-
用戶日志:記錄系統用戶登錄及退出系統的相關信息。
-
程序日志:由各種應用程序獨立管理的日志文件,記錄格式不統一。
日志保存位置,默認位于:/var/log 目錄下。
主要日志文件
-
/var/log/messages:記錄Linux內核消息及各種應用程序的公共日志信息,包括啟動、IO錯誤、網絡錯誤、程序故障等。對于未使用獨立日志文件的應用程序或服務,一般都可以從該日志文件中獲得相關的事件記錄信息。
-
/var/log/cron:記錄crond計劃任務產生的事件信息。
-
/var/log/dmesg:記錄Linux系統在引導過程中的各種事件信息。
-
/var/log/maillog:記錄進入或發出系統的電子郵件活
-
/var/log/lastlog:記錄每個用戶最近的登錄事件。
-
/var/log/rpmpkgs:記錄系統中安裝的各rpm包列表信息。
-
/var/log/secure:記錄用戶認證相關的安全事件信息。
-
/var/log/wtmp:記錄每個用戶登錄、注銷及系統啟動和停機事件。
-
/var/run/btmp:記錄失敗的、錯誤的登錄嘗試及驗證事件。
內核及系統日志:rsyslog軟件包提供了rsyslogd程序,分別用于記錄系統內核的消息和各種應用程序的消息。
-
由系統服務 rsyslogd 統一管理
-
軟件包:rsyslog-8.24.0-16.el7.x86_64
-
主要程序:/sbin/rsyslogd
-
配置文件:/etc/rsyslog.conf
用戶日志分析
用戶日志保存了用戶登錄、退出系統等相關信息。
-
/var/log/lastlog:最近的用戶登錄事件
-
/var/log/wtmp:用戶登錄、注銷及系統開、關機事件
-
/var/run/utmp:當前登錄的每個用戶的詳細信息
-
/var/log/secure:與用戶驗證相關的安全性事件
分析工具(命令):
-
users:輸出當前登錄的用戶名稱
-
who:登錄到系統的用戶信息,包括終端類型、登錄日期以及遠程主機
-
w:比who顯示的信息更加詳細,主機運行時間、登錄用戶數量、平均負載等
-
last:用戶最近登錄情況
-
lastb:登錄失敗的用戶記錄
程序日志分析
由相應的應用程序獨立進行管理
Web服務:/var/log/httpd/,文件:access_log、error_log
代理服務:/var/log/squid/,文件:access.log、cache.log、
FTP服務:/var/log/xferlog
分析工具:
-
文本查看、grep過濾檢索、Webmin管理套件
-
中查看
-
awk、sed等文本過濾、格式化編輯工具
-
Webalizer、Awstats等專用日志分析工具
日志并不是完全可靠的,高明的黑客在入侵系統后,經常會打掃現場。解決辦法:日志異地備份。
系統啟動類故障排除
修復MBR扇區故障
MBR即Master Boot Record,主引導記錄,位于硬盤的第一個扇區(512字節),其中包含了系統引導程序、硬盤分區表信息
故障原因
-
病毒、木馬等造成的破壞
-
不正確的分區操作、磁盤讀寫誤操作
故障現象
-
找不到硬盤,啟動中斷
-
無法加載操作系統,開機后黑屏
解決思路
-
應提前作好“異地”備份文件
-
以 CentOS 7安裝光盤引導進入急救模式
-
從備份文件中恢復
案例
關機添加新磁盤 //存放MBR備份數據 # fdisk /dev/sdb //新磁盤分區 # mkfs -t xfs /dev/sdb1 //格式化新磁盤 # mkdir /backup # mount /dev/sdb1 /backup/ //掛載到目錄 # dd if=/dev/sda of=/backup/sda.mbr bs=512 count=1 //備份mbr到其他目錄 # dd if=/dev/zero of=/dev/sda bs=512 count=1 //模擬mbr文件故障 ? operating system not found... ? 單用戶模式:基于現有系統的系統文件,類似windows安全模式 急救模式:基于光盤鏡像文件,windows 安全模式 使用光盤進入急救模式, #mkdir /123 #mount /dev/sdb1 /123 #dd if=/123/sda.mbr of=/dev/sda #reboot修復GRUB引導故障
GRand Unified Bootloader 中文意思為“極好的統一引導器”,是大多數Linux系統默認使用的引導程序
故障原因
-
MBR 中的 GRUB 引導程序遭到破壞
-
grub.conf 文件丟失、引導配置有誤
故障現象
-
系統引導停滯,顯示“grub>” 提示符
解決思路
-
嘗試手動輸入引導命令
-
進入急救模式,重寫或者從備份中恢復 grub.conf
-
向 MBR 扇區中重建 grub 程序
案例:
2.GRUB引導故障 # cd /boot/grub2/ # mv grub.cfg grub.cfg.back # cd /boot/grub/ //centos 6為該命令 # mv grub.conf grub.conf.back //centos 6為該命令 ? # reboot 重啟后出現grub> 說明grub引導文件損壞 重啟進入bios 調整光驅為第一啟動項,進入第三行進行急救模式 #chroot /mnt/sysimage #cd /boot/grub2 #cp grub.cfg.back grub.cfg #grub2-install /dev/sda //安裝grub引導文件到sda中 #exit #關機。調整bios為硬盤啟動,成功啟動系統 ? #cd /boot/grub //centos 6為該命令 #cp grub.conf.back grub.conf //centos 6為該命令 #grub-install /dev/sda //CentOS 6為該命令遺忘root用戶密碼
故障原因:遺忘 root 用戶的密碼
故障現象:無法進行需要 root 權限的管理操作,若沒有其他可用帳號,將無法登錄系統。
解決思路:進入單用戶模式,重設密碼。
案例:
3.重設centos 7root用戶登錄密碼: 方法1:單用戶模式: 開機讀秒時選擇第一行按"e" 在linux16這一行,將之前的"ro",改為"rw init=sysroot/bin/sh",然后按ctrl+x、 輸入:chroot /sysroot 輸入:passwd root //輸入新密碼 exit reboot //重啟系統即可輸入新密碼登錄 方法2: 通過光盤進入急救模式 ? 輸入:chroot /mnt/sysimage passwd root //修改密碼后重啟即可 #exit #reboot ? 實現用戶從單用戶模式進入系統時需密碼驗證: CentOS 7: # grub2-mkpasswd-pbkdf2 # vim /etc/grub.d/00_header //末尾新增行增加以下內容: "cat<<EOF也必須增加" cat <<EOF set superusers='root' password_pbkdf2 root grub.pbkdf2.sha512.10000.69D3A823035956175082925DE93BB731313EFBD32 8232D466FB604D0EC0EC93559543A17785BE08BADA9BC4C3C28012E8C87983670E524266F9A14F639DBD554 .183DC0B75DCBCBEBFF3C464BE9AE7AC27E022B08BB5985DD9B6654E6BAA493D9332FB60B8D5380C159A373 FC599AC2FE8BC902A85281BD938CDE567AF3C4AF58 EOF # grub2-mkconfig -o /boot/grub2/grub.cfg //重新配置文件 ? 也可以直接設置明文密碼: cat <<EOF set superusers='root' password root 123456 EOF # grub2-mkconfig -o /boot/grub2/grub.cfg //重新配置文件文件系統類故障排除
修復文件系統
故障原因
-
非正常關機、突然斷電、設備讀寫失誤等
-
文件系統的超級塊(super-block)信息被破壞
故障現象
-
無法向分區中讀取或寫入數據
-
啟動后提示“Give root password for maintenance”
解決思路
-
根據提示輸入 root 口令,進入修復狀態
-
使用xfs_repair命令進行修復
在linux主機中,可能會因為非正常關機、突然斷電設備數據讀寫異常等原因導致文件系統的破壞,比較常見的是超級塊損壞,他記錄了該文件系統的類型、大小、空閑磁盤塊等
當文件系統超級塊數據損壞時 linux系統無法識別該文件系統 掛載時會出現: “you must specify the filesystem type”
或硬盤已經開機自掛載在系統 超級塊損壞后 啟動系統會提示: “Give root password for maintenance”
在開機字符界面上面會顯示是哪個分區損壞。
案例
修復文件系統: 模擬故障: # fdisk /dev/sdb #mkfs -t xfs /dev/sdb1 #vim /etc/fstab //設置磁盤開機檢測 /dev/sdb1 ? ? ? ? ? ? ? /opt ? ? ? ? ? ? ? ? ? ?xfs ? ?defaults ? ? ? ?0 1 # dd if=/dev/zero of=/dev/sdb1 bs=512 count=4 //在執行時確定該分區未掛載 #reboot ? 重啟后由于sdb1磁盤超級塊損壞,導致系統報錯,無法啟動,這是在當前命令行輸入root用戶密碼進入shell #xfs_repair /dev/sdb1 //centos 7 修復 #fsck -y -t ext4 /dev/sdb1 //修復損壞的超級塊,CentOS 6執行該命令 #reboot //重啟后恢復正常磁盤資源耗盡故障
故障原因
-
磁盤空間已被大量的數據占滿,空間耗盡
-
雖然還有可用空間,但文件數i節點耗盡
故障現象
-
無法寫入新的文件,提示“… : 設備上沒有空間”
-
部分程序無法運行,甚至系統無法啟動
解決思路
-
清理磁盤空間,刪除無用、冗余的文件
-
轉移或刪除占用大量 i 節點的瑣碎文件
-
進入急救模式進行修復
-
為用戶設置磁盤配額
當一個文件系統磁盤空間耗盡后,將無法繼續在該分區創建新的文件數據,比如當根分區/ 中的磁盤耗盡。可能導致部分程序乃至整個系統無法正常啟動或運行不了,因為一些系統啟動的臨時性文件創建不了。
當根分區資源耗盡無法正常啟動系統時可以進入急救模式刪除一些不關緊要的文件,從而減輕磁盤占用率。
案例
I節點故障 一個分區創建了太多的細小目錄文件等將會占用分區的I節點從而系統將不能創建新的文件或目錄 解決方式 ---刪除沒用的文件或目錄或者加大磁盤空間等 創建文件目錄時會提醒: touch:無法觸碰 "設備名稱": 設備上沒有空間 模擬i節點耗盡故障 #fdisk /dev/sdb //分區,大小為3M左右,在系統中通過df查看為24M左右,可容納的I節點為6013個左右 #mkdir /root/123 #mkfs -t ext4 /dev/sdb1 #mount /dev/sdb1 /root/123 使用腳本創建若干空文件,用于占滿分區,模擬i節點故障 #vim /root/123/a.sh //新建shell腳本 以下為腳本內容: #!/bin/bash i=1 while [ $i -le 6013 ] do touch /root/123/file$i let i++ done 保存退出 #sh /root/123/a.sh //執行腳本文件 #mkdir /root/123/aaa //再次創建文件時,提示報錯空間不足 #df -hT //查看掛載情況,發現sdb1磁盤占用100% 修復i節點耗盡故障: #rm -rf /root/123/file* //刪除無關的文件,恢復磁盤i節點數量檢測磁盤壞道
故障原因:磁盤設備中存在壞道(邏輯的或物理的)
故障現象
-
讀取磁盤中的數據時,磁盤設備發出異常聲響。
-
訪問磁盤中的某個文件時,反復讀取且出錯,提示文件損壞
-
對于新建立的分區無法完成格式化
-
系統使用該磁盤時頻繁死機
解決思路
-
檢測硬盤中是否存在壞道
-
修復硬盤,或更換新的硬盤
磁盤壞道分為邏輯壞道和物理壞道兩種
-
邏輯壞道:主要由于軟件操作不當造成 可以用軟件修復
-
物理壞道:只能通過更改磁盤分區或扇區的占用位置來進行改善 排除掉包含有壞道的磁盤空間
檢測磁盤壞道情況(#badblocks -sv /dev/sdb)
機械硬盤的存儲安全性更高,固態硬盤安全性更低。原因是,機械硬盤的修復更加容易,而固態硬盤的修復是很難的。
總結
以上是生活随笔為你收集整理的信安Note_day29的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【成本管理】成本核算
- 下一篇: 关于标识牌的一些简单介绍