别人的Linux私房菜(17)进程管理与SELinux初探
程序在磁盤中,通過用戶的執行觸發。觸發事件時,加載到內存,系統將它定義成進程,給予進程PID,根據觸發的用戶和屬性,給予PID合適的權限。
PID和登陸者的UID/GID有關。父進程衍生出來的進程為子進程,子進程的PPID為父進程。
如使用ps -l查看進程信息。
crontab計劃任務的父進程可能會再次生成強制結束的子進程。
?
Linux程序調用通常為fork-and-exec。以父進程復制產生一樣的子進程,然后子進程以exec方式執行要執行的進程。該子臨時進程加入PPID為父進程PID。
一些進程被觸發后常駐內存,成為服務。
為了方便Linux判斷進程是daemon類型的進程,一些進程的后面加d,如atd,crond等
?
Linux擁有多人多任務的環境,5個命令行界面,和1圖形界面,通過alt+f1-f6切換。切換終端可以通過其他終端重啟出錯的終端。
?
任務放入后臺執行:如:cp file1 file2 &。通過&符號實現。顯示該bash的任務號碼和該任務的PID。
?
/etc/security/limits.conf設置了用戶可以同時登陸的連接數量。
后臺任務ctrl+c不能終止,不能與用戶交互。被觸發的任務來自shell子進程。
?
將后臺任務數據輸出到文件上: tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
目前的任務放到后臺暫停:ctrl+z 如:vim下編輯后ctrl +z 等
jobs查看后臺的任務狀態,-l列出PID等:jobs -l
+代表最近被放到后臺的任務,-代表最近第二個被放到后臺的任務
后臺任務拿到前臺來處理fg。fg %n,n為任務號碼
讓任務在后臺的狀態下變為運行中bg %n,n為任務號碼。后加入&表示后臺任務。
管理后臺中的任務:kill -l找出kill使用的信號有哪些。-1重新讀取,-2取消,ctrl+c,-9強制刪除-15正常終止。
如:kill -9 %3,結束三號任務。
?
任務尚未結束而脫機導致任務中斷,使用at或nohup命令讓任務放置到系統后臺或注銷后能繼續執行。
nohup與終端無關,輸出信息定向到~/nohup.out下。如執行:nohup ./sleep500.sh &。后臺任務注銷后能繼續執行。
?
ps aux查看系統所有進程。ps -lA查看所有系統進程。-l查看自己的進程。
如:ps -l。如:ps aux。查找cron和rsyslog有關的服務號碼:ps aux | egrep '(cron|rsyslog)'
F進程標識,4表示進程權限為root,1表示只執行fork,而沒有實際執行
S進程狀態。R,running,S,sleep,D,不可被喚醒的睡眠狀態,T,停止狀態,Z僵尸狀態。
UID、PID、PPID、C代表CPU的使用率,百分制。PRI/NI代表優先級,越小越優先。
ADDR、SZ、WCHAN都與內存有關。ADDR進程運行的位置,running一般為-,SZ使用掉的內存,WCHAN目前是否運行,-運行。
TTY、TIME進程實際花費CPU的時間。CMD造成此命令的觸發命令。CMD后有<defunct>表示僵尸進程
僵尸進程結束需要reboot,重新啟動systemd就是reboot。systemd為1號進程。
VSZ使用掉的虛擬內存量(KB),RSS該進程占用的固定內存量。STAT進程目前的狀態。
?
top動態查看進程的變化。-d加秒數,-b批量的方式執行top,-n執行幾次,與-b搭配。-p查看某進程的監測。
如每兩秒更新一次top:top -d 2。
top顯示了目前時間,使用時間,登錄人數,平均負載。進程總量,進程狀態。
CPU整體負載,wa表示IOwait,可導致系統變慢。按1可查看每個CPU的負載率
物理內存和虛擬內存的使用量,top輸入命令顯示的地方。
M以內存使用量排序,恢復排序P。退出q。
top信息執行兩次然后輸出:top -b -n 2 > /tmp/top.txt
監測固定PID:top -d 2 -p 12345.
在top中修改NI的值使用r,可是我沒改成。
?
pstree進程樹。-A以ASCII連接。-p列出每個進程PID。-u列出所屬賬號
如:pstree -A列出進程樹相關性。pstree -Aup等。A用來解決連線亂碼。
?
進程信號為1表示SIGHUP,
如重啟rsyslogd:先通過grep找到pid,然后kill -1 pid ,然后通過tail /var/log/messages查看是否完成了重啟(was HUPed)
根據執行命令的名稱來給予信號:killall,如:killall -1 rsyslogd,killall -9(強制) httpd,killall -i -9 bash(-i詢問)
?
PRI優先級,數字低優先級高,由系統控制,用戶更改NI調整優先級。NI影響PRI。(NICE)
nice的值在-20到19的范圍內,root可以修改自己或他人進程的nice。一般用戶只能調整自己的nice值,范圍為0-19,且只能調高。
執行新命令時給予特定的nice值:如啟動vim放入后臺給予nice為5 :nice -n 5 vim &
renice重新調整nice的值,如調整進程12345的nice值為-10:renice -10 12345。
nice的值具有繼承的特點,在父進程和子進程之間傳遞。
?
free查看內存使用情況:如以m為單位進行顯示:free -m。
uname輸出系統的基本信息uname -a。
系統啟動時間與任務負載:uptime,1分5分15分的平均任務負載
追蹤網絡或socket文件:netstat。如列出建立的網絡和unix socket狀態:netstat
分網路連接和unix進程之間的溝通。Proto網絡封包協議,State連接狀態等。RefCnt連接到此socket的進程數量。
netstat -tulnp,查找目前系統上已在監聽的網絡連接和PID號碼
分析內核產生的信息:dmesg。如開機時對硬件資源的監測等。:dmesg | grep sda
vmstat系統監測資源變化。如統計CPU目前的狀態,每秒一次一共三次:vmstat ?1 3
procs:r :等待運行中的程序數量;b:不可被喚醒的程序數量。
memory:swpd:虛擬內存; free:未被使用; buff:緩沖內存; cache:高速緩存。
swap:si:程序取出的量; so:內存不足而將沒用到的程序寫入的 swap 的容量。
io:bi:讀入的區塊數量; bo:寫入的區塊數量。
system:in:每秒被中斷的程序次數; cs:每秒鐘進行的事件切換次數;
CPU:us:非核心層的 CPU 使用狀態; sy:核心層所使用的 CPU 狀態; id:閑置的狀態; wa:等待 I/O 所耗費的 CPU 狀態; st:被虛擬機器 (virtual machine) 所用的 CPU 使用狀態 (2.6.11 以后才支持)。
系統上磁盤的讀寫狀態:vmstat -d
?
設置了SUID之后,觸發獲得進程產生PID時,該PID產生通過SUID給予PID特殊權限,使執行者暫時獲得文件擁有者的權限。
可以通過pstree -uA查看進程情況。
查詢整個系統SUID/SGID文件:find / -perm /6000
?
進程存在于內存中,內存數據寫入到/proc/*這個目錄。
各個進程的PID以目錄的形式存在于/proc中。詳細/proc/1/下的內容列出如下:
http://cn.linux.vbird.org/linux_basic/0440processcontrol_4.php
cmdline啟動了systemd進程。
?
?由文件找出正在使用該文件的進程:fuser。
-u列出擁有者,-m文件提到文件系統頂部,-v列出進程命令的完整性,-k找出使用該文件目錄的PID,并試圖發信號-9(SIGKILL)-i詢問,和-k配合。
?找出目前所在目錄使用的PID,賬號,權限:fuser -uv .
ACCESS項目內容介紹如:
1 c :此程序在當前的目錄下(非次目錄); 2 e :可被觸發為運行狀態; 3 f :是一個被開啟的文件; 4 r :代表頂層目錄 (root directory); 5 F :該文件被開啟了,不過在等待回應中; 6 m :可能為分享的動態函式庫; View Code找到所有使用到/proc文件系統的進程:fuser -muv /proc。
?取消掛載時的先停止進程如取消掛載/home:fuser -mki /home
?找到/run下的FIFO文件:find /run -type p;
?
?lsof:列出被進程使用的文件名
-a同時成立,-U僅列出UnixLike系統的socket文件類型,-u用戶名+d目錄。
如列出系統上已經被開啟的文件與設備:lsof
列出root用戶下進程使用的的socket文件:lsof -u root -a -U
列出系統被使用的外部設備:lsof +d /dev
列出root用戶進程下bash開啟的文件lsof -u root | grep bash
?
?pidof找出某個正在執行進程的PID
列出systemd和rsyslogd兩個程序的PID:pidof systemd rsyslogd
?
?SELinux(安全強化的Linux),在進程、文件等詳細配置權限時依據的一個內核模塊。
傳統文件的讀寫方式為自主訪問控制DAC以身份為依據,SELinux引入強制訪問控制MAC,控制的主體變為進程,針對進程和文件資源管理權限。
SELinux的主體為進程,目標為文件系統,策略為targeted(針對網絡,默認),minimum(target自定義),mls(完整的SELinux限制)。
安全上下文為,放置在文件的inode中,進行權限rwx對比。ls -Z查看安全上下文信息。
?安全上下文分身份識別,角色,類型等信息。
身份識別:unconfined_u不受限制的用戶(由不受限制的進程產生的文件)。system_u(系統產生的文件)
?角色:數據類型,屬于進程,文件資源或代表用戶。undefined_r代表的是文件或目錄等資源。system_r代表進程(一般用戶也會被指定此)。
?類型:domain在主體進程上稱為域,type在文件資源上稱為類型,
?
進程的SELinux相關信息查看:ps -eZ
使用targeted策略,系統賬號進程常是身份system_u,角色system_r。
查看crond進程的安全上下文內容:找到進程類型的domain:ps -eZ | grep cron。(為crond_t)
查看執行文件、配置文件等的安全上下文內容:ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d
(crond_exec_t類型產生的進程域為crond_t,crond_t可以讀取的文件類型設置為system_cron_spool_t目標文件)
觸發可執行文件后,通過該文件的類型type產生進程,該進程因type和策略規則,設定進程域domain。
該域通過策略設置,可以該進程讀取的文件類型type。最后檢查DAC限制。
?
SELinux的三種模式:
強制模式enforce:SELinux運行中,正確限制domain/type
寬容模式permissive:SELinux運行中,不限制,但有警告信息寫入log
關閉模式disable:SELinux沒有實際運行。
查看crond與bash的進程是否受限:ps -eZ | grep -E "cron|bash"
進程的domain字段為unconfined_t表示不受限。
查看目前的SELinux模式:getenforce
列出SELinux使用的策略,模式,是否啟用信息:sestatus
SELinux的配置文件在/etc/selinux/config下。修改默認策略可通過該文件的修改,修改策略需要重新啟動。
修改模式時,強制模式和寬容模式之間切換無需重啟,其他需要重啟。因SELinux整合在內核中。
寬容模式0和強制模式1之間的切換:setenforce:如:setenforce 0轉換為寬容模式
Disable關閉模式切換成Enforcing強制模式可能有權限錯誤,通過restorecon -Rv / 還原SELinux的文件類型。
?
SELinux內各個規則的布爾值查詢:getsebool -a列出所有。
列出SELinux在目前策略的統計狀態:seinfo -u列出身份識別,-r列出角色,-t列出類型。
(需要安裝,在package 下的setools-con...)
找出crond_t能夠讀取的SELinux類型:sesearch -A -s crond_t | grep spool
-A用于顯示允許讀取或者放行的信息。-s主體類型,-t目標類型,-b布爾值
找出domain類型為crond_t能否讀取的文件類型admin_home_t:sesearch?-A -s crond_t | grep?admin_home_t
?
查找httpd_enable_homedirs的規則開關:semanage boolean -l | grep?httpd_enable_homedirs
列出httpd_enable_homedirs規則當中,主體進程能夠讀取的文件類型:sesearch -A -b httpd_enable_homedirs
修改SELinux規則的bool值。查找:getsebool httpd_enable_homedirs。修改:setsebool -P?httpd_enable_homedirs 1(-P寫入配置文件)
?
chcon手動修改文件的SELinux類型。-t接安全上下文欄位,-v顯示變動結果,--reference=范例文件。
如:chcon -v -t net_conf_t checktime#使checktime的類型變為net_conf_t?
?如:chcon -v --reference=/etc/shadow checktime#使類型和shadow 相同。
?
?restorecon讓文件恢復正確的SELinux -R連同子目錄一起修改,-v過程顯示到屏幕
如:將目錄下的文件恢復默認SELinux類型:restorecon -Rv /etc/cron.d
?
semanage查詢默認增加修改刪除SELinux的類型。
fcontext 用于安全上下文方面的用途,-a增加,-m修改,-d刪除,-l查詢
如查詢/etc ?/etc/cron.d的默認SELinux類型:semanage?fcontext -l | grep?-E "^/etc |^/etc/cron "
修改目錄的默認SELinux類型:semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
?
CentOS7提供了一些服務記錄SELinux產生的錯誤,
settroubleshoot將產生的錯誤信息寫入/var/log/messages與/var/log/setroubleshoot/*中。
settroubleshootd是由auditd調用audispd,啟動sedispatch程序通過將auditd信息轉換成settroubleshootd的信息實現。
?
SELinux文件的問題,可以先通過setenforce 0,進入寬容模式,嘗試訪問,然后查看日志vim /var/log/message,找尋問題和解決方案。
通過sealert -l xxxxxxxx查看解決方案情況概率。,然后修改等操作。
?
轉載于:https://www.cnblogs.com/bai2018/p/10759982.html
總結
以上是生活随笔為你收集整理的别人的Linux私房菜(17)进程管理与SELinux初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用命令将单个java文件打包为jar
- 下一篇: Ubuntu 18.04搭建Git服务器