别人的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值