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