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

  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/bai2018/p/10759982.html
Copyright © 2011-2022 走看看