当前位置: 首页 > news >正文

应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇)

目录

  • 概述
  • lscpu-显示有关CPU架构的信息
  • uname-查看系统信息
  • lsmod-输出加载的所有模块
  • lastb-输出最后登录失败的用户
  • last-展示用户最近登录信息
  • lastlog-展示所有用户最后的登录时间
  • systemctl-系统服务,开机自启排查
  • crontab-计划任务
    • 选项
  • history-查看历史命令
    • 选项
    • 常用选项
  • ps-查看进程
    • 标题行解释
    • 选项
    • 常用选项组合
      • 显示所有用户的所有进程信息(-aux)
      • 以全格式显示进程信息(-ef)
      • 显示详细的线程信息(-eLf)
      • 自定义输出格式(-eo)
      • 显示指定进程ID的详细信息
      • 显示指定用户的所有进程信息
      • 按CPU使用率降序排列进程信息(--sort)
  • lsof-显示Linux系统当前已打开的所有文件列表
    • 标题行解释
    • 选项
    • 常用选项
  • top-查看部分进程并排序
    • 标题行解释
    • 选项
    • 常用选项
  • kill-杀死进程
  • strace-监控进程
    • 选项
    • 常用选项
  • fuser-使用文件或文件结构识别进程
  • su
    • 选项
    • 常用选项
  • sudo
    • 选项
    • 常用选项
  • 参考


概述

本文介绍下在应急响应过程中,linux系统下排查系统、进程、服务可能用到的命令,有些命令选项很多,读者可以仅看常用选项。不涉及内存、进程注入、rootkit等高级攻击的排查。

lscpu-显示有关CPU架构的信息

在这里插入图片描述

uname-查看系统信息

-a, --all 按顺序打印全部信息,如果 -p 和 -i 的信息是未知,那么省略。
-s, --kernel-name 打印内核名称。
-n, --nodename 打印网络节点主机名称。
-r, --kernel-release 打印内核release。
-v, --kernel-version 打印内核版本。
-m, --machine 打印机器名称。
-p, --processor 打印处理器名称。
-i, --hardware-platform 打印硬件平台名称。
-o, --operating-system 打印操作系统名称。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。

在这里插入图片描述

lsmod-输出加载的所有模块

在这里插入图片描述

  • Module:模块的名称。
  • Size:模块的大小。
  • Used:依赖模块的个数。
  • by:依赖模块的内容。

lastb-输出最后登录失败的用户

在这里插入图片描述

last-展示用户最近登录信息

常用-n参数,n为展示的数量
在这里插入图片描述

lastlog-展示所有用户最后的登录时间

在这里插入图片描述

systemctl-系统服务,开机自启排查

systemctl命令 是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。

任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status httpd.service (服务详细信息)
systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动服务service httpd startsystemctl start httpd.service
停止服务service httpd stopsystemctl stop httpd.service
重启服务service httpd restartsystemctl restart httpd.service
重载服务service httpd reloadsystemctl reload httpd.service

举例

systemctl list-units --type=service

在这里插入图片描述
查看自启服务

systemctl list-units --type=service | grep enabled

在这里插入图片描述

crontab-计划任务

linux自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

选项

-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。

Linux下的任务调度分为两类: 系统任务调度用户任务调度

系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab文件包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

前四行是用来配置crond任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

举例
在这里插入图片描述

每月2号和每周五,每两分钟以lady_killer用户身份执行一次touch /tmp/lady_killer_test.txt
在这里插入图片描述
可以看到已经创建成功
在这里插入图片描述

history-查看历史命令

默认读取~/.bash_history中的历史命令

选项

-c 清空历史列表。
-d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。
-a 将当前终端的历史记录行添加到历史记录文件。
-n 将尚未从历史文件中读取的历史行追加到当前历史列表中。
-r 读取历史文件,并将其内容附加到历史列表中。
-w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。
-p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。
-s 将每个arg作为单个条目附加到历史记录列表。

常用选项

查看最近5条
在这里插入图片描述
在命令行中,可以使用符号!执行指定序号的历史命令
在这里插入图片描述
接下来看看攻击者删除历史命令的方法
在这里插入图片描述
方法1:

echo '' > ~/.bash_history

在这里插入图片描述
可以看到留下了清理痕迹

方法2:

vim ~/.bash_history

