文章目录
用户管理
用户查看可以使用id命令
\# id user ##显示指定用户uid、gid和副组id
uid=1002(user) gid=1002(user) groups=1002(user)
\# id -u user ##仅显示uid
1002
\# id -g user ##仅显示gid
1002
\# id -G user ##仅显示副组id
1002
\# id -Gn user ##仅显示副组名
user
\# id -gn user ##仅显示组名
user
用户shell中身份切换
[root@bogon ~]# su - user ##切换当前shell为user用户环境
[user@bogon ~]$
用户创建
\# useradd user ##创建一个user用户
\# useradd -u 8888 user ##指定创建时用户uid
\# useradd -g 9999 user ##指定创建时用户gid,需要真实存在的
\# useradd -G 7777 user ##指定创建时还需要加入的组,需要真实存在的
\# useradd -c nothing user ##指定创建时为用户添加说明
\# useradd -M user ##创建用户不创建家目录
\# useradd -d /home/user123 user ##指定创建用户的家目录
\# useradd -s /sbin/nologin user ##指定用户的shell类型,默认为/bin/bash,如果不想让创建的用户被登录可以设置为这样
\# userdel user ##删除用户,但是默认不会删除创建的家目录
\# userdel -r user ##删除用户,同时删除家目录
用户组创建
\# groupadd usergroup ##创建用户组
\# groupadd -g8888 usergroup ##指定创建用户组的gid
\# groupdel usergroup ##删除用户组
用户信息修改
\# usermod -l aaa user ##更改user用户用户名
\# usermod -u 6666 user ##更改用户uid
\# usermod -g 7788 user ##更改用户gid,需要真实存在的组
\# usermod -G 7788 user ##更改用户副组id,需要真实存在
\# usermod -aG 8888 user ##添加用户副组,需要真实存在
\# usermod -c test user ##更改用户说明
\# usermod -s /bin/bash user ##更改用户shell
\# usermod -d /opt/user user ##更改用户家目录,此更改不会创建新的家目录,只是在文件里修改记录
\# usermod -md /opt/user user ##更改用户家目录,删除之前的家目录,同时创建新的家目录
\# groupmod -g 888 usergroup ##更改组id
用户权限下放
\# visudo ##编辑文件写入规则
user ALL=(root) NOPASSWD:/usr/sbin/useradd
说明 | |
---|---|
user | 下放权力的用户名 |
ALL | 下放的主机名,ALL表示所有,可以写本机的主机名(可以用 hostname 查看) |
=(root) | 新执行身份 |
NOPASSWD: | 免密操作 ,使用命令时不需要再确认密码 |
/usr/sbin/useradd | 下放的权限(which useradd可查看权限的真实目录) |
使用
\# su - user
\$ sudo useradd user2
修改用户密码
\# passwd ##更改本身密码
\# passwd user ##更改指定用户密码,只有超户可以更改其他用户密码,普通用户无权限
\# echo 123 | passwd --stdin user ##非交互式更改指定用户密码,一条命令直接搞定
文件管理
文件查看
\# ls /root ##列出目录内容
\# ls -d /root ##查看目录本身详细信息
\# ls -a /root ##列出所有内容包括隐藏文件
\# ls -l /root ##列出目录内内容详细信息
\# ls -S /root ##列出目录内各个文件大小
\# ls -s /root ##按大小排列内容
\# ls -R /root ##递归查看目录下所有内容
\# ls -Z /root ##查看目录内文件安全上下文
\# tail /etc/passwd ##查看文件最后5行,默认是5
\# tail -n10 /etc/passwd ##查看文件最后10行,自定义
\# tail -f 10 /etc/passwd ##监控文件最后10行,自定义
\# head /etc/etc/passwd ##查看文件开始5行,默认是5
\# head -n10 /etc/passwd
文件查找
按为文件名查找
\# find /etc -name passwd ##在/etc/下查找名为passwd的文件
按文件所在范围查找
\# find /etc -maxdepth 1 -name passwd ##查找passwd文件,深度最多只在当前目录下一层
\# find /etc -mindepth 2 -name passwd ##查找passwd文件,深度最少都在2层以下
按文件大小查找
\# find /etc -size 20K ##查找大小是20k的文件
\# find /etc -size -20k ##查找大小小于20k的文件
\# find /etc -size +20k ##查找大小大于20k的文件
按文件所属查找
\# find /etc -user root ##查找属于root用户的文件
\# find /etc -group root ##查找属于root组的问价
文件权限修改
\# chmod 777 /etc/passwd ##更改文件权限
\# chmod +x /etc/passwd ##给文件添加x权限
\# chmod -R 777 /etc ##递归丢该权限,会执行目录下所有文件的权限修改
\# chown user /etc/passwd ##更改文件拥有者
\# chgrp user /etc/passwd ##更改文件拥有组
\# chown user.user /etc/passwd ##同时更改文件拥有者和拥有组
\# chown -R /mnt ##更改目录拥有者
\# chgrp -R /mnt ##更改目录拥有组
文件打包压缩
打包
\# tar cf etc.tar /etc ##打包,会忽略绝对路径
\# tar rf etc.tar /mnt ##添加进打包文件
\# tar tf etc.tar ##查看打包文件的内容
\# tar cfP etc.tar /etc ##打包时保留绝对路径
\# tar xf etc.tar -C /mnt ##拆解包到指定目录下
\# tar xf etc.tar -get mnt -C /mnt ##拆解包中指定内容
\# tar f etc.tar -delet mnt ##删除包中指定内容
\# zip -r etc.tar.zip etc.tar ##压缩
\# unzip etc.tar.zip ##解压
\# gzip etc.tar
\# gunzip etc.tar.gz
\# bzip2 etc.tar
\# bunzip2 etc.tar.bz2
\# xz etc.tar
\# unxz etc.tar.xz
打包压缩合并使用
\# tar cfj /etc
\# tar xfj etc.tar.bz2
\# tar cfz /etc
\# tar xfz etc.tar.gz
\# tar cfJ /etc
\# tar xfJ etc.tar.xz
文件基本操作
文件复制
\# cp /etc/passwd /mnt/
文件重命名
\# mv /mnt/passwd /mnt/123 ##mv是移动文件命令,也可以作为重命名作用
文件删除
\# rm -f /mnt/passwd ##删除文件
\# rm -r /mnt ##删除目录
文件备份
对于文件备份,一般使用cp命令复制一份命名为备份文件
cp /etc/passwd /etc/passwd.bak
进程管理
查看进程
\# ps ax ##查看当前所有进程
\# ps xf
\# ps axo user,pid,comm,%cpu ##查看指定的指标
\# ps axo pid,nice,comm,uid,%cpu,%mem --sort=%mem ##查看指定指标,并按照内存使用率顺序排序
\# ps axo pid,nice,comm,uid,%cpu,%mem --sort=-%mem ##查看指定指标,并按照内存使用率倒序排序
\# pgrep -u 0 ##显示指定uid的进程
\# pgrep -U root ##显示指定用户的进程
\# pgrep -u 0 -l ##显示指定uid进程的名称
根据名称查看进程号
\# pidof sshd
\# ps ax | grep sshd
管理进程
\# kill -1 pid ##刷新进程
\# kill -9 pid ##强制关闭进程
\# kill -15 pid ##关闭进程,可能失败
\# kill -18 pid ##激活进程
\# kill -19 pid ##强制暂停进程
\# killall -1 名称 ##刷新相同名称的所有进程
\# killall -9 名称
\# killall -15 名称
\# killall -18 名称
\# killall -19 名称
网络管理
网卡设置
\# vim /etc/sysconfig/network--scripts/ifcfg-ens33 ##编写网卡配置文件
TYPE=Ethernet ##网络类型
BOOTPROTO=dhcp ##ip获取方式,如果是none则需要自行配置IPADDR和PREFIX
NAME=ens33 ##网卡名称
DEVICE=ens33 ##设备名称
ONBOOT=yes ##启动
GETEWAY=172.24.206.1 ##网关
DNS1=114.114.114.114 ##DNS
临时添加ip
ip addr add dev 192.168.1.10/24 ##这种方式是添加新的ip到网卡设备中
ifconfig ens33 192.168.1.10/4 ##这种方式是覆盖网卡上的第一条ip
显示网卡信息
ip addr show ens33
ifconfig ens33
MAC地址:在展示出的信息ether后面的就是MAC地址
\# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a8:98:db brd ff:ff:ff:ff:ff:ff
inet 172.24.207.16/23 brd 172.24.207.255 scope global noprefixroute dynamic ens33
路由表
查看本机路由表
\# rount
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth0
111.234.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
添加路由
\# route add -host 172.24.206.100 dev eth0
\# route add -host 10.20.30.148 gw 10.20.30.40 ##添加到10.20.30.148的网关
删除路由
\# route del -host 172.24.206.100 dev eth0
\# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
启动路由功能
\# sysctl -w net.ipv4.ip_forward=1
\# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
\# sysctl net.ipv4.ip_forward
添加静态路由
Iptables
开启iptables后,执行操作
\# iptables -L ##查看策略
\# iptables -F ##刷新策略,会取消之前的显示,重启可以恢复
\# service iptables save ##储存策略
链路 | 说明 |
---|---|
input | 输入,需要经过本机内核 |
output | 输出,需要经过本机内核 |
forward | 转发,通过内核路由功能 |
postrouting | 路由之后,发送信息通过路由之后伪装ip,不需要通过本机内核 |
prerouting | 路由之前,传回信息通过路由之前伪装ip,不需要通过本机内核 |
表名 | 说明 |
---|---|
filter | 经过本机内核的数据(input output forward) |
nat | 不经过内核的数据(postrouting,prerouting,input,output) |
mangle | 当filter和nat表不够用时使用(input output forward postrouting,prerouting,) |
默认策略分为5条链和3张表管理不同的进出流量
\# iptables -t filter -A INPUT -j REJECT ##在filter表里添加进策略拒绝所有
\# iptables -t filter -A INPUT -s 172.22.0.30 -j REJECT ##拒绝30主机的输入信息
\# iptables -t filter -I INPUT 1 -j ACCEPT ##插入策略到第一行,拒绝策略之前会读到接受,从上向下读取策略
\# iptables -t filter -D INPUT 3 ##删除第三条策略
\# iptables -t filter -I INPUT -s 172.22.0.30 -p tcp --dport 22 -j ACCEPT ##添加让30主机可以访问22端口
\# iptables -t filter -R INPUT 1 -s 172.22.0.20 -p tcp --dport 22 -j ACCEPT ##修改让20主机可以访问22端口
\# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT ##添加新策略允许访问80端口,不指定表默认filter
修改DNS
在网卡配置中修改
\# vim /etc/sysconfig/network--scripts/ifcfg-ens33
在配置文件中修改或添加
\# vim /etc/resolv.conf
nameserver 114.114.114.114
安装包管理
yum源配置
yum源储存位置
\# ls /etc/yum.repos.d/
yum源编写
\# vim /etc/yum.repos.d/yum-dvd.repo
[yum-dvd]
name=yum-dvd ##名称任意
baseurl= ##资源的路径,可以是网上路径
gpgcheck=1/0 ##是否开启验证检测
gpgkey= ##如果gpgcheck为1,这里就需要key的地址
enable=1 ##自动启用
yum安装
对于后缀是rpm的安装包,都可以使用yum安装,yum安装时会附带安装软件的依赖性
\# yum install -y ***.rpm
\# yum remove -y ***.rpm
\# yum update -y ***.rpm
rpm命令安装
\# rpm -ivh ***.rpm ##安装软件包
\# rpm -e ***.rpm ##卸载软件包
\# rpm -qa ##查看所有安装过的软件包
\# rpm -ql nginx ##列出安装后创建出的所有文件
日志管理
rsyslog日志采集管理
编辑配置文件,在文件RULES之后写入自定义的采集级别和存放路径
\# vim /etc/rsyslog.conf
...
#### RULES ####
*.info;mail.none;authpriv.none;cron.none /var/log/messages
以此为例,前半段规则分为4部分,定义了4项规则,每个“;”为一项,每项的格式为"*.*",第一个*表示类型,第二个*表示级别。后段为指定的路径。
远程日志同步
接收方编辑配置文件,在udp协议注释下写入配置打开接口,接受其他主机的udp传输。
\# vim /etc/rsyslog.conf
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
$Modload imudp
$UDPServerRun 514
保存后,重启服务,检查端口是否开启
\# systemctl restart rsyslog
发送方定义新的日志采集格式
\# vim /etc/rsyslog.conf
...
#### RULES ####
*.* @IP
定义将所有类型级别日志传输给指定的IP
日志打包
日志打包可以使用手动命令或自动脚本来实现
命令:按照日期自动命名打包日志
\# tar zcf /opt/log_$(date +%F).tar.gz /var/log/messages
脚本:可以设置定时任务,如每天执行一次打包
\# vim log.sh
#!/bin/bash
tar zcf /opt/log_$(date +%F).tar.gz /var/log/messages
echo > /var/log/messages ##打包后清空之前的日志信息,开始储存新的日志
保存脚本,给予可执行权限
\# chmod +x log.sh
编写定时任务
\# crontab -e ##创建定时任务
00 00 * * * /opt/log.sh ##每天0点0分执行脚本
文本编辑器
vim日常操作
i ##插入模式
按键[Esc] ##退出插入模式
:wq ##保存退出
:q ##仅退出
:q! ##不保存退出
:wq! ##强制保存退出
:6 ##移动到第六行
/a ##搜索文件中所有的a,n向下选择,N向上选择
:noh ##取消文中的高亮显示
:set nu ##显示行号
:set nonu ##取消行号显示
文本编辑中的字符管理
按键【yl】 ##复制当前字符,
按键【yw】 ##复制当前词,
按键【yy】 ##复制当前行“,可以使用【y4y】复制当前位置下面的4行;
按键【dl】 ##删除当前字符,
按键【dw】 ##删除当前词,
按键【dd】 ##删除当前行;可以使用【d4d】删除当前位置下面的4行,长按【d】一直删除当前行以下内容;
按键【cl】 ##剪贴当前字符,
按键【cw】 ##剪贴当前词,
按键【cc】 ##剪贴当前行;可以使用【c4c】剪贴当前位置下面的4行;
按键【p】 ##粘贴,
按键【u】 ##撤销,
按键【Ctrl+r】 ##返回撤销操作;
字符替换
:%s/*/!/g ##*是原字符,!是新字符,%s所有行,g所有列
:1,5/*/!/g ##1-5行所有*替换为!
光标移动
按键【gg】 ##移动到最后行,
按键【G】 ##移动到最前行,
按键【I】 ##移动光标到所在行的最前开始插入,
按键【i】 ##当前位置插入,
按键【A】 ##移动光标到所在行的最后开始插入,
按键【a】 ##当前词后插入,
按键【O】 ##在所在行上插入一行插入,
按键【o】 ##在所在行下插入一行插入,
按键【S】 ##删除所在行插入,
按键【s】 ##删除所在词插入。
服务管理
设置开机自启动任务及计划任务
开机自启任务设置
开机自启任务编辑
\# /etc/rc.local
在这个文件里,直接写入需要开机启动执行的命令即可
计划任务设置
延时任务
\# at 08:00 ##at命令+时间
at> date ##需要指定的命令
at> <EOT> ##上面写完命令后【Ctrl+d】确认执行
\# at -l ##查看待执行的任务
\# at -c jobid ##查看指定的任务
\# at -r jobid ##取消指定的任务
定时任务
创建任务
\# crontab -e ##创建定时任务
* * * * * command ##5个星分别代表分钟、小时、日、月、星期,后面是需要执行的任务或脚本
30 12 * * 5 command ##每周五12点半执行命令
30 12 * * 5 root command ##还可以确认任务执行的用户身份
\# crontab -l ##查看定时任务
\# crontab -r ##删除定时任务
可以指定创建任务的用户
\# crontab -u root -e
在配置文件里设定任务,里面有基础的日常定时任务文件存在
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
系统性能分析工具
top
命令行输入:top,显示top界面,会随时间自动刷新,【Ctrl+c】退出显示
内部参数 | 用途 |
---|---|
P | cpu百分比排序 |
M | 内存百分比排序 |
T | 累计占用cpu时间排序 |
l | 开启/关掉uptime信息 |
t | 开启/关闭task&cpu信息 |
s | 调整刷新频率 |
k | 终止进程 |
u | 查看指定用户进程 |
因为这些参数的效果不是很突出适合展示,所以还是在个人实操中体验
top命令参数 | 用途 |
---|---|
-d | 指定刷新间隔,top -d 1 |
-b | 以批次方式显示,top -b |
-n | 显示批次数量,top -b -n 3 |
netstat
查看端口是否开启,或查看开启了那些端口
\# netstat -antlp ##展示所有端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1380/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1051/master
tcp 0 36 10.234.2.207:22 172.24.206.73:51311 ESTABLISHED 1382/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1380/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1051/master
\# netstat -antlp | grep 22 ##过滤显示指定端口的信息
\# netstat -antlp | grep sshd ##过滤显示指定名称的信息
free
查看内存使用量及使用情况
\# free -h
total used free shared buff/cache available
Mem: 1.7G 85M 1.3G 9.1M 296M 1.5G
Swap: 975M 0B 975M
iftop
作用是监控服务器的出入流量,检查有误异常大流量进出;iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等
需要自行编译安装
yum -y install flex byacc libpcap ncurses ncurses-devel libpcap-devel gcc
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
安装完成后,执行iftop开启应用
参数
iftop -i eth0 ##监听指定的网卡
iftop -i eth0 -P ##监听指定网卡并显示服务名称
iftop -F 172.25.0.0/16 ##监听特定的网段的进出流量
显示名称的效果
界面内参数
参数 | 说明 |
---|---|
按h | 切换是否显示帮助; |
按n | 切换显示本机的IP或主机名; |
按s | 切换是否显示本机的host信息; |
按d | 切换是否显示远端目标主机的host信息; |
按t | 切换显示格式为2行/1行/只显示发送流量/只显示接收流量; |
按N | 切换显示端口号或端口服务名称; |
按S | 切换是否显示本机的端口信息; |
按D | 切换是否显示远端目标主机的端口信息; |
按p | 切换是否显示端口信息; |
按P | 切换暂停/继续显示; |
按b | 切换是否显示平均流量图形条; |
按B | 切换计算2秒或10秒或40秒内的平均流量; |
按T | 切换是否显示每个连接的总流量; |
按l | 打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息; |
按L | 切换显示画面上边的刻度;刻度不同,流量图形条会有变化; |
按j | 或按k可以向上或向下滚动屏幕显示的连接记录; |
按1或2或3 | 可以根据右侧显示的三列流量数据进行排序; |
按< | 根据左边的本机名或IP排序; 按>根据远端目标主机的主机名或IP排序; |
按o | 切换是否固定只显示当前的连接; |
按f | 可以编辑过滤代码,这是翻译过来的说法,我还没用过这个! |
按q | 退出监控。 |
iostat
iostat工具将对系统的磁盘操作活动进行监视。特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
需要安装sysstat程序去获得此工具
\# yum install -y sysstat
\# iostat
Linux 3.10.0-1127.19.1.el7.x86_64 (bogon) 11/04/2020 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 0.36 0.18 0.00 99.20
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.19 17.21 18.69 769248 835301
scd0 0.00 0.02 0.00 1108 0
dm-0 1.45 16.79 18.34 750299 819677
dm-1 0.00 0.05 0.00 2204 0
数值说明:
%user ##CPU处在用户模式下的时间百分比。
%nice ##CPU处在带NICE值的用户模式下的时间百分比。
%system ##CPU处在系统模式下的时间百分比。
%iowait ##CPU等待输入输出完成时间的百分比。
%steal ##管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle ##CPU空闲时间百分比。
tps ##该设备每秒的传输次数
kB_read/s ##每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s ##每秒向设备(drive expressed)写入的数据量;
kB_read ##读取的总数据量;
kB_wrtn ##写入的总数量数据量
特殊说明
如果%iowait的值过高,表示硬盘存在I/O瓶颈
如果%idle值高,表示CPU较空闲
如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。
如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。
使用参数
\# iostat 2 2 ##每隔2秒,连续3次
\# iostat -d /dev/sda ##显示指定磁盘信息
\# iostat -k ##以kb单位显示数据,还有-m,以mb单位显示
\# iostat -d /dev/sda -x ##显示更详细信息
\# iostat -c ##显示cpu信息
三剑客sed、awk、grep
sed
作用是用以批量指定展示,和批量修改替换文本内容
显示操作
\# sed -n 5p /etc/passwd ##显示第5行
\# sed -n 3,5p /etc/passwd ##显示3到5行
\# sed -ne “3p;5p” /etc/passwd ##显示3和5行
\# sed -ne ‘5,$p’ /etc/passwd ##显示5到最后的行
\# sed -n ‘/^s/p’ /etc/passwd ##显示以s开头的行
删除操作
\# sed 5d /etc/passwd ##删除第5行
\# sed 5,10d /etc/passwd ##删除5-10行
\# sed '/^s/d' /etc/passwd ##删除s开头的行
\# sed '/^a/!d' /etc/passwd ##删除除a开头以外的所有行
\# sed '10,$d' /etc/passwd ##删除10行之后所有行
添加操作
\# sed '$a world' /etc/passwd ##在文本最后添加,可以指定行号
\# sed '$a hello\nworld' /etc/passwd ##在文本最后添加,并换行
\# sed -e '/^s/a world' /etc/passwd ##在s开头的行下添加
替换操作
\# sed -e '/^s/c world' /etc/passwd ##替换s开头的行为world
\# sed '5c world' /etc/passwd ##替换第5行为world
\# sed 's/a/@/g' /etc/passwd ##替换文本所有的a为@
\# sed '5,10s/a/@/g' /etc/passwd ##替换文本5-10行所有的a为@
提取操作
\# sed '/^s/w file1' /etc/passwd ##提取s开头的行到file1中
整合操作
\# sed 'r file1' /etc/passwd ##将file1内容写入passwd后面
\# sed '10r file1' /etc/passwd ##将file1内容写入passwd第10行后面
上面的操作都只是无效操作,只是展示操作后的效果,-i参数可以使操作生效
grep
文本过滤工具
\# grep root /etc/passwd ##过滤还有root的行
\# grep ^root /etc/passwd ##过滤root开头的行
\# grep nologin$ /etc/passwd ##过滤nologin结尾的行
\# grep -i root /etc/passwd ##过滤关键词忽略大小写
\# grep -2 root /etc/passwd ##过滤含有关键词的行及该行上下2行
\# grep -n root /etc/passwd ##过滤关键词显示匹配行的行号
\# grep -A2 root /etc/passwd ##过滤含有关键词的行及该行下2行
\# grep -B2 root /etc/passwd ##过滤含有关键词的行及该行上2行
\# grep -v root /etc/passwd ##过滤不包含root 的行
\# grep -E "root|nologin$" /etc/passwd ##过滤包含root或nologin结尾的行
awk
报告生成器
\# awk '{print NR}' /etc/passwd ##列出所有行号
\# awk -F : '{print NF}' /etc/passwd ##以:为分割显示有几列
\# awk '/nologin$/{print FILENAME}' /etc/passwd ##以文件名展示所有nologin结尾的行,文件名也可以写为其他内容如“aaa”等
\# awk -F : '/sh$/||/bash$/{print $1}' /etc/passwd ##以:分割并打印sh或bash结尾的行的第一列
\# awk -F : '/sh$/&&/bash$/{print $0}' /etc/passwd ##以:分割并打印sh和bash结尾的行的所有列
\# awk -F : '$6~/home/&&!/^root/{print}' /etc/passwd ##打印出第六列是home并且不是以user开头的行
\# awk -F : '$6!~/home/{print}' /etc/passwd ##打印出第六列不是home的行
\# awk 'BEGIN{n=0} {n++} END{print n}' /etc/passwd ##打印出文件行数
入侵检测工具
rootkit
Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit一词更多地是指被作为驱动程序,加载到操作系统内核中的恶意软件。
通过Rootkit,攻击者可以控制被入侵的电脑。
chkrookit
chkrootkit是一个linux下检RootKit的脚本,在某些检测中会调用当前目录的检测程序
源码链接==》
\# yum install gcc gcc-c++ make
\# yum install glibc-static
解压后进入文件执行 make 命令,就可以使用
\# make
*** stopping make sense ***
make[1]: Entering directory `/mnt/chkrootkit-0.53'
cc -static -o strings-static strings.c
cc -o chkutmp chkutmp.c
make[1]: Leaving directory `/mnt/chkrootkit-0.53'
\# ./chkrootkit | grep INFECTED ##如果检测出INFECTED,可能被植入Rootkit
备注:由于Chkrootkit的检查过程中使用了部分系统命令。因此,如果服务器被入侵,那么,Chkrootkit的检查结果也将变得完全不可信。
RKHunter
rkhunter是Linux系统平台下的一款开源入侵检测工具,具有非常全面的扫描范围,除了能够检测各种已知的rootkit特征码以外,还支持端口扫描、常用程序文件的变动情况检查。
下载源码包后解压,进入解压目录执行安装脚本
\# ./installer.sh --install
为基本系统程序建立校对样本,建议系统安装完成后就建立。
\# rkhunter --propupd
\# cat /var/lib/rkhunter/db/rkhunter.dat ###样本文件位置
运行rkhunter检查系统
它主要执行下面一系列的测试:
- MD5校验测试, 检测任何文件是否改动.
- 检测rootkits使用的二进制和系统工具文件.
- 检测特洛伊木马程序的特征码.
- 检测大多常用程序的文件异常属性.
- 执行一些系统相关的测试 - 因为rootkit hunter可支持多个系统平台.
- 扫描任何混杂模式下的接口和后门程序常用的端口.
- 检测如/etc/rc.d/目录下的所有配置文件, 日志文件, 任何异常的隐藏文件等等. 例如, 在检测/dev/.udev和/etc/.pwd.lock文件时候, 我的系统被警告.
- 对一些使用常用端口的应用程序进行版本测试. 如: Apache Web Server, Procmail等.
执行命令检测
\# rkhunter --check
如果不想要每个部分都以 Enter 来继续,想要让程序自动持续执行,可以使用:
\# rkhunter --check --sk
更新rkhunter的数据库,帮助检查rookits
\# rkhunter --check --sk
检查程序版本,保证版本最新
\# rkhunter --versioncheck