• 别人的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查看解决方案情况概率。,然后修改等操作。

  • 相关阅读:
    面向对象三大特征------多态
    接口的概念
    面向对象(抽象类)
    面向对象三大特征------继承
    面向对象三大特征------封装
    成员变量和局部变量的区别
    20180822 ajax post 方式请求
    20180815 权限
    20180815 视图
    20180814 夜晚小目标
  • 原文地址:https://www.cnblogs.com/bai2018/p/10759982.html
Copyright © 2020-2023  润新知