在这里插入图片描述
依然留下了清理痕迹
方法3:

history -c

在这里插入图片描述
命令行terminal无法查看,但文件中还存在
方法4:

rm ~/.bash_history && touch ~/.bash_history

在这里插入图片描述
依然留下了清理痕迹

总之,通过清理痕迹的方式能够让应急同学看不到执行了什么命令,但最后的清理动作会保留。
应急同学可以学习一下history加固相关知识,增加条数、IP、执行用户,以及使用chattr防止篡改。

ps-查看进程

ps实用程序显示标题行,然后显示包含有关所有具有控制终端的进程的信息的行。

通过使用-a、-G、-g、-p、-T、-t、-U和-u选项的任意组合,可以选择显示不同的进程集。如果给出了多个这些选项中的一个以上,则ps将选择满足至少一个给定选项的所有进程

对于已选择显示的进程,ps通常会每个进程显示一行。对于某些进程,-M选项可能会导致多个输出行(每个线程一行)。默认情况下,所有这些输出行首先按控制终端排序,然后按进程ID排序。-m、-r和-v选项将更改排序顺序。如果给出了多个排序选项,则所选进程将按最后指定的排序选项进行排序。

对于已选择显示的进程,所选择要显示的信息是基于一组关键字来选择的。默认输出格式包括每个进程的进程ID、控制终端、CPU时间(包括用户和系统时间)、状态和关联命令。

