目录
一、文件基本操作命令
1. ls 展示目录列表
2. pwd 显示当前所在路径
3. cd 切换目录
4. mkdir、touch 目录和文件的创建
5. rmdir、rm 目录和文件的删除
6. cp 复制文件或目录
7. mv 移动和重命名文件或目录
8. vi 、vim 编辑文件
9. cat 、tac 显示文件内容
10. less 、more 分屏显示文件内容
11. head 、tail 指定行数显示文件内容
12. ln 、unlink 文件链接符
1. 建立硬链接符
2. 建立软链接符
3. 解除链接符
二、查找命令
1. grep 查找文件内容
2. find 递归查目录或文件
3. which 查找命令位置
三、特殊操作符
1. 管道操作符 |
2. 通配符 * 与 ?
3. 重定向符 > 、>> 、<
4. 转义符 \
5. 单引号转义符 ''
6. . 隐藏文件或目录
四、打包与压缩命令
1. tar 打包和压缩及解压缩
2. gzip .gz 格式压缩与解压缩
3. bzip2 .bz2 格式压缩与解压缩
5. rar .rar 格式压缩与解压缩
4. zip & unzip .zip 格式压缩与解压缩
五、文件权限操作命令
1. chown 属主和属组修改
2. chgrp 属组修改
3. chmod 文件权限修改
六、软件及进程管理命令
1. rpm .rpm格式软件的安装和删除
2. yum (源) 使用软件池安装或删除软件
2.1 配置本地源
2.2 国内网络源
3. ps 查看进程
4. kill 结束进程
七、设备管理
1. fdisk 、lsblk 查看分区列表
2. mount 、umount 挂载与卸载设备
3. 自动挂载
4. dd 转换或拷贝文件 (制作 U 启动盘)
八、网络管理
1. ifconfig 网卡管理
1.1 多网卡配置(双网卡内外网)
2. route 路由管理
2.1 Linux 路由表
2.2 路由优先级
2.3 添加与删除路由表项
3. arp IP 映射 MAC 地址缓存表
3.1 IP & MAC Static 静态地址绑定
3.2 ARP 攻击防范
4. traceroute 测试访问目标经过路由
5. netstat 网络状态
九、系统管理
1. service 服务管理
2. chkconfig 服务自启管理
3. systemctl 系统管理
3.1 Unit 单元管理命令
3.2 单元类型
3.3 Unit 单元文件状态 & 服务状态
3.4 CentOS6.x & CentOS7.x 系统运行级别设置
3.4.1 永久修改系统默认运行级别配置文件
3.4.2 临时切换系统运行级别
3.5 CentOS6.x 至 CentOS7.x 命令的升级
3.6 电源模式管理
3.7 systemctl 操作 Unit 单元默认后缀 & Unit 名@模板
4. iptables 防火墙
5. firewall 防火墙
5.1 默认区域
5.2 常用添加与删除防火墙规则
5.3 示例
5.4 永久关闭防火墙 & SElinux
十、用户 & 组管理
1. groupadd 、groupdel 、groupmod 组的创建 & 删除 & 修改
2. useradd 、userdel 、usermod 用户的创建 & 删除 & 修改
3. passwd 、gpasswd 用户口令 & 组用户添加删除
4. id 查看用户信息
5. su 切换用户
6. sudo 普通用户超级权限工具
十一、日常命令
1. shutdown 关机&重启
2. 常用快捷命令
3. date 显示或修改系统时间&日期
4. df 显示磁盘占用空间
5. free 显示系统内存状态
十二、命令——长选项"--"、短选项 "-" 、无"-"选项、用法
[OPTIONS]... [DIR | FILE]...
ls / ~/ :可指定显示多个目录。
ls -lh FILE :显示指定文件信息。
列表详细目录中最前面字母代表的意思:
- 普通文件
d 目录
c 字型装置问价
b 区块装置文件
p 具名贮列
f 一般文件
l 符号链接
s socket
文件颜色表示的含义:
浅蓝色 :链接文件。
灰色 :其它文件。
绿色 :可执行文件。
红色 :压缩文件。
蓝色 :目录。
黄色 :设备文件。
红色闪烁 :链接文件有问题。一般问题就是链接的源文件不存在。
pwd
[DIR]
mkdir [OPTIONS]... [DIR]...
mkdir -p DIR1/DIR2/DIR3...
touch [OPTIONS]... [FILE]...
touch File1 File2 FIle3...
rmdir [DIR | FILE]... (删除目录,并且只能删除空目录)
rmdir DirName1 DirName2 DirName3...
rm [OPTIONS]... [DIR | FILE]... (可删除文件和目录)
rm -rf DirName File1 File2 File3...
[OPTIONS]... [SOURCE_FILE]... [TARGET_DIR]
[OPTIONS]... [SOURCE_DIR] [TARGET_PATH]
[OPTIONS]... [SOURCE_FILE] [TARGET_NEW_FILE_NAME] 复制后的新文件名
cp File1 File2 File3... TargetDir
[OPTIONS]... [SOURCE_FILE]... [ TARGET_DIR]
[OPTIONS]... [SOURCE_DIR] [TARGET_DIR]
[OPTIONS]... [SOURCE_FILE] [TARGET_FILE]
mv File1 File2 File3... TargetDir
mv SourceDir TargetDir 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。
mv SourceFile TargetFile 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。
vi | vim [OPTIONS]... [FILE] 文件存在则编辑,不存在则新建。
vim FileName
- 按键 I 或 O 进入插入模式。
- 按键 Esc 退出插入模式。
- 按键 Shift + : 冒号等待输入的口令:q 退出,w 写入 ,wq 写入并退出,q! 强制退出(一般用在修改了文件又取消修改的情况),/ + 字符串 (在文本内搜索指定字符串) 。
- 替换单个字符串:光标移动到指定要替换字符串的行,然后 s/原字符串/新字符串
- 替换全部字符串:%s/原字符串/新字符串
- 按上下箭头可选历史命令。
cat | tac [OPTIONS]... [FILE]...
cat File1 File2 File3... :可多文件一起显示。
tac File1 File2 File3...
more [OPTIONS]... [FILE]... :仅只能向前移动和翻页。
more File1 File2 File3... :可指定显示多个文件。
less [OPTIONS]... [FILE](强大):可以随意浏览文件(向前向后),而且在查看之前不会加载(读取)整个文件。
[OPTIONS]... [FILE]...
head File1 File2 File3...
tail File1 File2 File3...
建立链接 ln [OPTIONS]... [SOURCE_FILE] [DIY_NEW_LINK_FILE_NAME]
硬链接:源文件不允许被目录引用。也就是说,目录不允许指向源文件。
ln SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 1 kebin kebin 0 10月 27 00:00 SourceFile
[kebin@kebin-vm-centos7 test]$ ln SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 2 kebin kebin 0 10月 27 00:00 NewLinkFileName
-rw-rw-r--. 2 kebin kebin 0 10月 27 00:00 SourceFile
[kebin@kebin-vm-centos7 test]$注意权限和属主中间的数字,此为链接的文件数。
ln -s SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
-rw-rw-r--. 1 kebin kebin 0 10月 27 00:09 SourceFile
[kebin@kebin-vm-centos7 test]$ ln -s SourceFile NewLinkFileName
[kebin@kebin-vm-centos7 test]$ ll
总用量 0
lrwxrwxrwx. 1 kebin kebin 10 10月 27 00:10 NewLinkFileName -> SourceFile
-rw-rw-r--. 1 kebin kebin 0 10月 27 00:09 SourceFile
[kebin@kebin-vm-centos7 test]$注意权限和属主中间的数字,此为链接的文件数。
解除链接 unlink [LINK_FILE]
unlink linkFile
[OPTIONS]... ' Query String ' [FILE]...
grep ‘ 要查找的字符串 ’ TargetFile1 TargetFile2 TargetFile3...
find [PATH] -name ' Query String '
find /sbin/ -name ifcon*
which CommandName
用于数据的存储传输。
[SOURCES_DATA] | [COMMAND : grep 、ls 、cat 、less、head ...]
左边是一些命令产生的数据 --> 中间管道符 --> 右边是要对数据操作的命令
ls -R / | less
cat File | grep 'Query String'
... ...
less *.java
less Hello*.javall *.txt
ls -R / | grep *.javamv CentOS-* BakDir
COMMAND > | >> | < FILE
ls > 1.txt
ls >> 1.txtcat < 1.txt (cat 1.txt)
\COMMAND
' " * ? \ ~ ` ! # $ & | 空格
创建一个带 > 的文件:touch \>FileName 。当访问这个文件时也需要转移符,否则会把 > 重定向使用。
创建带有空格的文件:touch A\ \ \ A 。当访问这个文件时也需要转移符,否则会把空格当分隔使用。
删除带 3 个空格的文件:rm A\ \ \ A
创建带有空格的文件:touch ' 'A
删除带 3 个空格的文件:rm ' 'A
touch .FileName
mkdir .FileName
常见的压缩格式:.zip .rar .tar .gz .bz2 .xz
tar -czf MyTest.tar.gz File1 File2 File3 Dir1 Dir2 Dir3
tar -xzf MyTest.tar.gz
[OPTIONS]... [FILE]...
压缩 :gzip File1 File2 File3...
解压缩 :gzip -d File1.gz File2.gz File3.gz...
保留源文件压缩 :gzip -c SourceFile > DirNewFileName.gz
保留源文件解压 :gzip -dc SourceFile.gz > DirNewFileName
[OPTIONS]... [FILE]...
压缩 :bzip2 File1 File2 File3...
解压缩 :bzip2 -d File1.gz File2.gz File3.gz...
压缩 :[OPTIONS]... a [DIY_NEW_FILE_NAME] [FILE]...
解压 :[OPTIONS]... x [FILE]
压缩 :rar a NewRAR.rar File1 File2 File3...
解压 :rar x File.rar
zip 压缩
[OPTINS]... [DIY_NEW_FILE_NAME] [FILE]...
zip -r9v MyFiles.zip File1 File2 File3...
unzip 解压缩
[OPTIONS]... [FILE]...
unzip -v File1.zip File2.zip File3.zip
文件所属及权的修改。
[OPTIONS]... [ [USER] [:] [GROUP] ] [FILE]...
chown user1 File1 File2 File3...
chown -R user1 MyDir
使用 " :" 冒号:
修改属主和属组 chown root:root File1 File2 File3...
只修改属组 chown :root File1 File2 File3...
[OPTIONS]... [GROUP] [FILE]...
chgrp root file1 file2 file3...
权限 | 权限数值 | 二进制 | 具体作用 |
r | 4 | 00000100 | read,读取。可以读取文件内容,可以浏览目录。 |
w | 2 | 00000010 | write,写入。可以新增或修改文件内容,可以删除、移动目录或目录内文件。 |
x | 1 | 00000001 | execute,执行。可以执行文件,可以进入目录。 |
- | 0 | 00000000 | 没有权限 |
权限字母表示 | 计算公式 | 数字表示 |
-rwx------ | 4+2+1, 0+0+0, 0+0+0 | 700 |
-rwxr--r-- | 4+2+1, 4+0+0, 4+0+0 | 744 |
-rw-rw-r-x | 4+2+1, 4+2+0, 4+0+1 | 665 |
drwx--x--x | 4+2+1, 0+0+1, 0+0+1 | 711 |
drwx------ | 4+2+1, 0+0+0, 0+0+0 | 700 |
文件类型 属主权限 属组权限 其它用户权限 属主 属组
-rw-rw-r--. kebin kebin 14 10月 23 20:15 MyGPG.tar.gz
最左边的 - 是文件类型,后面的都是权限,- 代表没有权限。
[OPTIONS]... 0~7 0~7 0~7 [FILE]...
chmod 777 File1 File2 File3... (读写执行 读写执行 读写执行)
chmod 664 File1 File2 File3... (读写-读写-读--)
[OPTIONS]... u | g | o +|- rwx [FILE]...
u 、g 、o 、可多选:
增加权限 chmod ugo+rwx File1 File2 File3...
除去权限 chmod ugo-rwx File1 File2 File3...
不指定用户则三组用户同时加权限 :chmod +x File1 File2 File3...
[OPTIONS]... [FILE.rpm]...
rpm -qa | grep ssh
rpm -ivh --force --nodeps openssh-7.4p1-21.el7.x86_64.rpm openssh-clients-7.4p1-21.el7.x86_64.rpm openssh-server-7.4p1-21.el7.x86_64.rpm ......
[OPTIONS]... COMMAND [SOFTWARE_NAME]
history :显示或使用事务历史。如安装了一个软件,并且此软件需要安装很多依赖软件或某些软件被升级,在我们卸载的时候却只能卸载一个软件,其它的软件不知道,所以就需要事务的回溯或执行操作。子命令 :info ID 列出某次的详细信息。undo ID 撤销某次更改。
分为本地源和网络源,何为软件池?其实就是在目录下的全部软件,用 yum 命令从本地或网络的地址池目录获取软件包安装的一个过程!
/etc/yum.repos.d/ 目录下,文件名后缀是 .repo ,配置文件信息如下:
[name] 库名称
name=string 库描述
# 源池格式 :
baseurl=url://server1 (支持 3 种协议:file:// 、http://、ftp://)
url://server2
url://server3
...... ~N (url)
enabled=1 | 0 是否启用该源
gpgcheck=0 (设置为0,否则为1 就需要设置 gpgkey 属性密钥)
gpgkey=url
Local.repo
[Local] (本地源库名称一般和文件名一致)
name=local
baseurl=file:///mnt/iso (挂载 ISO 系统镜像的路径 /mnt/iso)
enabled=1
gpgcheck=0
设置好源后:
清除软件池缓存:yum clean all
刷新软件池缓存: yum makecache测试: yum list
[OPTIONS]...
ps -ef | grep ssh
-9 [PROGRAM_PID]
先用 ps 命令查看软件进程 PID ,再使用 kill 来强制结束。(或因为资源被某程序占用,手动结束进程)
kill -9 (PID)
- fdisk -l :查看设备分区列表。
- lsblk -p :p (PATH) 显示设备设备完整路径 ,以树形式显示列出设备分区表。
mount [-t
umount
-t :指定文件系统类型。
-o :指定挂载方式。
挂载ISO镜像 :(挂载本地源常用命令)
mount -t iso9660 -o loop /home/iso/mydisk.iso /mnt/iso
挂载USB移动硬盘 :
mount -t ntfs /dev/sdc /mnt/usb
挂载CDROM :
mount /dev/cdrom /mnt/cdrom | mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
挂载windows文件共享 :
mount -t cifs -o username=user,password=passwd //192.168.0.66/share /mnt/windows_share
挂载Linux文件nfs共享 :
mount -t nfs -o rw 192.168.0.99:/usr/www /mnt/linux_share
单用户模式重新挂载根分区 :
mount -o remount,rw /
取消挂载 :
umount /dev/cdrom | /mnt/cdrom
每次开机访问 Windows 分区或光驱、U 盘时。都要运行 mount 命令进行挂载,所以可以设置好配置文件后开机自动挂载。
编辑 /etc/fstab 配置文件,输入如下,自动挂载ISO镜像 :
/home/iso/my.iso /mnt/iso iso9660 loop 0 0
通过系统分配给设备的固定 UUID 来自动挂载设备:
- 因为如果在系统中如果插入了新磁盘设备,如果有多个磁盘,但都被重新分配了 /dev/ 下的设备名,就可能之前设置的自动挂载名不对失效问题,所以为了解决这个问题可以使用系统固定分配给设备的 UUID 来解决!!!
查看设备 UUID 目录:ll /dev/disk/by-uuid/ 即可列出指向设备的 UUID 链接文件名
编辑 /etc/fstab 配置文件输入如下:UUID=UUID链接文件名 /mnt/dev 文件系统类型 defaults 0 0
(其它使用方式详细请搜)
[ if=
dd if=/home/user/iso/my.iso of=/dev/sdb
启用或关闭网络接口:ifconfig eth0 down | up
临时设置网卡 IP :ifconfig eth0 192.168.60.10 netmask 255.255.255.0
临时添加虚拟网卡:ifconfig eth0:0 192.168.60.100 netmask 255.255.255.0 或者 ifconfig eth0:1 192.168.60.111 netmask 255.255.255.0
删除网卡 IP:ifconfig eth0 del 192.168.60.100
- 删除网卡多 IP 只需要输入 IP 地址,不需要输入子网掩码。
- 正常思想而言:指定物理网卡删除多 IP 而不是虚拟网卡。(CentOS7以上适用。6.x 不适用,可以直接指定虚拟网卡)
临时设置网卡 MAC :ifconfig eth0 hw ether 00:00:00:00:00:11
永久修改 MAC :
- cd /etc/sysconfig/network-scripts
- vi ifcfg-xxxx (主网卡配置文件)
- 修改其中的 HWADDR=xx:xx:xx:xx:xx:xx 为 MACADDR=xx:xx:xx:xx:xx:xx
- CentOS6.x 重启网络服务(service network restart);CentOS7.x 重启网络服务(systemctl restart network)
END
部分参数 | 描述 |
DEVICE=eth0 | 网卡设备名 |
NAME=eth0 | 网卡作用的描述,给用户看的。如在 Gnome 系统中,点击右上角网络图标时显示此名称。 |
TYPE=Ethernet | 网络类型,Ethernet 以太网 |
BOOTPROTO=dhcp | static 固定 IP、none 不使用协议,dhcp 协议 |
IPADDR=192.168.0.100 | IPv4 地址 |
NETMASK=255.255.255.0 | 网络掩码 |
PREFIX=24 | 网络掩码用整数表示占用 4 段网络掩码的位数,可代替 NETMASK |
GATEWAY=192.168.0.1 | 默认网关 IP 地址,(默认路由) |
DEFROUTE=yes | no |
是否开启此网卡为默认路由。及通过此网卡访问默认网关。 |
NETWORK=192.168.0.0 | 网络地址,一般不用进行手动配置 |
BROADCAST=192.168.0.255 | 广播地址 |
IPV6INIT=yes | no | 是否启用IPv6的接口 |
HWADDR=00:00:00:00:00:00 MACADDR=00:00:00:00:00:00 |
MAC 地址。 HWADDR & MACADDR 的区别:
所以这也跟字意有关。 |
DNS1 & DNS2 | DNS 域名解析 IP 地址,1 是首选,2 是备用。
|
PEERDNS=yes | no | 是否允许 DHCP 获取的 DNS 覆盖本地手动设置的 DNS 地址。 |
MTU=1500 | 前 28 bytes 为 IP 数据包报头
|
IPV4_ROUTE_METRIC | 网卡优先级,数值越小优先级越高,0~N |
ONBOOT=yes | no | 是否启用此网卡。必须开启,否则无法启用网络 |
UUID=0cad6372-6ae7-4163-b24e-b24b53e54964 | 网卡识别码
|
NM_CONTROLLED=yes | no | 网卡允许被 NetworkManager 管理 |
USERCTL=yes | no | 是否允许非root用户控制该设备 |
开始步骤:通过这个阔谱图案例来完成双网卡内外网通信。
外网网卡
IP 202.128.100.xxx/24
NetMask 255.255.255.0
Gateway 202.128.100.1内网网卡
IP 192.168.211.xxx/24
Netmask 255.255.255.0
Gateway 不设置
DHCP 设置用于分配访问外网 的 IP 地址、子网掩码、外网网关、DNS。(我这里是 VMwareWorkstation 虚拟机,所以就在虚拟机设置了)
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.211.128
NETMASK=255.255.255.0
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
MTU=65535
# 添加虚拟网卡后,在终端重启网络服务
systemctl restart network
# 查看网络接口信息
ifconfig
# 设置默认网关,其实 DHCP 以及设置了分配的默认路由 IP 地址,已自动生成及维护,所以不用执行此条命令
route add default gw 202.128.100.1
注意:路由表项的 dev 接口设备指定的虚拟网卡及是虚拟网卡的父物理网卡。
END
Options:
-n
:不执行 DNS 反向查找,直接显示数字形式的 IP 地址。( 常用命令显示 Route 表 )-net
:目标网络(一个网段;网络号)-host
:目标主机 IP 地址(表示连接到单部主机的路由)-A
:设置地址类型-C
:打印 Linux 内核的路由缓存-v
:显示详细信息-ee
:详细地列出路由表Parameters:
列 | 作用 |
Destination | 目标网络地址。(不是明确主机 IP ,而是网段网络) |
Gateway | 访问的目标网络是否需要经过某一指定的网关地址。(路由器接口 IP 地址) |
Genmask | 用于计算目标网络的网络掩码。 |
Flags | 标记
|
Metric | 路由距离,到达指定网络所需的中转数。数值越小优先级越大。(在 Linux 内核中并不使用此特性,但根据系统默认指定的正数值来对比优先级,0~255) |
Ref | 路由项被引用的次数。(不在 Linux 内核中使用) |
Use | 路由项被路由软件查找的次数 |
Iface | 访问目标网络时所使用的网络接口(网卡) |
Route Type | Destination | Gateway | Genmask | Iface |
Default 默认路由 | 0.0.0.0 | 192.168.1.1 | 0.0.0.0 | eth0 |
Direct 直连路由 | 192.168.2.0 | 0.0.0.0 | 255.255.255.0 | eth0 |
Static 静态路由 | 192.168.2.0 | 192.168.1.1 | 255.255.255.0 | eth0 |
Metric 需要一个正整数,范围 0~255,它用于指定路由协议的优先级。
路由种类 | 路由优先级 |
Direct(直连路由) |
0 |
STATIC(静态路由) |
1 |
OSPF(动态) |
110 |
RIPv1、v2(动态) |
120 |
IBGP(动态) | 200 |
Special(动态) | 255 |
Default (默认) | 255 |
常用命令格式:route [add | del] [-net
(1)添加 & 删除默认网关。
route add default gw
[ ]
route del default gw [] [ ]
- GatewayIP:用于指定转发的路由器(网关)的 IP 地址。
- NetCardInterface:用于指定网卡接口与网关通信,如 eth0 | ens33。
# 添加默认网关 route add default gw 192.168.1.1 route add default gw 192.168.1.1 eth0
# 删除默认网关 route del default gw route del default gw 192.168.1.1 route del default gw eth0 route del default gw 192.168.1.1 eth0
(2)添加 & 删除制定网络路由。
route [add | del] -net
netmask [gw ] [dev ]
- NetworkAddress:目标网络地址。
- Mask:目标网络掩码。
- GatewayIP:指定访问的目标网络要经过的网关。
- NetCardInterface:指定网卡接口与目标网关或主机通信,如 eth0 | ens33 。
# 添加路由规则,可不指定网卡接口 直连路由:route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0 静态路由:route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0
# 删除指定路由规则,可不指定网卡接口 直连路由:route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0 静态路由:route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0
注意:添加或删除(直连、静态、默认)路由,如不指定网卡接口,则默认使用主网卡(及 Linux /etc/sysconfig/network-scripts/ ifcfg-xxx 下的网卡(除 ifcfg-lo 环回网卡 127.0.0.1))。
备注:关于计算机网络的通信这里不多阐述!
[OPTIONS]...
IP-MAC ARP 映射有两种:
ARP 缓存表字段信息 | ||||
Address | HWtype | HWaddress | Flags Mask | Iface |
目标 IP 地址 | 网络类型 (ether) | 目标 MAC 地址 |
|
使用的网络接口访问目标 |
显示 ARP 表: arp -n (常用命令)
删除 ARP:arp -d 192.168.1.100
添加静态 ARP:arp -s 192.168.1.100 00:11:22:33:44:55
备注:经测试 CentOS7.x 后,需要在 /etc/rc.local 文件中增加 arp -f 命令并设置可执行权限 chmod +x /etc/rc.d/rc.local。CentOS6.x 则不需要,开机自动获取 /etc/ethers IP & MAC 映射。
END
简单概述 ARP 攻击原理:利用某些编程手段制作的 ARP 攻击程序,攻击者也会持续发送假 MAC 和其它主机或网关建立链路(被攻击者 ARP 缓存表中就存在了冒充的 IP & MAC 映射),欺骗其它主机冒充网关 | 或欺骗网关冒充其它主机。所以攻击者利用这一点能达到欺骗、监听、替换数据包等等操作。
举个例子:
- PC1 和 PC2 连接同一个交换机且在相同网段,交换机连接一个路由器。
- 假设 PC1 冒充网关(路由器)欺骗 PC2 。此时 PC2 的访问网络的 IP 数据包都发送到了 PC1 中。
- PC1 现在能接收到 PC2 的数据包, ARP 攻击程序为了保证 PC2 能访问到外网,PC1 会转发来自 PC2 的 IP 数据包,应答数据再发送给 PC2 。此时就能监听与替换操作。
PC1 和 PC2 是如何建立链路的?ping 命令例子:
- PC1 通过 ping PC2 的 IP 地址。
- PC1 和 PC2 在网络可达 ping 通的情况下。
- PC1 和 PC2 都用 arp 命令查看 ARP 缓存表都会有双方的 IP & MAC 地址映射!!!
简单的防御方法:(攻击者会刷新被攻击者的 ARP 缓存表,所以我们只需要 Static 静态手动绑定与之访问的 IP 正确的 IP & MAC 映射即可)
终端以超级用户执行脚本:sudo bash scan_IP-MAC.sh
#!/bin/bash
:<>
脚本仅支持 IPv4 地址
需要 root 权限执行
功能:使用 arping 命令结果获取 IP-MAC 并保存于默认静态 ARP /etc/ethers 文件中,
随后可以使用 arp -f 刷新 ARP 缓存表达到 Static 绑定 IP-MAC 地址。
作者:傻笑哥 QQ:3328235655 VX:vx-kebin
!
# 判断当前执行用户,需要 root 权限执行
if [ $(whoami) != 'root' ];then
echo '权限不足,需要超级用户权限!'
exit
fi
:< $default_ARP_cache
else
touch $default_ARP_cache
fi
clear #清屏
echo 'Scan IP-MAC Running ......'
while [[ $startScanRange -ge 1 && $startScanRange -le $endScanRange ]]
do
destinationIPAddress=${netAddress}${startScanRange}
result_array=($(arping -c 1 -I $netCard $destinationIPAddress))
if [ $? -eq 0 ];then
# 让每个局域网的主机缓存自己的 IP-MAC。
# (如:路由器配置 IP-MAC 静态绑定时,就不需要手动配置了,但 ARP 条目还是动态的)
ping -c $pingCount $destinationIPAddress > /dev/null
ipaddress=${result_array[8]}
mac=${result_array[9]}
IP_MAC="$ipaddress ${mac:1:17}"
let successCount++
echo $IP_MAC >> $default_ARP_cache
echo "$IP_MAC Write IP-MAC Success."
else
echo "$destinationIPAddress Get IP-MAC Faild!"
let faildCount++
fi
let startScanRange++
done
#统计结果,检查错误
printf "\n\n\n"
statistics="SuccessCount= ${successCount} FaildCount= ${faildCount}"
if [ $successCount == 0 ];then
# 还原备份脚本
cp -p $default_ARP_cache_bak $default_ARP_cache
echo $statistics
echo 'There is Not Success get IP-MAC, Exit !!!'
exit # 退出脚本
else
echo "查看静态 ARP 映射文件项 $default_ARP_cache"
cat $default_ARP_cache
echo $statistics
fi
#是否刷新 ARP 缓存表
readToast='is flush ARP cache table ? (Yes | No) : '
printf "$readToast"
while read FLAG
do
case $FLAG in
'y'|'yes'|'Yes'|'YES')
ip neigh flush dev $netCard
flushResult=$(arp -f ${default_ARP_cache} -i $netCard)
if [ -z "$flushResult" ];then
bootScript=/etc/rc.d/rc.local
targetCommand='arp -f'
existResult=$(grep -o 'arp\ -f' $bootScript)
if [ -z "$existResult" ];then
# 添加开机执行禁用网卡ARP协议 与 arp -f 从静态ARP文件刷新ARP缓存表命令
# ifconfig $netCard -arp # 禁用ARP协议,禁用后无法使用此脚本,需要重新打开网卡ARP协议才能继续使用
# echo "ifconfig $netCard -arp" >> $bootScript #开机自动禁用网卡ARP协议
echo $targetCommand >> $bootScript
chmod +x $bootScript
fi
clear; echo 'Show ARP cache table'; arp -n; echo 'Flush Success !'
else
echo $flushResult
echo 'Unknown Error !!!'
exit # 退出脚本
fi
break
;;
'n'|'no'|'No'|'NO')
echo '可手动执行 arp -f [Static_ARP_Table_File] 命令刷新 ARP 缓存表'
break
;;
*)
printf "$readToast"
;;
esac
done
echo 'run over!'
echo 'I super like super love 张雨烟'
备注:网关(路由器)的 IP-MAC 静态绑定不想去配置的话。就先 ping <网关> 让双方互相缓存对方的 IP-MAC 的 ARP 缓存。
[OPTIONS]...
TTL (Time To Live) 生存时间:TTL的作用是限制IP数据包在计算机网络中的存在的时间。
traceroute 192.168.1.110
traceroute www.baidu.com
作用: 测试源主机与目标主机网络是否可达。如不可达可以知道在哪一设备出了问题。
主要查看程序监听的端口。
[OPTIONS]...
常用命令 :netstat -tunlp
显示网络接口 :netstat -i
CentOS7 后改用 Systemctl 命令。
service
service sshd restart
sshd 中的 d 表示服务器服务。
CentOS7 后改用 Systemctl 命令。
[OPTIONS]...
[--level
--level :设置程序在哪个运行级别中开启或关闭。7 个运行级别,可多选
0 :关闭所有进程并关机。
1 :单用户无网字符界面。
2 :无网多用户字符界面。
3 :有网多用户字符界面,服务器一般运行级别。
4 :保留。
5 :有网多用户图形界面。
6 :关闭所有进程并重启。
chkconfig --level 0123456 sshd on
chkconfig telnet on
由来:CentOS7.X 以上使用 systemctl 代替并兼容 service & chkconfig 命令,以及 init 命令。
历史上,Linux 的启动一直采用init进程。
下面的命令用来启动服务。sudo /etc/init.d/apache2 start # 或者 service apache2 start
缺点:
- 启动时间长。
init
进程是串行启动,只有前一个进程启动完,才会启动下一个进程。- 启动脚本复杂。
init
进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
systemd & systemctl :
d
是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。init
了。Systemd 取代了 initd
,成为系统的第一个进程(PID = 1),其他进程都是它的子进程。Linux 服务管理有两种方式 service 和 systemctl。而 systemd 是 Linux 系统最新的初始化系统 (init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd 对应的进程管理命令就是 systemctl。
备注:用 VM 虚拟机同时启动 CentOS6.x 与 CentOS7.x 明显是 7 版本后启动速度比 6.x 前快。
systemctl COMMAND
systemctl COMMAND [--type | -t
systemctl COMMAND
Unit Type | 说明 |
service | 后台服务进程。 |
socket | 后台服务进程,进程间通信套接字。 |
device | 设备文件。 |
mount | 挂载点(向后兼容 /etc/fstab) |
automount | 挂载点,只有该文件系统被访问时才会进行挂载。 |
swap | 交换分区或交换文件。 |
path | 文件或路径,根据文件系统特定变化来启动服务。 |
slice | 进程组,控制特定 CGroup 内所有进程的总体资源占有。 |
scope | 管理不是由 systemd 启动的外部进程。 |
snapshot | 快照,管理系统服务状态。 |
timer | 由 systemd 管理的定时器,基于时间触发任务,取代 atd、crond 等计划任务。 |
target | 启动目标,多个 Unit 单元组合在一起同时启动。如系统开机启动的是命令字符窗口还是图形界面窗口,都是通过 target Unit 单元组启动需要的 Unit 单元即可。 |
Unit 单元配置文件存放目录 | ||
系统单元目录 | 说明 | 优先级 |
/lib/systemd/system | 本地配置的系统单元 | 高 |
/run/systemd/system | 运行时配置系统单元 | 中 |
/usr/lib/systemd/system | 软件包安装系统单元 | 低 |
Unit 单元文件状态 | |
状态 | 说明 |
enabled | 开机启动 |
disabled | 开机不启动 |
static | 开机不启动,能被其它 enabled Unit 单元服务唤醒。(关联行性的服务 ) |
mask | 无法启动,已禁用状态。(systemctl [mask 注销 | unmask 取消注销]) |
服务状态 | |
状态 | 说明 |
active
|
活动进程运行中。 |
inactive | 未运行。 |
activing | 当前正在启动中。 |
deactiving | 当前正在停止中。 |
failed | 失败状态。(启动单元时的错误,如配置文件、运行崩溃等...) |
dead | 程序已经清除。 |
systemctl list-unit-files -type target 命令列出所有启动目标。
系统运行级别 | 说明 | ||
CentOS6.x Systemv | CentOS7.x Systemd (保留) | CentOS7.x Systemd | 系统命令变化 |
0 | runlevel0.target | poweroff.target | 关闭所有进程并关机。 halt |
1 | runlevel1.target | recure.target | 单用户无网字符界面。 (用于维护,无需用户名、密码登录且 Root 权限) |
2 | runlevel2.target | multi-user.target | 无网多用户字符界面。 |
3 | runlevel3.target | multi-user.target | 有网多用户字符界面。服务器一般运行级别 |
4 | runlevel4.target | multi-user.target | 保留;未定义 |
5 | runlevel5.target | graphical.target | 多用户有网图形界面。 |
6 | runlevel6.target | reboot.target | 关闭所有进程并重启。 |
获取当前默认运行级别:systemctl get-default
设置默认运行级别:systemctl set-default multi-user.target
临时切换运行级别:systemctl isolate multi-user.target
OS 系统 | 配置文件 | 说明 |
CentOS6.x | /etc/inittab | inittab 系统运行级别配置文件中的 id:5:initdefault: 中的 5 及为运行级别。修改 Number 运行级别数字即可。 |
CentOS7.x | /etc/systemd/system/default.target | /etc/systemd/system/default.target 文件是软链接,软链接到 /lib/systemd/system/*.target 源文件启动目标即可更改默认系统运行级别。
|
系统 OS | 命令 |
CentOS6.x | init |
CentOS7.x | systemctl |
service |
chkconfig [Options...] |
init |
|||
CentOS6.x | CentOS7.x | CentOS6.x | CentOS7.x | CentOS6.x & CentOS7.x 保留 | CentOS7.x |
service network start service network stop service network restart ... N~ |
systemctl start network systemctl stop network systemctl restart network ... N~ |
chkconfig network on chkconfig network off |
systemctl enable network systemctl disable network |
init 3 init 5 ... N~ |
systemctl isolate multi-user.target systemctl isolate graphical.target ... N~ |
备注: init 命令在 CentOS7.x 中保留了下来,所以可以使用 init 命令临时切换系统运行级别。
命令 | 说明 |
systemctl poweroff | 关闭所有进程并关机 |
systemctl reboot | 关闭所有进程并重启 |
systemctl suspend | 挂起模式 |
systemctl hibernate | 休眠模式 |
systemctl rescue | 恢复模式 |
systemctl emergency | 紧急恢复模式 |
挂起与休眠模式的区别:
默认后缀:.service 。
如重启网络就不需要使用 .service 后缀,而其它类型单元则需要
systemctl restart network
Unit 名@模板:
有一些单元的名称包括一个 @ 标记。([email protected]):这意味着它是模板单元 [email protected] 的一个 实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个參数传给模板单元。模板单元会使用这个传入的參数取代模板中的 %I 指示符。
在实例化之前。systemd 会先检查 [email protected] 文件是否存在(假设存在,应该就是直接使用这个文件。而不是模板实例化了)。大多数情况下,包换 @ 标记都意味着这个文件是模板。假设一个模板单元没有实例化就调用,该调用会返回失败,由于模板单元中的 %I 指示符没有被替换。
null
区域 | 描述 |
public(公共) | 添加规则时,会默认添加到 public 区域 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。 |
home(家庭) | 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。 |
work(工作) | 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。 |
internal(内部) | 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接 |
external(外部) | 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。 |
trusted(信任) | 可接受所有的网络连接。 |
block(限制) | 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。 |
drop(丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。 |
dmz(非军事区) | 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。 |
固定格式 | 添加 & 删除 | 规则命令 | 描述 |
firewall-cmd | --add | interface | interface 用ifconfig或者ip addr查询到的网卡名称 例:interfaces ens33 |
source | sources < IP or CIDR or MAC > 例:source 192.168.0.211 source 192.168.0.0/24 source 00:00:00:00:00:00 (放行的 IP 或 网络 或 MAC 地址) |
||
service | service firewall-cmd --get-services命令 可以查询到所有的service。但是只能看到名字。(放行的服务) |
||
--remove | port | port < PortID/ 一般用于设置除了 services 服务类的 port 端口,也就是自定义的端口。(放行的端口) |
|
source-port | source-port < PortID/ 跟前面的 port 一样的格式,这个指的是源port,port 指的是本机的 port。 |
||
protocol | protocol < tcp | udp | icmp | ip ... > 设置放行的协议 |
永久设置:--permanent 。使用此选项开机重启依然有效!
// 添加放行的服务,永久生效
firewall-cmd --zone public --permanent --add-service ssh
// 删除放行服务
firewall-cmd --zone public --remove-service ssh
// 放行指定端口
firewall-cmd --zone public --permanent --add-port 22/tcp
// 删除指定端口
firewall-cmd --zone public --remove-port 22/tcp
// 关闭防火墙
systemctl stop firewalld
// 禁止开机自启
systemctl disable firewalld
// 关闭 SElinux
setenforce 0 // 0 为关闭 1 为开启
// 修改 SElinux 配置文件
vi /etc/selinux/config
SELINUX=disabled // 赋值 disabled
用户所属组配置文件 /etc/group 格式
root:x:0:
用户组密码配置文件 /etc/gshadow 格式 ,是 /etc/group 的加密文件
root:::
groupadd [OPTIONS]... [GROUP]
groupadd -g 1024 GroupName
groupdel [OPTIONS] [GROUP] 注意:删除某用户的主组时则删除失败。
groupmod [OPTIONS] [GROUP]
groupmod -g 1024 TestUser
groupmod -n NewUserName TestUser
groupmod -p 521024 TestUser
用户账户信息文件 /etc/passwd 格式
root:x:0:0:root:/root:/bin/bash
好玩技巧:将其它用户的 UID 和 GID 修改成和 root 用户一致,也就是 0 ,即可成为超级管理员!!!
查看登陆终端的用户列表 :cat /etc/passwd | grep bash
用户密码配置文件 /etc/shadow 格式
root:$6$pkc06.6SpTYnM04T$ZKO4dyJKhy.YHGtYChsBOYBremPpJplrciKnPXpoc3mh31n.9IUOjZfon6DFFikBqGkZTImI7PnOZcgvx59uE0::0:99999:7:::
useradd [OPTIONS]... [USER]
useradd -u 521024 -g TestUser1 -G 0,1000,TestUser2 -d /home/MyTestUser -p 521024 TestUser
TestUser1 主组以及 0,1000,TestUser2 附加组必须存在,否则提示没有此组,创建用户失败。
userdel [OPTIONS] [USER]
usermod [OPTIONS]... [USER]
usermod -l MyTestUser -o -u 0 -g 0 -G 0,1000,TestUser1,TestUser2 -p 666666 TestUser
把普通用户的 UID 和 GID 改成和 root 用户一样,那么此用户就变成了管理员,拥有管理员权限。
passwd [OPTIONS]... [USER]
passwd -d user 删除用户密码
passwd user 更改用户密码,输入两次密码
gpasswd [OPTION] GROUP
gpasswd -r user
gpasswd -a user group
gpasswd -d user group
gpasswd -A user1,user2,user3 mygroup
gpasswd -M user1,user2,user3 mygroup
id
su user 切换指定用户,未指定用户默认 root 用户
sudo 是 linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的 root 命令。第一次使用 sudo 命令时只需要输入当前登陆用户的口令,之后一般在 5 分钟内都不需要再次输入口令。
注意:若当前用户没有口令时,无需输入密码。
语法:< sudo > < 需要 root 权限才能执行的命令表达式 >
-l :列出 sudoers 配置文件中默认允许使用的命令,并列出当前用户可以使用的命令。
-v :延长口令时间戳。
-k :重置口令时间戳。
如普通用户执行用户管理命令需要 root 权限:
sudo useradd -p 666666 TestUser
sudo passwd -d TestUser
sudo usermod -o -u 0 -g 0 TestUser
配置文件 /etc/sudoers
文件属性必须为 0440 (-r--r-----),所以使用 vi | vim 工具或其它编辑工具时,需要先修改此文件的权限才能编辑。有一个专门修改 sudoers 文件的命令程序 visudo ,使用这个工具是因为有专门的语法检查。
<[USERS | USERS_ALIAS] | [%GROUPS | GROUPS_ALIAS]>
[ ( [
[SELINUX_SPEC]
[TAG_SPEC]
使用 visudo 工具命令编辑 /etc/sudoers ,直接在终端输入 visudo 即可:
# Test Alias User_Alias MY_USERS = kebin,TestUser Host_Alias MY_HOSTS = kebin-vm-centos7,127.0.0.1,localhost,192.168.0.50,192.168.0.99/24,192.168.0.100/255.255.255.0 Runas_Alias MY_USER_RUNAS = root,kebin,TestUser,sshd,apach Runas_Alias MY_GROUP_RUNAS = root,kebin,TestUser,sshd,apach Cmnd_Alias MY_CMNDS = /bin/*,/sbin/*,/usr/bin/*,/usr/sbin/*,/usr/local/bin/*,/usr/local/sbin/*,ALL # Test , 变量直接使用并和属性混合,用 ‘,’ 逗号隔开。 # kebin,TestUser,%wheel 127.0.0.1,localhost,kebin-vm-centos7 = (root,kebin:root,whell) ALL,/sbin/arp,/sbin/mount/ifconfig # MY_USERS MY_HOSTS = (MY_USER_RUNAS:MY_GROUP_RUNAS) NOPASSWD: MY_CMNDS MY_USERS,%wheel MY_HOSTS,192.168.0.188 = (MY_USER_RUNAS:MY_GROUP_RUNAS) NOPASSWD: MY_CMNDS,/*,(sshd) NOPASSWD: /sbin/ifconfig,(ALL:ALL) NOPASSWD: /sbin/mount,(:wheel) NOPASSWD: /sbin/fdisk,NOPASSWD: /sbin/arp ALL ALL = (ALL) NOPASSWD: ALL ALL ALL = (ALL) ALL
使用 sudo -l 命令列出当前用户可使用的命令规则:
[kebin@kebin-vm-centos7 ~]$ sudo -l 匹配 %2$s 上 %1$s 的默认条目: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 用户 kebin 可以在 kebin-vm-centos7 上运行以下命令: (root, kebin, TestUser, sshd, apach : root, kebin, TestUser, sshd, apach) NOPASSWD: /bin/*, /sbin/*, /usr/bin/*, /usr/sbin/*, /usr/local/bin/*, /usr/local/sbin/*, ALL, /* (sshd) /sbin/ifconfig (ALL : ALL) /sbin/mount (kebin : wheel) /sbin/fdisk, /sbin/arp (ALL) NOPASSWD: ALL (ALL) ALL
[OPTIONS]... [TIME]
设置日期:date -s 2000/11/05
设置时间:date -s 11:30:00
[OPTIONS]...
df -hi
[OPTIONS]...
显示字段含义:
free -m
free -h
详细参考 :Linux命令长选项"--"和短选项"-"和没有"-"选项区别(选项的单双连字符'-'和'--'区别)