标题行解释

  • %cpu:进程的CPU利用率;时间基准因计算方式不同而异,因此所有%cpu字段的总和可能超过100%。
  • %mem:该进程使用的实际内存的百分比。
  • flags:与进程关联的标志,如包含文件<sys/proc.h>中所示:
    • P_ADVLOCK 0x00001 进程可能持有 POSIX 推荐锁
      P_CONTROLT 0x00002 拥有控制终端
      P_LP64 0x00004 进程是 LP64 的
      P_NOCLDSTOP 0x00008 子进程停止时没有 SIGCHLD
      P_PPWAIT 0x00010 父进程正在等待子进程 exec/exit
      P_PROFIL 0x00020 已开始分析
      P_SELECT 0x00040 正在选择;唤醒/等待危险
      P_CONTINUED 0x00080 进程被停止并继续执行
      P_SUGID 0x00100 上次执行以来设置过 ID 特权
      P_SYSTEM 0x00200 系统进程:没有信号、统计信息或交换
      P_TIMEOUT 0x00400 在休眠期间计时超时
      P_TRACED 0x00800 被调试的进程正在被跟踪
      P_WAITED 0x01000 调试进程一直在等待子进程
      P_WEXIT 0x02000 正在退出
      P_EXEC 0x04000 进程调用了 exec
      P_OWEUPC 0x08000 在下一个 ast 调用时,进程欠一个 addupc() 调用
      P_WAITING 0x40000 进程正在进行 wait()
      P_KDEBUG 0x80000 此进程开启了 Kdebug 跟踪
  • lim:通过调用 setrlimit(2) 指定的内存使用软限制。
  • lstart:显示命令开始的确切时间。
  • nice:进程调度增量(参见 setpriority(2))。
  • rss:进程的实际内存(驻留集)大小,以1024字节单位表示。
  • start:命令开始的时间。如果命令开始不到24小时,会使用“%l:ps.1p”格式来显示开始时间。如果命令开始不到7天,会使用“%a6.15p”格式来显示开始时间。否则,会使用“%e%b%y”格式来显示开始时间。
  • state字段给出了进程的状态信息。第一个字符表示进程的运行状态:
    • I:表示处于空闲状态(休眠时间超过约20秒)。
      R:表示可运行的进程。
      S:表示休眠状态,休眠时间不超过约20秒。
      T:表示停止的进程。
      U:表示进程正在进行不可中断的等待。
      Z:表示死亡进程(“僵尸”进程)。
      +:进程位于控制终端的前台进程组中。
      <:进程已提高CPU调度优先级。
      >:进程已指定内存需求的软限制,并且当前超过该限制;这样的进程不会被交换出去。
      A:进程请求随机页面替换(例如,来自vadvise(2)的VA_ANOM,比如lisp(1)在进行垃圾回收时)。
      E:进程正在尝试退出。
      L:进程在核心中锁定了页面(例如,用于原始I/O)。
      N:进程降低了CPU调度优先级(参见setpriority(2))。
      S:进程要求FIFO页面替换(例如,来自vadvise(2)的VA_SEQL,比如使用虚拟存储器按顺序访问大量数据的大型图像处理程序)。
      s:进程是会话领导者。
      V:进程在vfork(2)期间被挂起。
      W:进程已被交换出去。
      X:进程正在被跟踪或调试。
  • tt字段是控制终端的路径名的缩写,如果有的话。缩写由/dev/tty后面的三个字母组成,对于控制台来说是“con”。如果该进程无法访问该控制终端(即已被撤销),则后面会加上“-”。
  • wchan字段指示进程等待的事件(系统中的地址)。当以数字形式打印时,地址的前部分会被修剪掉,并以十六进制打印,例如,0x80324000会打印为324000。
  • acflag:记账标志(别名 acflg)
    args:命令及其参数
    comm:命令
    command:命令及其参数
    cpu:短期 CPU 使用因子(用于调度)
    etime:已运行的时间
    flags:进程的标志,用十六进制表示(别名 f)
    gid:进程的组 ID(别名 group)
    inblk:总读取的块数(别名 inblock)
    jobc:作业控制计数
    ktrace:跟踪标志
    ktracep:跟踪的 vnode
    lim:内存使用限制
    logname:启动会话的用户登录名
    lstart:启动时间
    majflt:总页面错误
    minflt:总页面回收
    msgrcv:接收的消息总数(从管道/套接字读取)
    msgsnd:发送的消息总数(写入管道/套接字)
    nice:nice 值(别名 ni)
    nivcsw:总的非自愿上下文切换
    nsigs:接收的信号总数(别名 nsignals)
    nswap:总的换入/换出次数
    nvcsw:总的自愿上下文切换
    nwchan:等待通道(作为地址)
    oublk:总写入的块数(别名 oublock)
    p_ru:资源使用情况(仅对僵尸进程有效)
    paddr:交换地址
    pagein:页面输入(与 majflt 相同)
    pgid:进程组号
    pid:进程 ID
    ppid:父进程 ID
    pri:调度优先级
    prsna:persona
    re:核心驻留时间(以秒为单位;127 = 无限)
    rgid:真实组 ID
    rss:常驻内存集大小
    ruid:真实用户 ID
    ruser:用户名称(来自 ruid)
    sess:会话 ID
    sig:挂起的信号(别名 pending)
    sigmask:阻塞的信号(别名 blocked)
    sl:睡眠时间(以秒为单位;127 = 无限)
    start:启动时间
    state:符号化的进程状态(别名 stat)
    svgid:从 setgid 可执行文件中保存的 gid
    svuid:从 setuid 可执行文件中保存的 UID
    tdev:控制终端设备号
    time:累计 CPU 时间,用户 + 系统(别名 cputime)
    tpgid:控制终端进程组 ID
    tsess:控制终端会话 ID
    tsiz:文本大小(以 K 字节为单位)
    tt:控制终端名称(两个字母缩写)
    tty:控制终端的完整名称
    ucomm:用于记账的名称
    uid:有效用户 ID
    upr:从系统调用返回时的调度优先级(别名 usrpri)
    user:用户名称(根据用户 ID)
    utime:用户 CPU 时间(别名 putime)
    vsz:虚拟大小(以 K 字节为单位)(别名 vsize)
    wchan:等待通道(作为符号名称)
    wq:工作队列线程的总数
    wqb:被阻塞的工作队列线程数
    wqr:正在运行的工作队列线程数
    wql:工作队列限制状态(C = 受限制的线程限制,T = 总线程限制)
    xstat:退出或停止状态(仅对停止或僵尸进程有效)

选项

-A:显示其他用户进程的信息,包括那些没有控制终端的进程。
-a:显示其他用户进程以及您自己的进程信息。这将跳过没有控制终端的进程,除非同时指定了-x选项。
-C:通过使用“原始”CPU计算来改变CPU百分比的计算方式,该计算方式忽略“常驻”时间(通常没有影响)。
-c:将“command”列的输出更改为仅包含可执行文件名,而不是完整的命令行。
-d:类似于-A,但排除会话领导者。
-E:同时显示环境变量。这不会反映进程启动后的环境变化。
-e:与-A相同。
-f:显示uid、pid、父进程pid、最近的CPU使用率、进程启动时间、控制终端、已用CPU时间以及关联的命令。如果还使用了-u选项,则显示用户名而不是数字UID。当使用-o或-O在-f之后进行显示时,命令字段不像其他格式那样被严重截断。
-G:显示正在以指定真实组ID运行的进程的信息。
-g:显示具有指定进程组领导者的进程信息。
-h:根据需要重复打印信息标题,以保证每页信息有一个标题。
-j:打印与以下关键词相关联的信息:用户、pid、ppid、pgid、sess、jobc、state、tt、time和command。
-L:列出可用于-O和-o选项的关键词集。
-l:显示与以下关键词相关联的信息:uid、pid、ppid、flags、cpu、pri、nice、vsz=SZ、rss、wchan、state=S、paddr=ADDR、tty、time和command=CMD。
-M:打印与每个任务相对应的线程。
-m:按内存使用进行排序,而不是按控制终端和进程ID的组合排序。
-O:在默认信息显示中,在进程ID之后添加与空格或逗号分隔的关键词列表相关的信息。关键词可以用等号('=')和字符串附加。这将导致打印的标题使用指定的字符串而不是标准标题。
-o:显示与空格或逗号分隔的指定关键词列表相关联的信息。也可以以多个-o选项的形式给出多个关键词。关键词可以用等号('=')和字符串附加。这将导致打印的标题使用指定的字符串而不是标准标题。如果所有关键词的标题文本为空,将不会写入标题行。
-p:显示与指定进程ID匹配的进程信息。
-r:按当前CPU使用率进行排序,而不是按控制终端和进程ID的组合排序。
-S:通过将所有退出的子进程时间累加到其父进程中,改变进程时间的计算方式。
-x: ps命令会列出所有与当前用户相关的进程,无论是通过终端启动的还是通过其他方式启动的。

常用选项组合

显示所有用户的所有进程信息(-aux)

包括进程ID、CPU使用率、内存使用率等。

ps -aux

在这里插入图片描述

以全格式显示进程信息(-ef)

包括进程ID、父进程ID、用户、状态、运行时间、终端等。

ps -ef

在这里插入图片描述

显示详细的线程信息(-eLf)

ps -eLf:,包括线程ID、优先级、状态、CPU使用率等。
在这里插入图片描述

自定义输出格式(-eo)

只显示进程ID、父进程ID、命令、CPU使用率和内存使用率。

ps -eo pid,ppid,cmd,%cpu,%mem

在这里插入图片描述

显示指定进程ID的详细信息

ps -p <PID> -f

在这里插入图片描述

显示指定用户的所有进程信息

ps -u <USER>

在这里插入图片描述

按CPU使用率降序排列进程信息(–sort)

ps -aux --sort=-%cpu

在这里插入图片描述

lsof-显示Linux系统当前已打开的所有文件列表

标题行解释

在这里插入图片描述

  • COMMAND: 这是打开文件的进程的名称。
  • PID: 这是打开文件的进程的进程 ID。
  • TID: 这是线程ID。这个字段只在 -K 选项(列出内核线程)被使用时才会显示。
  • USER: 这是打开文件的进程的所有者的用户名。
  • FD: 这是文件描述符,它是进程用来访问文件的句柄。常见的值包括 cwd(当前工作目录)、txt(程序文本(代码和数据))、err(标准错误)、等等。
  • TYPE: 这是文件的类型。常见的类型包括 DIR(目录)、REG(常规文件)、CHR(字符设备)、BLK(块设备)、FIFO(先进先出队列)、SOCK(套接字)等。
  • DEVICE: 这是设备号。对于磁盘文件,这通常是设备的主设备号和次设备号。
  • SIZE/OFF: 对于常规文件,这是文件的大小。对于网络文件,这是本地和远程的网络地址。
  • NODE: 对于网络文件,这是本地和远程的网络地址。对于UNIX域套接字,这是套接字的i-node号。
  • NAME: 这是打开的文件的名称。对于网络文件,这是本地和远程的网络地址。

选项

-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息

常用选项

列出指定进程号所打开的文件

lsof -p 636

在这里插入图片描述
获取端口对应的进程

lsof -i:8082

在这里插入图片描述
列出目录下被打开的文件和对应进程

lsof /elkeid/mongodb

在这里插入图片描述

top-查看部分进程并排序

动态实时显示进程信息

标题行解释

  • PID (Process ID): 进程的唯一标识符,用于区分不同的进程。
  • USER: 启动进程的用户
  • PR (Priority): 进程的调度优先级。
  • NI (Nice value): 进程的优先级,负值表示更高的优先级,正值表示更低的优先级。
  • VIRT (Virtual Image): 进程占用的虚拟内存大小,包括代码、数据和共享库等。
  • RES (Resident Size): 进程实际使用的物理内存大小(非交换内存)。
  • SHR (Shared Memory): 进程使用的共享内存大小。
  • S (Status): 进程的状态,包括运行态 ®、睡眠态 (S)、僵死态 (Z) 等。
  • %CPU: 进程的 CPU 使用率
  • %MEM: 进程的内存使用率
  • TIME+: 进程占用 CPU 时间的累计值。
  • COMMAND: 启动进程的命令名称及参数

选项

-d, --delay: 指定刷新时间间隔,单位为秒。

-n, --iterations: 指定刷新次数后退出 top。

-b, --batch: 使用批处理模式运行 top,适用于将输出传递给其他程序。

-c, --command: 显示完整的命令行。

-u, --user: 显示指定用户的进程信息。

-p, --pid: 显示指定进程 ID 的信息。

-H, --threads: 显示线程信息。

-i, --ignore-case: 在排序时忽略大小写。

-o, --old-style: 启用旧风格的输出格式。

-C, --no-command: 隐藏命令名称和参数。

-w, --width: 指定输出宽度。

-P, --sort-field: 按指定字段排序(如 %CPU、%MEM)。

常用选项

显示完整命令行

top -c

在这里插入图片描述

kill-杀死进程

-s sig 信号名称。
-n sig 信号名称对应的数字。
-l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。
-L 等价于-l选项。

在这里插入图片描述

使用9)SIGKILL杀死进程

kill -9 30634

在这里插入图片描述

strace-监控进程

选项

-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column 设置返回值的输出位置.默认 为40.
-e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]…
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\.
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e strace=signal 跟踪所有与系统信号有关的 系统调用
-e trace=ipc 跟踪所有与进程通讯有关的系统调用
-e abbrev=set 设定strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set 将指定的系统调用的参数以十六进制显示.
-e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5
-e write=set 输出写入到指定文件中的数据.
-o filename 将strace的输出写入文件filename
-p pid 跟踪指定的进程pid.
-s strsize 指定输出的字符串的最大长度.默认为32.文件名一直全部输出.
-u username 以username的UID和GID执行被跟踪的命令

常用选项

统计系统调用

strace -c ./test

test.c

#include <stdio.h>int main()
{int a;scanf("%d", &a);printf("%09d\n", a);return 0;
}

在这里插入图片描述

跟踪进程

strace -p 4776

在这里插入图片描述

fuser-使用文件或文件结构识别进程

-a:显示命令行中指定的所有文件;
-k:杀死访问指定文件的所有进程;
-i:杀死进程前需要用户进行确认;
-l:列出所有已知信号名;
-m:指定一个被加载的文件系统或一个被加载的块设备;
-n:选择不同的名称空间;
-u:在每个进程后显示所属的用户名。

查看文件进程

fuser /usr/bin/python

在这里插入图片描述

查看所属的用户

fuser -u /usr/bin/python

在这里插入图片描述

su

切换到指定用户,没有时默认为root

选项

-m, -p, --preserve-environment: 不重置环境变量
-g, --group : 指定主要组
-G, --supp-group : 指定附加组
-, -l, --login: 将 shell 设置为登录 shell
-c, --command : 使用 -c 将单个命令传递给 shell
–session-command : 使用 -c 将单个命令传递给 shell,并且不创建新会话
-f, --fast: 对于 csh 或 tcsh,传递 -f 给 shell
-s, --shell : 如果 /etc/shells 允许,使用指定的 shell 运行
-h, --help: 显示帮助信息并退出
-V, --version: 输出版本信息并退出

常用选项

su - 用户名,这样可以直接切换到该用户家目录
在这里插入图片描述

sudo

选项

-A, --askpass: 使用辅助程序提示输入密码
-b, --background: 在后台运行命令
-C, --close-from=num: 关闭所有文件描述符 >= num
-E, --preserve-env: 运行命令时保留用户环境
–preserve-env=list: 保留特定的环境变量
-e, --edit: 编辑文件而不是运行命令
-g, --group=group: 以指定的组名或组ID运行命令
-H, --set-home: 将 HOME 变量设置为目标用户的主目录
-h, --help: 显示帮助信息并退出
-h, --host=host: 在主机上运行命令(如果插件支持)
-i, --login: 以目标用户的登录 shell 运行;也可以指定一个命令
-K, --remove-timestamp: 完全移除时间戳文件
-k, --reset-timestamp: 使时间戳文件失效
-l, --list: 列出用户的权限或检查特定命令;使用两次以获取更长的格式
-n, --non-interactive: 非交互模式,不会提示输入
-P, --preserve-groups: 保持组向量而不是设置为目标用户的组
-p, --prompt=prompt: 使用指定的密码提示
-r, --role=role: 使用指定角色创建 SELinux 安全上下文
-S, --stdin: 从标准输入读取密码
-s, --shell: 以目标用户的 shell 运行;也可以指定一个命令
-t, --type=type: 使用指定类型创建 SELinux 安全上下文
-T, --command-timeout=timeout: 在指定的时间限制后终止命令
-U, --other-user=user: 在列表模式下,显示用户的权限
-u, --user=user: 以指定的用户名或用户ID运行命令(或编辑文件)
-V, --version: 显示版本信息并退出
-v, --validate: 更新用户的时间戳而不运行命令
–: 停止处理命令行参数

常用选项

后面接命令,以root权限运行
在这里插入图片描述

以root用户,交互式执行

sudo -i

在这里插入图片描述
更多命令学习:
应急响应-主机安全之文件相关命令(Linux操作系统)

参考

《网络安全应急响应技术实战指南》

相关文章:

应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇)

目录 概述lscpu-显示有关CPU架构的信息uname-查看系统信息lsmod-输出加载的所有模块lastb-输出最后登录失败的用户last-展示用户最近登录信息lastlog-展示所有用户最后的登录时间systemctl-系统服务&#xff0c;开机自启排查crontab-计划任务选项 history-查看历史命令选项常用…...

java中RSA分段加解密及Data must not be longer than异常处理

谈到RSA非对称加密&#xff0c;作为开发的我们第一想到的是安全&#xff0c;几乎不会被破解&#xff0c;以及公钥加密&#xff0c;私钥解密这些。在Java代码中&#xff0c;我们常使用一些现成的工具类如hutool中提供的工具类、网上在线的或者博客上的RSAUtils工具类来实现公钥私…...

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…...

Kubernetes-1.22.0 可视化部署

目录 Kubeadm方式部署3master&#xff0c;2work集群&#xff08;Kubernetes-1.22.0&#xff09;-CSDN博客 1. 官方Dashboard 2. Kuboard 部署 3. Rainbond 部署 4. Kubesphere 部署 1. 官方Dashboard kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/v2…...

在 vue3 中动态路由问题记录

第一种 如果这样子的话需要加上 /* vite-ignore / ,但是在这样用这行部署服务器上跳转会有问题 component: () > import(/ vite-ignore */ ../views/ e.component .vue) 第二种 // 解决跳转问题const modeules imporet.meta.glob(/views/**/**.vue)component: modules…...

进程编程及其函数的使用

1. 创建进程 创建进程的核心操作是使用 fork() 系统调用。 1.1 fork() 系统调用 fork() 创建一个新进程&#xff08;子进程&#xff09;&#xff0c;新进程几乎是父进程的完整拷贝。fork() 返回两次&#xff1a; 在父进程中&#xff0c;返回子进程的 PID。在子进程中&#…...

为什么funnel图在邮件中不显示

在电子邮件中嵌入的Funnel图或其他图表可能不显示的原因有以下几种&#xff1a; 1. 邮件客户端对外部内容的限制 大多数邮件客户端为了安全&#xff0c;会阻止从外部服务器加载的内容&#xff0c;如图片、脚本或嵌入式图表。Funnel图通常是通过链接或外部脚本生成的&#xff…...

C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

目录 题目要求 代码思路 代码实现 题目要求 写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" &#xff1b;s2 "BCDAA" &#xff0c;返回1 s1 "AABcd" &#xff1b;s2 "BCDAA" …...

白骑士的Matlab教学实战项目篇 4.4 机器学习与AI

系列目录 上一篇&#xff1a;白骑士的Matlab教学实战项目篇 4.3 控制系统设计 机器学习与人工智能&#xff08;AI&#xff09;是当前技术发展的前沿领域&#xff0c;通过数据驱动的模型和算法&#xff0c;可以解决许多复杂的问题。MATLAB 提供了丰富的工具和函数&#xff0c;支…...

事件监控模块——Channel模块

这个模块就是 记录文件描述符 和 想要监控的事件&#xff0c;实际就绪的事件&#xff0c;以及事件发生之后要怎么做&#xff0c;判断有没有监控这个事件&#xff0c;获取事件。 class Poller; class EventLoop; class Channel {private:int _fd;EventLoop *_loop;uint32_t _ev…...

OCR调研

OCR调研 一、介绍 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…...

数据结构(学习版)

考纲 (一)数据结构部分; 线性表栈、队列、数组查找和内部排序树和图 (二)计算机算法设计部分: 递归与分省策路、回溯法贪心算法、分支限界法、动态规划算法设计中的数据结构运用 (三)程序设计基础(C或C)部分: 基本数据类型、各种运算符和表达式、基本控制结构。数组的定义…...

除了知云文献翻译外,这几款翻译工具值得推荐!

近年来&#xff0c;市面上涌现出众多优秀的文献翻译工具&#xff0c;其中知云文献翻译凭借其强大的功能受到了广泛好评。然而&#xff0c;除了知云文献翻译外&#xff0c;还有几款翻译工具同样值得推荐。今天&#xff0c;就让我们一起来了解一下&#xff01; Foxit在线翻译 链…...

Element UI动态实现面包屑导航~

思路&#xff1a;监听路由变化&#xff0c;在路由规则中添加meta然后在组件中渲染。 import Vue from "vue" import VueRouter from "vue-router" Vue.use(VueRouter) // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 const origin…...

安科瑞Acrel-2000ES储能能量管理系统在新型电力系统下分布式储能的研究

摘要&#xff1a;传统电力系统的结构和运行模式在以新能源为主体的新型电力系统中发生了巨大的变化&#xff0c;分布式储能作为电力系统中重要的能量调节器&#xff0c;也迎来了新的发展机遇。立足于储能技术发展现状&#xff0c;分析了分布式储能技术特点及在清洁可再生能源方…...

Git 逆转时光:版本回退操作详解

git 版本回退操作详解 一、Git的工作流程二、git clean尚未 commit 的修改三、已经 commit 尚未 push 到 remote 仓库四、已经提交到 remote 仓库五、回退建议六、总结 一、Git的工作流程 在讲这个版本回退之前&#xff0c;我们要温习一下Git的原理。下面这张图就是 Git 的整个…...

8.6.数据库基础技术-数据库的控制

并非控制 事务&#xff1a;由一系列DML操作组成&#xff0c;这些操作&#xff0c;要么全做&#xff0c;要么全不做&#xff0c;它从第一个DML操作开始&#xff0c;rollback、commit或者DDL结束&#xff0c;拥有以下四种特性&#xff0c;详解如下&#xff1a; &#xff08;操作)…...

php语言基础入门

文章目录 php语言基础入门一、简介二、基础语法1、变量2、常量3、注释4、基础数据类型4.1、整形数据类型4.2、布尔数据类型4.3、字符串数据类型4.4、浮点型数据类型4.5、PHP数据类型之查看和判断数据类型 5、流程控制5.1、if-elseif-else语句使用5.2、switch语句使用5.3、while…...

告别杂音,从 AI 音频降噪开始

生活中&#xff0c;音频无处不在。无论是聆听动人的音乐&#xff0c;还是参与重要的电话会议&#xff0c;又或是沉浸于精彩的网课学习&#xff0c;清晰、纯净的音频质量都至关重要。然而&#xff0c;音频中的噪声却像不速之客&#xff0c;扰乱着这份美好。 音频中的噪声形式多样…...

Postman中params传参与Body传参区别以及Body中不同类型的区别

Postman中params传参与Body传参区别 在HTTP请求中&#xff0c;参数可以通过不同的方式传递给服务器&#xff0c;其中最常见的两种方式是使用params&#xff08;查询参数&#xff09;和body&#xff08;请求体&#xff09;。以下是它们的主要区别&#xff1a; 1. 位置&#xf…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...