目录
3.4 CentOS6.x & CentOS7.x 系统运行级别设置
3.5 CentOS6.x 至 CentOS7.x 命令的升级
3.7 systemctl 操作 Unit 单元默认后缀 & Unit 名@模板
1. groupadd 、groupdel 、groupmod 组的创建 & 删除 & 修改
2. useradd 、userdel 、usermod 用户的创建 & 删除 & 修改
3. passwd 、gpasswd 用户口令 & 组用户添加删除
十二、命令——长选项"--"、短选项 "-" 、无"-"选项、用法
一、文件基本操作命令
1. ls 展示目录列表
[OPTIONS]... [DIR | FILE]...
- -a :显示目录下全部文件和文件夹,包括隐藏文件和文件夹。
- -R :递归显示目录下的所有文件和文件夹。
- -l :显示详细信息,如文件权限、大小、修改的时间等。等价于 ll 命令。
- -h :和 -l 一起使用,易于阅读的文件大小 K 、M 、G ,而不是 byte 。
ls / ~/ :可指定显示多个目录。
ls -lh FILE :显示指定文件信息。
列表详细目录中最前面字母代表的意思:
- 普通文件
d 目录
c 字型装置问价
b 区块装置文件
p 具名贮列
f 一般文件
l 符号链接
s socket
文件颜色表示的含义:
浅蓝色 :链接文件。
灰色 :其它文件。
绿色 :可执行文件。
红色 :压缩文件。
蓝色 :目录。
黄色 :设备文件。
红色闪烁 :链接文件有问题。一般问题就是链接的源文件不存在。
2. pwd 显示当前所在路径
pwd
3. cd 切换目录
[DIR]
- ./ :当前目录。
- ../ :上一级目录。
- / :系统根目录下。
- ~ :当前用户的根目录下。
- - :上一次所在的目录。
4. mkdir、touch 目录和文件的创建
mkdir [OPTIONS]... [DIR]...
- -p :若创建的目录不存在父目录则创建父目录。
mkdir -p DIR1/DIR2/DIR3...
touch [OPTIONS]... [FILE]...
touch File1 File2 FIle3...
5. rmdir、rm 目录和文件的删除
rmdir [DIR | FILE]... (删除目录,并且只能删除空目录)
rmdir DirName1 DirName2 DirName3...
rm [OPTIONS]... [DIR | FILE]... (可删除文件和目录)
- -r :用于删除目录,且递归删除。
- -f :强制删除。在一些 Linux 版本中,-r 递归删除目录时会询问,加上 -f 及全部回复 yes 。
rm -rf DirName File1 File2 File3...
6. cp 复制文件或目录
[OPTIONS]... [SOURCE_FILE]... [TARGET_DIR]
[OPTIONS]... [SOURCE_DIR] [TARGET_PATH]
[OPTIONS]... [SOURCE_FILE] [TARGET_NEW_FILE_NAME] 复制后的新文件名
- -r :递归持续复制,针对目录。
- -i :若目标已经存在,在覆盖时进行询问动作。
cp File1 File2 File3... TargetDir
7. mv 移动和重命名文件或目录
[OPTIONS]... [SOURCE_FILE]... [ TARGET_DIR]
[OPTIONS]... [SOURCE_DIR] [TARGET_DIR]
[OPTIONS]... [SOURCE_FILE] [TARGET_FILE]
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
- -i :若目标文件已经存在时,就会询问是否覆盖。
mv File1 File2 File3... TargetDir
mv SourceDir TargetDir 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。
mv SourceFile TargetFile 目标存在则覆盖,不存在则命名或移动并命名,否则只移动。
8. vi 、vim 编辑文件
vi | vim [OPTIONS]... [FILE] 文件存在则编辑,不存在则新建。
- -b :二进制模式。
vim FileName
- 按键 I 或 O 进入插入模式。
- 按键 Esc 退出插入模式。
- 按键 Shift + : 冒号等待输入的口令:q 退出,w 写入 ,wq 写入并退出,q! 强制退出(一般用在修改了文件又取消修改的情况),/ + 字符串 (在文本内搜索指定字符串) 。
- 替换单个字符串:光标移动到指定要替换字符串的行,然后 s/原字符串/新字符串
- 替换全部字符串:%s/原字符串/新字符串
- 按上下箭头可选历史命令。
9. cat 、tac 显示文件内容
cat | tac [OPTIONS]... [FILE]...
- -n :显示行号。
- cat :从头开始显示(常用)。
- tac :从尾部倒着开始显示。
cat File1 File2 File3... :可多文件一起显示。
tac File1 File2 File3...
10. less 、more 分屏显示文件内容
more [OPTIONS]... [FILE]... :仅只能向前移动和翻页。
- Enter :滚动下一行。
- 空格键 :向下翻一页。
- Q 键 :退出。
more File1 File2 File3... :可指定显示多个文件。
less [OPTIONS]... [FILE](强大):可以随意浏览文件(向前向后),而且在查看之前不会加载(读取)整个文件。
- -N :显示行号。
- Enter :滚动下一行。
- 空格键 :向下翻一页。
- PageUp :向上翻一页。
- PageDown :向下翻一页。
- / + 字符串 :向下查找指定字符串。
- ? + 字符串 :向上查找指定字符串。
- Q 键:退出。
11. head 、tail 指定行数显示文件内容
[OPTIONS]... [FILE]...
- 默认 head 、tail 只能显示 10 行。
- -n :指定显示的行数。
- head :显示头开始的内容
- tail :显示尾部的内容。
head File1 File2 File3...
tail File1 File2 File3...
12. ln 、unlink 文件链接符
- 何为文件连接:及用一个子文件链接(称为:链接文件)一个源文件,源文件可被多个子文件链接,删除链接文件则不会影响到源文件,访问链接文件就是访问源文件。链接文件就是源文件的通道。
- 链接文件的权限是与源文件不同的,所以更改链接文件的权限并不会同时修改到源文件。
建立链接 ln [OPTIONS]... [SOURCE_FILE] [DIY_NEW_LINK_FILE_NAME]
- -S :建立软链接。(默认硬链接)
1. 建立硬链接符
硬链接:源文件不允许被目录引用。也就是说,目录不允许指向源文件。
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]$注意权限和属主中间的数字,此为链接的文件数。
2. 建立软链接符
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]$注意权限和属主中间的数字,此为链接的文件数。
3. 解除链接符
解除链接 unlink [LINK_FILE]
unlink linkFile
二、查找命令
1. grep 查找文件内容
- 此命令的好处是能自动匹配连续的字符。
[OPTIONS]... ' Query String ' [FILE]...
- -r : 递归搜索。
- -v :反向选取。
- -o : 只显示被模式匹配到的字符串,而不是整个行。
- -n :显示行号。
- -i :忽略大小写。
grep ‘ 要查找的字符串 ’ TargetFile1 TargetFile2 TargetFile3...
2. find 递归查目录或文件
find [PATH] -name ' Query String '
find /sbin/ -name ifcon*
3. which 查找命令位置
which CommandName
三、特殊操作符
- 特殊操作符不允许当作文件名或目录名使用(除隐藏属性点 .)。
- 若要使用特殊操作符当文件名则使用转义符 \ 。
- 如果使用了特殊操作符当文件名,需要访问时,必须把特殊操作符转义才能访问文件。
1. 管道操作符 |
用于数据的存储传输。
[SOURCES_DATA] | [COMMAND : grep 、ls 、cat 、less、head ...]
左边是一些命令产生的数据 --> 中间管道符 --> 右边是要对数据操作的命令
ls -R / | less
cat File | grep 'Query String'
... ...
2. 通配符 * 与 ?
- * : 匹配连续多个字符。可用于多选、查找等字符串匹配的等操作。
- ?:匹配单个字符。* 比 ? 更常用。
less *.java
less Hello*.javall *.txt
ls -R / | grep *.javamv CentOS-* BakDir
3. 重定向符 > 、>> 、<
COMMAND > | >> | < FILE
- 输出重定向:左边命令产生的数据 写出 右边文件中。若文件不存在则自动创建。
- > :覆盖写出。
- >> :文本最后追加写出。
- 输入重定向:将右边的文件 传递到 左边命令进行操作。文件不允许不存在。
- <
ls > 1.txt
ls >> 1.txtcat < 1.txt (cat 1.txt)
4. 转义符 \
\COMMAND
- 把一些命令的操作符转换成字符,而不是当命令使用!
- 一个转义符 \ 只能转义一个字符。
- 需要转义的字符包括:
' " * ? \ ~ ` ! # $ & | 空格
创建一个带 > 的文件:touch \>FileName 。当访问这个文件时也需要转移符,否则会把 > 重定向使用。
创建带有空格的文件:touch A\ \ \ A 。当访问这个文件时也需要转移符,否则会把空格当分隔使用。
删除带 3 个空格的文件:rm A\ \ \ A
5. 单引号转义符 ''
- 单引号内的所有字符都会转换成字符串,包括空格,包括特殊操作符及命令。
- 一个单引号 '' 能转义连续字符。
创建带有空格的文件:touch ' 'A
删除带 3 个空格的文件:rm ' 'A
6. . 隐藏文件或目录
- 文件名或目录名最前面加点 . 就是隐藏属性 。
touch .FileName
mkdir .FileName
四、打包与压缩命令
常见的压缩格式:.zip .rar .tar .gz .bz2 .xz
- 何为打包 ? :将多个文件或目录合并成一个文件。
- 何为压缩 ? :将一个文件通过某些算法可以缩小文件体积。
1. tar 打包和压缩及解压缩
- 打包并压缩 [OPTIONS]... -c[ z | j | J ]f [DIY_NEW_FILE_NAME] [FILES]...
- 拆包并解压缩 [OPTIONS]... -x[ z | j | J ]f [FILES]
- 注意打包和拆包时,压缩选项都只能选一个。
- -c :打包。
- -x :拆包。
- -f :表示使用归档文件或 ARCHIVE 设备,必选选项。
- -v :输出过程信息。
- -t :仅查看列出打包或压缩的文件列表。
- -z :压缩或解压缩 .gz 格式。
- -j :压缩或解压缩 .bz2 格式。
- -J :压缩或解压缩 .xz 格式。
tar -czf MyTest.tar.gz File1 File2 File3 Dir1 Dir2 Dir3
tar -xzf MyTest.tar.gz
2. gzip .gz 格式压缩与解压缩
[OPTIONS]... [FILE]...
- -d :解压缩。
- -c :保留源文件方式输出写入新文件。配合 > 定向符写出文件,格式: [SourceFile] > [NewFileName.Format](保留源文件,gzip 的压缩与解压缩默认不保留源文件)
- -r :在目录上递归操作。(将目录下所有文件进行压缩或解压缩)
- -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
- -v :输出过程信息。
- -l :仅查看压缩包文件列表。
压缩 :gzip File1 File2 File3...
解压缩 :gzip -d File1.gz File2.gz File3.gz...
保留源文件压缩 :gzip -c SourceFile > DirNewFileName.gz
保留源文件解压 :gzip -dc SourceFile.gz > DirNewFileName
3. bzip2 .bz2 格式压缩与解压缩
[OPTIONS]... [FILE]...
- -d :解压缩。
- -k :压缩或解压缩时保留源文件。(默认不保留源文件)
- -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
- -v :输出过程信息。
压缩 :bzip2 File1 File2 File3...
解压缩 :bzip2 -d File1.gz File2.gz File3.gz...
5. rar .rar 格式压缩与解压缩
压缩 :[OPTIONS]... a [DIY_NEW_FILE_NAME] [FILE]...
解压 :[OPTIONS]... x [FILE]
- a :新压缩文档名,并将随后的文档都压缩到此新压缩包中。
- x :解压缩。
- -v :输出过程信息。
- -l :仅查看压缩包的文件列表。
压缩 :rar a NewRAR.rar File1 File2 File3...
解压 :rar x File.rar
4. zip & unzip .zip 格式压缩与解压缩
zip 压缩
[OPTINS]... [DIY_NEW_FILE_NAME] [FILE]...
- -1 ~ -9 :压缩等级,默认 -6 ,等级越高压缩比越好,但速度会降低。
- -v :输出过程信息。
- -r :在目录上递归操作。(将目录下所有文件进行压缩)
zip -r9v MyFiles.zip File1 File2 File3...
unzip 解压缩
[OPTIONS]... [FILE]...
- -v :输出过程信息。
unzip -v File1.zip File2.zip File3.zip
五、文件权限操作命令
文件所属及权的修改。
1. chown 属主和属组修改
[OPTIONS]... [ [USER] [:] [GROUP] ] [FILE]...
- -R :递归目录下改变文件的属主。
chown user1 File1 File2 File3...
chown -R user1 MyDir
使用 " :" 冒号:
修改属主和属组 chown root:root File1 File2 File3...
只修改属组 chown :root File1 File2 File3...
2. chgrp 属组修改
- chown 比 chgrp 更常用。
[OPTIONS]... [GROUP] [FILE]...
- -R :递归目录下改变文件的属组。
chgrp root file1 file2 file3...
3. chmod 文件权限修改
- -rwx------ :用 ll ( ls -l )命令可以看到,最前面 - 是文件类型,之后是权限,每三个字母为一组权限,没有权限用 - 表示。
- u (user) 主用户权限、g (group) 组用户权限、o (other) 其它用户权限 :一个文件分为三组权限,每组权限有 (r)读&(w)写&(x)执行 权限。
权限 | 权限数值 | 二进制 | 具体作用 |
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...
六、软件及进程管理命令
1. rpm .rpm格式软件的安装和删除
[OPTIONS]... [FILE.rpm]...
- -q :查询指定软件是否安装。
- -a :表示全部 ALL,一般和 -q 一起使用则查询全部软件。
- -i :安装软件。
- -e :卸载软件。
- -v :显示处理过程的详细信息。
- -h :显示进度。
- --force :强制,如果要安装的软件的版本比较低或该软件包在系统中已存在,系统会给出提示并拒绝安装,此时可以加上参数—force来进行强制安装。
- --nodeps :不检查依赖关系,在安装或卸载软件时经常会遇到提示“该软件包与某某软件包存在依赖关系”,只有加上参数 --nodeps 忽略掉依赖关系才能进行安装或卸载。
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 ......
2. yum (源) 使用软件池安装或删除软件
[OPTIONS]... COMMAND [SOFTWARE_NAME]
- -y :之后的询问全部回答是。
- clean all :清除软件池缓存。
- makecache :从源中刷新软件池缓存。
- list :同样可以从源中刷新软件池软件列表。
- install :指定安装一个或多个软件。
- remove :指定移除一个或多个软件。
- check-update :检查是否有可用的软件更新包。
- upgrade :更新软件包同时考虑软件包取代关系。
- update :指定更新系统中的一个或多个软件包。
- --nogpgcheck :禁用 GPG 签名检查。在安装软件时,检查 GPG 校验失败会停止安装,加上此选项即可。
- provides :查找提供指定内容的软件包。有时候一个软件包分多个版本,这时候就需要在软件池目录中查找。通常格式 */SoftwareName 。
-
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
2.1 配置本地源
Local.repo
[Local] (本地源库名称一般和文件名一致)
name=local
baseurl=file:///mnt/iso (挂载 ISO 系统镜像的路径 /mnt/iso)
enabled=1
gpgcheck=0
设置好源后:
清除软件池缓存:yum clean all
刷新软件池缓存: yum makecache测试: yum list
2.2 国内网络源
3. ps 查看进程
[OPTIONS]...
- -e :显示全部进程。
- -f :显示详细信息,如所属用户,位置。
ps -ef | grep ssh
4. kill 结束进程
-9 [PROGRAM_PID]
- -9 :发送强制结束进程信号。
先用 ps 命令查看软件进程 PID ,再使用 kill 来强制结束。(或因为资源被某程序占用,手动结束进程)
kill -9 (PID)
七、设备管理
1. fdisk 、lsblk 查看分区列表
- fdisk -l :查看设备分区列表。
- lsblk -p :p (PATH) 显示设备设备完整路径 ,以树形式显示列出设备分区表。
2. mount 、umount 挂载与卸载设备
mount [-t <FileSystemType>] [-o <modes...>] [SOURCE_DEVICE_FILE] [MOUNT_TARGET_PATH]
umount <MountDeviceed | MountedTargetPath>
-t :指定文件系统类型。
- <iso9660> CD-ROM 光盘或光盘镜像。
- <auto> 自动检测文件系统。(默认)
- <minix> Linux 最早使用的文件系统。
- <ext4 、ext3 、ext2> Linux 目前常用的文件系统。
- <MS-DOS> fat16。
- <vfat> Windows98/ Windows2000/ WindowsXP 文件系统。
- <ntfs> WindowsXP/ Windows7/ Windows8/ Windows10 文件系统。
- <nfs> Unix(Linux) 网络文件共享系统。
- <cifs> Windows 网络文件共享系统。
- <hpfs> OS/2 文件系统。
-o :指定挂载方式。
- <loop> loop 设备是一种伪设备,使用文件来模拟块设备的一种技术,文件模拟成块设备后, 像一个磁盘或光盘一样使用。
- 如一个 .ISO 后缀的镜像文件,就可以模拟成一个设备来访问 ISO 镜像里的文件。
- <ro> 以只读方式挂载。
- <rw> 以读写方式挂载。
- <remount> 重新挂载。
- <iocharset> 指定访问文件系统所用字符集,例如 iocharset=utf-8 。
挂载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
3. 自动挂载
每次开机访问 Windows 分区或光驱、U 盘时。都要运行 mount 命令进行挂载,所以可以设置好配置文件后开机自动挂载。
- 配置文件 :/etc/fstab 。
- 配置格式 :<SourceDeviceFile> <MountTargetPath> <(auto) FileSystemType> <(defaults) MountMode> <0> <0>
编辑 /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
4. dd 转换或拷贝文件 (制作 U 启动盘)
(其它使用方式详细请搜)
[ if=<SourceFileISO> ] [ of=<TargetFile(Device)> ]
- if :读取源文件。
- of :写入目标文件。
dd if=/home/user/iso/my.iso of=/dev/sdb
八、网络管理
1. ifconfig 网卡管理
- -a :显示全部网卡信息。
- -s :显示网络设备接口信息,类似 netstat -i 。
- ifconfig <interface> [-]arp :禁用或启用 ARP 协议。(arp 表示启用,-arp 表示禁用) 重启系统失效。
- ifconfig <interface> down | up:关闭或启用网卡。
- ifconfig <interface> :查看指定网络设备接口信息。
- 临时配置网卡信息,重启网络服务失效 :
- ifconfig <interface> <address> netmask <netmask> :临时设置网卡 IPv4 地址。
- ifconfig <interface[:<STRING_Name>]> <address> netmask <netmask> :临时添加虚拟网卡 (多 IP) 地址 IPv4,网卡名后面带冒号 : + string ,及能用不同 IP 访问网络。
- Linux 虚拟网卡 (多 IP) 的原理就是:IP 地址不同,MAC 地址相同。(Linux 中 ifconfig 命令以及虚拟网卡配置文件只能是如此)
- ifconfig <interface> add | del <address>:临时设置网卡 IPv6 地址。或删除网卡 IPv4 、IPv6 地址。
- ifconfig <interface> hw ether(类型:以太网) <HW_Address> :临时设置网卡 MAC 地址。
- ifconfig <interface> mtu <bytes>:临时设置最大传输单元 ( bytes ) ,最大为 65535 bytes 。
启用或关闭网络接口: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
永久修改单网卡添加多 IP :
- cd /etc/sysconfig/network-scripts
- vi ifcfg-xxxx (主网卡配置文件)
- 修改其中的 BOOTPROTO=dhcp 为 BOOTPROTO=static
- 添加 IPADDR=你的主IP,IPADDR1=副IP1,IPADDR2=副IP2,IPADDR3=副IP3,...(其实就是添加多条 IPADDR 记录)
- CentOS6.x 重启网络服务(service network restart);CentOS7.x 重启网络服务(systemctl restart network)
END
- 修改网卡配置文件永久属性
- 网卡配置文件在 /etc/sysconfig/network-scripts/ ifcfg-xxx 下:
部分参数 | 描述 |
DEVICE=eth0 | 网卡设备名 |
NAME=eth0 | 网卡作用的描述,给用户看的。如在 Gnome 系统中,点击右上角网络图标时显示此名称。 |
TYPE=Ethernet | 网络类型,Ethernet 以太网 |
BOOTPROTO=dhcp | static 固定 IP、none 不使用协议,dhcp 协议 |
IPADDR=192.168.0.100 IPADDR1= IPADDR2= IPADDR3= ...... 单网卡多IP | 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 DNS3 DNS4 DNS5 ...... 多DNS解析 | 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用户控制该设备 |
1.1 多网卡配置(双网卡内外网)
- 物理网卡与虚拟网卡的区别
- 真实物理网卡可以绑定添加多个虚拟网络会话。(虚拟网卡只能在物理网卡上添加。多个物理网卡则指定某一物理网卡上添加虚拟网卡。)
- 虚拟网卡 (多 IP) 的原理就是:IP 地址不同,MAC 地址相同。(Linux 如此,其它操作系统如 Windows 不同 MAC 地址)
- 虚拟网卡 同样可以用配置文件的方式表示。
- 配置文件 DEVICE 属性网卡设备名必须设置成 主网卡名+:NEW_NAME 才能是虚拟网卡文件。
- 虚拟网卡文件名也必须和虚拟网卡配置文件的 DEVICE 属性设备名相同。
- 网卡配置文件 /etc/sysconfig/network-scripts/ ifcfg-xxx 下:不允许出现两个 ifcfg-xxx (除了 ifcfg-lo 环回地址、以及虚拟网卡配置文件)。否则使用重启网络命令时会失败。
- 计算机 & 网卡 & 物理网络接口 & 路由表的关系
- 计算机要访问一个 IP 时,通过查询路由表,选择指定的网卡(或虚拟网卡)并通过物理网络接口发送 IP 数据包。
- Interface 网络接口:要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要)
开始步骤:通过这个阔谱图案例来完成双网卡内外网通信。
外网网卡
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 虚拟机,所以就在虚拟机设置了)
- 添加内网虚拟网卡配置文件。(/etc/sysconfig/network-scripts/ ifcfg-xxx 添加虚拟网卡)
# 内网网卡不要设置默认网关 IP 地址。
# 为需要内网通信的主机内网网卡 IP 设置成 192.168.211.xxx/24 网络即可。
# 为内网网卡设置 MTU 值,提高局域网主机相互传输的 IP 数据包大小。
ifcfg-ens33:0TYPE=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
- Linux 路由表的配置。
# 默认网关设置成访问外网的路由器 LAN 接口的 IP 202.128.100.1 。让所有不在局域网内的所有 IP 数据包都通过此网关转发。# 设置默认网关,其实 DHCP 以及设置了分配的默认路由 IP 地址,已自动生成及维护,所以不用执行此条命令 route add default gw 202.128.100.1
注意:路由表项的 dev 接口设备指定的虚拟网卡及是虚拟网卡的父物理网卡。
END
2. route 路由管理
Options:
-n
:不执行 DNS 反向查找,直接显示数字形式的 IP 地址。( 常用命令显示 Route 表 )-net
:目标网络(一个网段;网络号)-host
:目标主机 IP 地址(表示连接到单部主机的路由)-A
:设置地址类型-C
:打印 Linux 内核的路由缓存-v
:显示详细信息-ee
:详细地列出路由表
Parameters:
- add :添加路由记录
- del :删除路由记录
- netmask :目标网络掩码
- gw :访问目标网络在当前网卡接口要经过的网关(路由器)
- dev :访问目标网络时所使用的网卡接口
- metric :路由优先级,数值越小优先级越高,0~255
- mss :设置TCP的最大区块长度(MSS),单位MB
- window :指定通过路由表的TCP连接的TCP窗口大小
- reject :设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。
2.1 Linux 路由表
列 | 作用 |
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 |
- Default 默认路由:(目标网络全0 + 目标网络掩码全0 + 网关)。作用:在路由表中没有找到需要访问网络的路由项时,所有 IP 数据包默认传送至网关,之后就是由网关(路由器)继续查找路由表进行转发数据包,以此类推直到找到目标主机为止(找不到这里不讲解)。
- Direct 直连路由:(目标网络 + 目标网络掩码 + 网关全0)。作用:数据包不需要经过网关(路由器)转发,而是直接发送至当前局域网中的主机。
- Static 静态路由:(目标网络 + 目标网络掩码 + 网关)。作用:需要传送至网关(路由器),由网关(路由器)继续查找路由表进行转发 IP 数据包,以此类推直到找到目标主机为止。
- Interface 网络接口:要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要)。换句话说:所以网卡的 IP 地址要访问另一个网卡的 IP 地址需要网段一致。
- 路由表自动生成与自动维护的路由:(静态和动态路由需要手动配置与设置)
- 直连路由:在一个设备中的多网卡(包括虚拟网卡)设置了 IP 地址后自动生成及维护的路由项。
- 默认路由:为网卡设置了默认网关后自动生成的路由项。(一般只给需要访问外网的网卡设置默认路由)(路由器不会自动生成默认路由)
2.2 路由优先级
Metric 需要一个正整数,范围 0~255,它用于指定路由协议的优先级。
- Linux 路由表优先级:通过 Metric 标识的数值越小优先级越高。如上表格中路由网络都是 192.168.2.0 ,会选谁呢?(同 Metric 数值也是遵循如下)
- 静态路由
- 直连路由
- 默认路由
- 路由器路由表优先级: 主机和服务器的路由表和路由器路由表优先级不同。
- (直连路由)具有最高优先级
- (静态路由)人工设置的路由条目优先级高于动态学习到的路由条目
- (动态路由:目标网络+网络掩码+网关)度量值算法复杂的路由协议优先级高于度量值算法简单的路由协议
- 路径长度
- 可靠性
- 延迟
- 带宽
- 负载
- 默认路由(路由器不会自动生成默认路由,需要手动添加)
- 不同厂商之间的定义可能不太一样
路由种类 | 路由优先级 |
Direct(直连路由) | 0 |
STATIC(静态路由) | 1 |
OSPF(动态) | 110 |
RIPv1、v2(动态) | 120 |
IBGP(动态) | 200 |
Special(动态) | 255 |
Default (默认) | 255 |
2.3 添加与删除路由表项
- 计算机 & 网卡 & 物理网络接口 & 路由表的关系
- 计算机要访问一个 IP 时,通过查询路由表,选择指定的网卡(或虚拟网卡)并通过物理网络接口发送 IP 数据包。
- 注意虚拟网卡指定的是父物理网卡:路由表项的 dev 接口设备指定的虚拟网卡及是虚拟网卡的父物理网卡。
- Interface 网络接口:要知道网卡与网卡的点对点链路连接通信需要相同的网段。(记住这句话非常重要)扩谱图:
常用命令格式:route [add | del] [-net <TargetNetwork> | -host <TargetHost>] netmask <mask> [gw <GatewayIP> | dev <NetCardInterface>]
- add :添加路由记录。
- del :删除路由记录。
- -net :目标网络。(一个网段;网络号)
- -host :目标主机 IP 地址。(表示连接到单部主机的路由)
- netmask :目标网络掩码。
- gw :访问目标网络在当前网卡接口要经过的网关(路由器)
- dev :访问目标网络时所使用的网卡接口
- metric :路由优先级,数值越小优先级越高,0~255
- mss :设置TCP的最大区块长度(MSS),单位MB
- window :指定通过路由表的TCP连接的TCP窗口大小
- reject :设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。
(1)添加 & 删除默认网关。
route add default gw <GatewayIP> [<NetCardInterface>]
route del default gw [<GatewayIP>] [<NetCardInterface>]
- 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 <NetworkAddress> netmask <Mask> [gw <GatewayIP>] [dev <NetCardInterface>]
- 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))。
备注:关于计算机网络的通信这里不多阐述!
3. arp IP 映射 MAC 地址缓存表
- ARP(Address Resolution Protocol)地址解析协议。网卡硬件设备不能直接识别 IP 数据包,网卡与网卡硬件设备之间需要知道对方 IP & MAC 物理地址才能互相通信,
( TargetIPAddress TargetMACAddress )。 - arp 命令用于操作主机中的 ARP 缓存表,可以显示删除或添加条目。
- 安全隐患:攻击者也会持续发送假 MAC 和其它主机或网关建立链路(被攻击者 ARP 缓存表中就存在了冒充的 IP & MAC 映射),欺骗其它主机冒充网关 | 或欺骗网关冒充其它主机。所以攻击者利用这一点能达到欺骗、监听、替换数据包等等操作。
[OPTIONS]...
- -a <HOST>:显示 ARP 缓存表所有条目。(显示前会重新确认 ARP 缓存表中的 IP-MAC 在局域网中是否存在)
- -v :显示 ARP 详细信息。(显示前会重新确认 ARP 缓存表中的 IP-MAC 在局域网中是否存在)
- -n :以数字形式显示 IP 地址,而不是名。如 gateway 网关地址。(直接显示,不确认 ARP 缓存表中 IP-MAC 在局域网是否存在)
- -d <HOST> :删除 ARP 缓存表中指定的主机 (IPAddress) 条目。
- -s <HOST> <MAC> :添加 IP 地址 & MAC 地址静态映射。(在添加之前会先测试此地址是否可达才添加 ARP ,反之否)(登出或重启失效)
- -f [ FILE ] (默认 /etc/ethers 文件,可以不指定文件) :从文件中获取并设置主机的 IP & MAC 地址静态映射。
- -i <interface> :指定要操作的网络接口。( 默认主网卡,每个网络接口(网卡) 都有一个自己的 ARP 缓存表 )
- 清空动态 ARP 缓存:ip neigh flush dev <interface> 。只清除 C Flag 标记 ARP 条目,不清除 M Flag 标记 Static 静态 ARP 条目。(这个时间点的 arp 命令版本不能一键删除,所以用 ip 命令)
IP-MAC ARP 映射有两种:
- 动态 IP-MAC 映射自动生成的。
- 静态 IP-MAC 映射表示手动设置的。
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
3.1 IP & MAC Static 静态地址绑定
- 默认配置文件:/etc/ethers 。用于永久保存 IP & MAC 地址静态映射关系。(没有则自行创建)
- 映射格式:<IPAddress> <MACAddress> 。(在默认 ARP 配置文件输入需要绑定的 MAC 地址并保存)
- 执行命令:arp -f 。(从 /etc/ethers 文件刷新 ARP 缓存表)
- 增加开机启动命令:编辑 /etc/rc.local 增加 arp -f , 并设置可执行权限 chmod +x /etc/rc.d/rc.local (/etc/rc.local --> /etc/rc.d/rc.local)。
备注:经测试 CentOS7.x 后,需要在 /etc/rc.local 文件中增加 arp -f 命令并设置可执行权限 chmod +x /etc/rc.d/rc.local。CentOS6.x 则不需要,开机自动获取 /etc/ethers IP & MAC 映射。
END
3.2 ARP 攻击防范
简单概述 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 映射即可)
- 静态绑定网关:
- arp -s <网关 IP> <网关 MAC> 。(临时的,重启网卡失效)
- vi /etc/ethers 并输入正确 <网关 IP> <网关 MAC> 后保存,再输入 arp -f 从默认 /etc/ethers 获取 IP & MAC 映射。
- 编辑 /etc/rc.local 增加 arp -f , 并设置可执行权限 chmod +x /etc/rc.d/rc.local (/etc/rc.local --> /etc/rc.d/rc.local)。
- 此时就能防止攻击者伪装网关(路由器) 。
- 静态绑定局域网内所有主机:(这里通过我写好的 Shell 脚本自动获取 IP-MAC)(防止攻击者冒充局域网主机监听信息)
终端以超级用户执行脚本:sudo bash scan_IP-MAC.sh
#!/bin/bash
:<<!
<<防 ARP 攻击>>
脚本仅支持 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
:<<!
获取局域网内所有在线主机的 IP-MAC 地址。
需要手动修改网络接口参数以及网络地址。
!
netCard=ens33
netAddress=172.17.21.
startScanRange=1
endScanRange=254
pingCount=1 #此参数可调大,防止让数据包传输过程中丢失
successCount=0
faildCount=0
# 判断/etc/ethers文件是否存在
default_ARP_cache=/etc/ethers
default_ARP_cache_bak=${default_ARP_cache}.bak
if [ -e $default_ARP_cache ];then
if [ ! -e $default_ARP_cache_bak ];then
# 不存在 /etc/ethers.bak 时备份
cp -p $default_ARP_cache $default_ARP_cache_bak
fi
# 防止和先前数据重复,清空 ARP 静态映射文件
cat /dev/null > $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 张雨烟'
- 双向绑定:就是在局域网中所有的设备系统网卡自身支持 ARP 协议的全部静态 Static 绑定对方的 IP-MAC 地址。
- 禁用网卡 ARP 协议:网卡禁用 ARP 协议后,Linux 的 ARP 缓存表还是可用的,禁用 ARP 协议后有些系统可能会清空 ARP 缓存表,所以需要手动添加需要访问的 IP 的 IP-MAC 映射到 ARP 表中。(禁用 ARP 协议后,攻击者就不能通过 ARP 协议骗你了)
- 原理:只要禁用了某设备系统的 ARP 协议后,如要访问目标 IP,双方都必须手动添加对方的 IP-MAC 静态 ARP 映射才能互相通信。
- 注意:在设备A系统中禁用了 ARP 协议。在设备B系统中没有禁用 ARP 协议并且有可能在添加设备A的IP-MAC静态 ARP 映射时不允许添加(提示意思如:目标主机无法访问),这是设备B系统的程序问题。( 我在 CentOS6/7.x 可以直接添加目标 IP-MAC 静态 ARP 映射而不需要测试目标主机是否可以访问或存在。Windows 10 却不允许)
- 缺点:系统与系统之间通信双方都需要手动添加对方的 IP-MAC 静态 ARP 映射,要不然访问不了网络。
- 我的思路步骤:
- 使用 Shell 脚本扫描局域网所有 IP-MAC 保存到 /etc/ethers (Linux 默认 ARP 静态文件)。
- 终端执行 ifconfig <interface 网卡设备名> -arp 。禁用 ARP 协议。(我在 Shell 脚本中加了#注释,可以去掉) ,禁用后无法使用此脚本,需要重新打开网卡ARP协议才能继续使用。
- 终端执行 arp -f <File 默认 /etc/ethers 文件,可以不指定文件> 。从静态缓存文件刷新 ARP 静态 IP-MAC 缓存。
- 编辑 /etc/rc.local 增加 ifconfig <网卡> -arp 另起行和 arp -f ,(我在 Shell 脚本中加了#注释,可以去掉), 并设置可执行权限 chmod +x /etc/rc.d/rc.local (/etc/rc.local --> /etc/rc.d/rc.local)。
备注:网关(路由器)的 IP-MAC 静态绑定不想去配置的话。就先 ping <网关> 让双方互相缓存对方的 IP-MAC 的 ARP 缓存。
4. traceroute 测试访问目标经过路由
[OPTIONS]... <HostName | IPAddress>
- -f :设置第一个检测数据包的存活数值 TTL 大小。
- -m :设置检测数据包的最大存活数值 TTL 大小。
- -v :详细显示指令的执行过程。
TTL (Time To Live) 生存时间:TTL的作用是限制IP数据包在计算机网络中的存在的时间。
- TTL 的最大值是 255,TTL 推荐值是 64。
- TTL 是 IP 数据包在计算机网络中可以转发的最大跳数,每经过一个路由器,路由器都会将这个 TTL 字段值 -1 ,然后再将 IP 包转发出去。如果在 IP 包到达目的 IP 之前 TTL 减少为 0,路由器将会丢弃收到的 TTL=0 的 IP 包并向 IP 包的发送者发送 ICMP time exceeded 消息。
traceroute 192.168.1.110
traceroute www.baidu.com
作用: 测试源主机与目标主机网络是否可达。如不可达可以知道在哪一设备出了问题。
5. netstat 网络状态
主要查看程序监听的端口。
[OPTIONS]...
- -t :列出 TCP 端口。
- -u :列出 UDP 端口。
- -n :不把监听端口解析成程序名称,显示端口。
- -l :显示监听服务器的 Socket 套接字。
- -a :显示所有 Socket 套接字。
- -p :显示 Socket 套接字的 PID / 程序名称。
- -i :显示网络设备接口信息。
常用命令 :netstat -tunlp
显示网络接口 :netstat -i
九、系统管理
1. service 服务管理
CentOS7 后改用 Systemctl 命令。
service <ServiceName> COMMAND
- start :启动服务。
- stop :停止服务。
- status :查看服务状态。
- active :活动进程运行中。
- active(running):一个或多个进程正在运行中。
- active(exited):已结束的服务。
- active(waiting):正在运行,等待其它事件处理完毕才继续执行。
- inactive :已停止。
- activing :当前正在启动中。
- deactiving :当前正在停止中。
- failed :失败状态。(启动单元时的错误,如配置文件、运行崩溃等...)
- dead :程序已经清除。
- active :活动进程运行中。
- restart :重新启动服务。
- reload :重新加载服务。
service sshd restart
sshd 中的 d 表示服务器服务。
2. chkconfig 服务自启管理
CentOS7 后改用 Systemctl 命令。
[OPTIONS]... <ServiceName> COMMAND
[--level <levels...>] <ServiceName> <on | off>
- --list :查看所有服务自启信息。
-
--level :设置程序在哪个运行级别中开启或关闭。7 个运行级别,可多选
-
0 :关闭所有进程并关机。
-
1 :单用户无网字符界面。
-
2 :无网多用户字符界面。
-
3 :有网多用户字符界面,服务器一般运行级别。
-
4 :保留。
-
5 :有网多用户图形界面。
-
6 :关闭所有进程并重启。
-
- on :开机自启。
- off :禁止自启。
chkconfig --level 0123456 sshd on
chkconfig telnet on
3. systemctl 系统管理
由来:CentOS7.X 以上使用 systemctl 代替并兼容 service & chkconfig 命令,以及 init 命令。
历史上,Linux 的启动一直采用init进程。
下面的命令用来启动服务。sudo /etc/init.d/apache2 start # 或者 service apache2 start
缺点:
- 启动时间长。
init
进程是串行启动,只有前一个进程启动完,才会启动下一个进程。- 启动脚本复杂。
init
进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
systemd & systemctl :
- Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
- 根据 Linux 惯例,字母
d
是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。 - 使用了 Systemd,就不需要再用
init
了。Systemd 取代了initd
,成为系统的第一个进程(PID = 1),其他进程都是它的子进程。
Linux 服务管理有两种方式 service 和 systemctl。而 systemd 是 Linux 系统最新的初始化系统 (init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd 对应的进程管理命令就是 systemctl。
- 平行处理所有服务,加速开机流程:旧的init启动脚本(System V的那个)是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待。而systemd可以让所有的服务同时启动,毕竟目前我们的硬件主机系统与操作系统几乎都支持多核心架构,因此你会发现到,系统启动的速度变快了;
- 一经请求就响应的on-demand启动方式:systemd仅有一只systemd服务搭配systemctl指令进行处理,无须其他额外的指令来支持。不像systemV还要init,chkconfig,service...等等指令。此外,systemd由于常驻内存,因此任何请求(on-demand)都可以立即处理后续的daemon启动的任务;
- 服务关联性的自我检查:由于systemd可以自行进行服务关联性的检查,因此如果B服务的启动前提是A服务,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务;
- 根据daemon功能分类:systemd旗下管理的服务非常多,为了理清所有服务的功能,因此,首先systemd先定义所有的服务为一个服务单位(这里单位叫“unit”,挺重要的,后面详细说),并将该unit分类到不同的服务类型(type)中。systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type);
- 将多个daemons集合成为一个群组:systemd将许多的功能集合成为一个所谓的target项目,这个项目主要用于设计操作环境的创建,所以集合了许多的daemons(执行某个target就是执行多个daemon);
- 向下相容旧有的init服务脚本:基本上,systemd是可以兼容init的启动脚本,因此,旧的init启动脚本也能够通过systemd来管理,当然了,这里仅限于不使用systemd的某些高级功能;
备注:用 VM 虚拟机同时启动 CentOS6.x 与 CentOS7.x 明显是 7 版本后启动速度比 6.x 前快。
3.1 Unit 单元管理命令
systemctl COMMAND <Unit>
- start :启动 unit。
- stop :关闭 unit。
- restart :关闭并启动(重启) unit,亦即执行 stop 再 start 的意思。
- reload :不关闭 unit 的情况下,重新载入配置文件,让设置生效。
- enable :设置 unit 开机启动。
- disable :设置 unit 开机不启动。
- status :查看 unit 程序进程状态。(显示的状态如下)
- active :活动进程运行中。
- active(running):一个或多个进程正在运行中。
- active(exited):已结束的服务。
- active(waiting):正在运行,等待其它事件处理完毕才继续执行。
- inactive :未运行。
- activing :当前正在启动中。
- deactiving :当前正在停止中。
- failed :失败状态。(启动单元时的错误,如配置文件、运行崩溃等...)
- dead :程序已经清除。
- active :活动进程运行中。
- is-active :检查 unit 是否正在运行中。
- is-enable :检查 unit 是否开机启动。
- kill :结束进程。
- show :显示 unit 的配置。
- mask :注销 unit,注销后你就无法启动这个 unit 了。
- unmask :取消对 unit 的注销。
systemctl COMMAND [--type | -t <TYPE>] [--state <STATE>] [-all | -a]
- list-units :列出所有启动 Unit 单元。
- list-unit-files :列出所有启动 Unit 单元文件。
- --type | -t :指定列出一种类型 Unit 单元。
- --state:仅列出指定 Unit 单元文件启用状态的文件 。
- enabled :开机启动。
- disabled :开机不启动。
- static :开机不启动,能被其它 enabled Unit 单元服务唤醒。(关联行性的服务 )
- mask :无法启动,已禁用状态。(systemctl [mask 注销 | unmask 取消注销])
- -all | -a :显示全部。
systemctl COMMAND
- systemctl get-default <Target> :获取当前默认 Target 启动目标。
- systemctl set-default <Target> :设置默认 Target 启动目标。
- systemctl isolate <Target> :临时切换 Target 启动目标。
3.2 单元类型
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 配置文件,告诉 Systemd 该这么启动这个 Unit 。
- Systemd 能够处理各种依赖与冲突关系以及先后顺序,依赖与冲突、先后顺序两者之间是独立的。比如 service1 依赖 service2,而且启动 service1 必须先启动 service2。所以 Systemd 将同时启动这2个服务。
Unit 单元配置文件存放目录 | ||
系统单元目录 | 说明 | 优先级 |
/lib/systemd/system | 本地配置的系统单元 | 高 |
/run/systemd/system | 运行时配置系统单元 | 中 |
/usr/lib/systemd/system | 软件包安装系统单元 | 低 |
3.3 Unit 单元文件状态 & 服务状态
Unit 单元文件状态 | |
状态 | 说明 |
enabled | 开机启动 |
disabled | 开机不启动 |
static | 开机不启动,能被其它 enabled Unit 单元服务唤醒。(关联行性的服务 ) |
mask | 无法启动,已禁用状态。(systemctl [mask 注销 | unmask 取消注销]) |
服务状态 | |
状态 | 说明 |
active
| 活动进程运行中。 |
inactive | 未运行。 |
activing | 当前正在启动中。 |
deactiving | 当前正在停止中。 |
failed | 失败状态。(启动单元时的错误,如配置文件、运行崩溃等...) |
dead | 程序已经清除。 |
3.4 CentOS6.x & CentOS7.x 系统运行级别设置
- systemctl get-default <Target> :获取当前默认 Target 启动目标。
- systemctl set-default <Target> :设置默认 Target 启动目标。
- systemctl isolate <Target> :临时切换 Target 启动目标。
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
3.4.1 永久修改系统默认运行级别配置文件
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 源文件启动目标即可更改默认系统运行级别。
|
3.4.2 临时切换系统运行级别
系统 OS | 命令 |
CentOS6.x | init <Number 0 ~ 6> |
CentOS7.x | systemctl <target> | init <Number 0 ~ 6> |
3.5 CentOS6.x 至 CentOS7.x 命令的升级
service <Unit> COMMAND | chkconfig [Options...] <Unit> COMMAND (Unit 自启动) | init <Number> (临时切换系统运行级别) | |||
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 命令临时切换系统运行级别。
3.6 电源模式管理
命令 | 说明 |
systemctl poweroff | 关闭所有进程并关机 |
systemctl reboot | 关闭所有进程并重启 |
systemctl suspend | 挂起模式 |
systemctl hibernate | 休眠模式 |
systemctl rescue | 恢复模式 |
systemctl emergency | 紧急恢复模式 |
挂起与休眠模式的区别:
- 挂起模式:挂起(暂停)模式会将系统的状态数据保存到内存中,然后关闭大部分的系统硬件,此时计算机及并没有关机。当用户按下唤醒及其的按钮,系统数据会从内存中恢复,然后,重新驱动被大部分关闭的硬件。然后开始正常运行,唤醒的速度较快。
- 休眠模式:是将系统状态保存到硬盘当中,保存完毕后,将计算机关机。让用户尝试唤醒系统时,系统会开始正常运行,然后将保存在硬盘中的系统状态恢复回来。因为数据是由硬盘读出,所以唤醒的性能与你的硬盘速度有关。
3.7 systemctl 操作 Unit 单元默认后缀 & Unit 名@模板
默认后缀:.service 。
如重启网络就不需要使用 .service 后缀,而其它类型单元则需要
systemctl restart network
Unit 名@模板:
有一些单元的名称包括一个 @ 标记。(name@string.service):这意味着它是模板单元 name@.service 的一个 实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个參数传给模板单元。模板单元会使用这个传入的參数取代模板中的 %I 指示符。
在实例化之前。systemd 会先检查 name@string.suffix 文件是否存在(假设存在,应该就是直接使用这个文件。而不是模板实例化了)。大多数情况下,包换 @ 标记都意味着这个文件是模板。假设一个模板单元没有实例化就调用,该调用会返回失败,由于模板单元中的 %I 指示符没有被替换。
4. iptables 防火墙
null
5. firewall 防火墙
- 查看防火墙状态:firewall-cmd --state
- 查看防火墙当前配置:firewall-cmd --list-all
- 查看全部区域配置:firewall-cmd --list-all-zones
- 重新刷新装载配置:firewall-cmd --reload (当有新的配置时,需要使用此命令使其生效)
5.1 默认区域:
区域 | 描述 |
public(公共) | 添加规则时,会默认添加到 public 区域 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。 |
home(家庭) | 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。 |
work(工作) | 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。 |
internal(内部) | 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接 |
external(外部) | 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。 |
trusted(信任) | 可接受所有的网络连接。 |
block(限制) | 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。 |
drop(丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。 |
dmz(非军事区) | 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。 |
- 设置给指定区域(默认 public):firewall-cmd --zone public
5.2 常用添加与删除防火墙规则:
固定格式 | 添加 & 删除 | 规则命令 | 描述 |
firewall-cmd | --add | interface | interface <name> 用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 <name> firewall-cmd --get-services命令 可以查询到所有的service。但是只能看到名字。(放行的服务) | ||
--remove | port | port < PortID/<tcp | udp> > 一般用于设置除了 services 服务类的 port 端口,也就是自定义的端口。(放行的端口) | |
source-port | source-port < PortID/<tcp | udp> > 跟前面的 port 一样的格式,这个指的是源port,port 指的是本机的 port。 | ||
protocol | protocol < tcp | udp | icmp | ip ... > 设置放行的协议 |
永久设置:--permanent 。使用此选项开机重启依然有效!
5.3 示例
// 添加放行的服务,永久生效
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
- 最后一定要重新装载配置文件:firewall-cmd --reload
- 以上操作均可不需要用 --zone public 区域选项,因为默认就是 public 区域
5.4 永久关闭防火墙 & SElinux
// 关闭防火墙
systemctl stop firewalld
// 禁止开机自启
systemctl disable firewalld
// 关闭 SElinux
setenforce 0 // 0 为关闭 1 为开启
// 修改 SElinux 配置文件
vi /etc/selinux/config
SELINUX=disabled // 赋值 disabled
十、用户 & 组管理
- Linux采用组来组织和管理用户。一个用户如果属于多个组,那这个用户就能共享这些组的权限。
- 在Linux中每个用户有用户标识符UID、主组GID、附加组,这些标识是一个无符号整数。
1. groupadd 、groupdel 、groupmod 组的创建 & 删除 & 修改
用户所属组配置文件 /etc/group 格式
root:x:0:
- 第1列:用户组。
- 第2列:用户组加密口令 X,对应的口令文件 /etc/gshadow 。
- 第3列:GID。
- 第4列:用户所属组成员列表,每个用户之间用逗号 "," 分隔,如果为空用户就是与组名相同的用户名。
用户组密码配置文件 /etc/gshadow 格式 ,是 /etc/group 的加密文件
root:::
- 第1列:用户组。
- 第2列:用户组密码,空或 ! 表示没有密码。
- 第3列:用户组管理者,多个用户管理者用逗号 "," 分隔。
- 第4列:用户所属组成员列表,多个成员用逗号 "," 分隔,如果为空用户就是与组名相同的用户名。
groupadd [OPTIONS]... [GROUP]
- -g :创建组时可指定 GID ,未指定则自动生成 。
- -o :允许创建重复主组 GID。
- -p :创建密码。
groupadd -g 1024 GroupName
groupdel [OPTIONS] [GROUP] 注意:删除某用户的主组时则删除失败。
- -f :强制。
groupmod [OPTIONS] [GROUP]
- -n :修改组名。
- -g :修改组 GID。
- -o :允许使用重复的 GID。
- -p :修改组密码。
groupmod -g 1024 TestUser
groupmod -n NewUserName TestUser
groupmod -p 521024 TestUser
2. useradd 、userdel 、usermod 用户的创建 & 删除 & 修改
用户账户信息文件 /etc/passwd 格式
root:x:0:0:root:/root:/bin/bash
- 第1列:用户名。
- 第2列:加密的用户口令 X,对应的密码文件 /etc/shadow。
- 第3列:UID。
- 第4列:GID。
- 第5列:用户描述。
- 第6列:家目录,/home/ 目录下,创建用户时自动创建并且与用户名同名。
- 第7列:登陆的 shell ,用户登陆后执行的命令程序。(默认 /bin/bash)
好玩技巧:将其它用户的 UID 和 GID 修改成和 root 用户一致,也就是 0 ,即可成为超级管理员!!!
查看登陆终端的用户列表 :cat /etc/passwd | grep bash
用户密码配置文件 /etc/shadow 格式
root:$6$pkc06.6SpTYnM04T$ZKO4dyJKhy.YHGtYChsBOYBremPpJplrciKnPXpoc3mh31n.9IUOjZfon6DFFikBqGkZTImI7PnOZcgvx59uE0::0:99999:7:::
- 第1列:用户名。
- 第2列:加密口令。为空则无需登陆口令,两个 !! 或一个 ! 感叹号表示未设置密码则不能登陆系统。
- 第3列:最后一次修改口令时间,起点 1970 年 1 月 1 日。
- 第4列:两次修改口令的最小时间间隔。
- 第5列:口令已用的时间,保持有效的最大天数。
- 第6列:系统警告到密码失效之间的天数。
- 第7列:账号保持有效的最大天数。
- 第8列:失效时间绝对天数,期满后无法登陆该账号。
useradd [OPTIONS]... [USER]
- -r :创建一个系统账户,(bash#)。
- -u :UID,未指定则自动生成。
- -o :允许使用重复的 UID 。
- -g :主组 GID | GroupName,指定主组时必须存在,未指定则自动生成与用户名同名的组名 。组配置在 /etc/group 和 /etc/gshadow 文件中。
- -G:附加组 GID | GroupName, GroupName,GroupName......,指定附加组时必须存在。
- -d :创建指定用户主目录 /home/UserName ,未指定则在 /home/ 下自动生成与用户名相同的主目录,有些系统需要自行创建主目录后并设置属主与属组。
- -s :指定登陆的 shell 命令程序。(默认 /bin/bash)
- -p :为用户设置密码,未设置密码的新账户默认不可登陆,可用 passwd 命令删除密码允许空口令登陆或设置新密码即可。
useradd -u 521024 -g TestUser1 -G 0,1000,TestUser2 -d /home/MyTestUser -p 521024 TestUser
TestUser1 主组以及 0,1000,TestUser2 附加组必须存在,否则提示没有此组,创建用户失败。
userdel [OPTIONS] [USER]
- -r :(remove)删除其和用户关联的主目录以及邮箱池目录(/var/mail/User)。(常用 )
usermod [OPTIONS]... [USER]
- -l :(login) 新的登陆用户名。
- -u :新的 UID。
- -o :允许使用重复的 UID 。
- -g :新的主组 GID。
- -G :新的附加组 GIDS 列表。
- -d :新的主目录,有些系统需要自行创建主目录后并设置属主与属组。
- -s :新的登陆 shell 。
- -p :新的登陆密码。
- -L :锁定用户,无法登陆账号。
- -U :解锁用户,恢复账号登陆。
usermod -l MyTestUser -o -u 0 -g 0 -G 0,1000,TestUser1,TestUser2 -p 666666 TestUser
把普通用户的 UID 和 GID 改成和 root 用户一样,那么此用户就变成了管理员,拥有管理员权限。
3. passwd 、gpasswd 用户口令 & 组用户添加删除
passwd [OPTIONS]... [USER]
- -d :删除密码允许空口令登陆。
- -l :锁定账号无法登陆。
- -u :解除账号锁定。
passwd -d user 删除用户密码
passwd user 更改用户密码,输入两次密码
gpasswd [OPTION] GROUP
- -r :(remove)删除组密码。
- -a :向组 Group 中添加单个用户 User。
- -d :从组 Group 中删除单个用户 。
- -A ,...:设置组的管理员列表。
- -M ,...:设置组的用户成员列表。
gpasswd -r user
gpasswd -a user group
gpasswd -d user group
gpasswd -A user1,user2,user3 mygroup
gpasswd -M user1,user2,user3 mygroup
4. id 查看用户信息
id <UserName> ,不指定用户则默认显示当前登陆用户信息。
5. su 切换用户
su user 切换指定用户,未指定用户默认 root 用户
6. sudo 普通用户超级权限工具
-
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 | %GROUPS> HOSTS = [ ( [ USERS_RUNAS ] : [ GROUPS_RUNAS ] ) ] TAG_SPEC: COMMANDS
- Users | %Groups ( 必须 ) :该规则针对的用户列表或用户组列表的组合(用户组需要用 % 百分号标识)。每个用户或组用 ‘,’ 逗号隔开。
- Hosts ( 必须 ) :该规则针对来自哪些主机的用户。可以是主机名、IP 地址,IP地址可以使用 IP/NETMASK 加子网掩码的位表示或精准的子网掩码。每个主机名或 IP 用 ‘,’ 逗号隔开。
- User_Runas | Group_Runas ( 可选 ) :表示以什么身份运行此规则。, 默认以 root 超级权限用户身份运行 。每个用户或组用 ‘,’ 逗号隔开。
- Tag_Spec ( 可选 ) :NOPASSWD: | PASSWD: | NOEXEC: | EXEC: | SETENV: | NOSETENV: | LOG_INPUT: | NOLOG_INPUT: | LOG_OUTPUT: | NOLOG_OUTPUT: 。常用的 NoPasswd 和 Passwd,运行命令时是否需要输入用户口令。
- Commands ( 必须 ) :指定规则可以运行哪些命令。绝对路径命令、或使用通配符 *(匹配连续的字符) | ?(匹配单个字符) 。每个命令用 ‘,’ 逗号隔开。
- 别名变量的定义 :变量类型关键字:User_Alias 、Host_Alias 、Runas_Alias 、Cmnd_Alias
- 也就是把 用户、主机、运行方式、命令、都封装到一个变量中,每个属性用 ‘,’ 逗号隔开。
- 格式:变量类型 全大写变量名(可以有下划线、数字) = Attributes,Attributes,.....
- 详细语法每部分格式 (其实有 6 个部分) :
-
<[USERS | USERS_ALIAS] | [%GROUPS | GROUPS_ALIAS]>
-
<HOSTS | HOST_ALIAS>
-
[ ( [<RUNS_USER | RUNS_USER_ALIAS>]:[<RUNS_GROUP | RUNS_GROUP_ALIAS>] ) ]
-
[SELINUX_SPEC]
-
[TAG_SPEC]
-
<COMMANDS | COMMANDS_ALIAS>
-
- 特殊关键字 ALL :代表全部的意思。可用在 Users、Hosts、Runas、Cmnds 。
- 注意 User_Runas & Group_Runas & Tag_Spec :如 (user:group) NOPASSWD: /sbin/mount,/sbin/ifconfig,mount 和 ifconfig ...... 之后的命令都会受到前面指定的 Runas 和 Tag_Spec 的影响,所以要想为后面的命令如 ifconfig 后的命令都指定新的 Runas 和 Tag_Spec 就可以写新的 Runas 和 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
十一、日常命令
1. shutdown 关机&重启
[OPTIONS]... [TIME]
- 立即选项:now 。
- 立即关机:-h now 、poweroff (这是一个命令)。
- 定时关机或重启:-h 00 : 30 (指定时间) ,-r 100 (无冒号则是多少分钟后)。
- 立即重启:-r now 、reboot (这是一个命令)。
- 不加 now 则默认 1 分钟后。
2. 常用快捷命令
- Tab :命令或字符补全。
- Ctrl + l :清屏,同 clear 命令。
- Ctrl + < C | Z > :停止当前正在运行的命令。
- Ctrl + D :结束 Shell 脚本循环。
3. date 显示或修改系统时间&日期
- -s :设置日期 & 时间。日期格式 [ -s <year/month/day> ]。时间格式 [ -s <time:minute:second> ]。
- date :显示日期和时间。
设置日期:date -s 2000/11/05
设置时间:date -s 11:30:00
4. df 显示磁盘占用空间
[OPTIONS]...
- -h :以最易理解的方式显示文件大小。
- -i :查看 inode 空间。 inode 用来存放档案及目录的及基本信息,包括时间、档案名、使用者及群组等。在分割扇区时就已经生成多数量的 inode 。inode 的数量关系着系统中可以建立的档案及目录总数。
df -hi
5. free 显示系统内存状态
[OPTIONS]...
- -b | -k | -m | -g :以 Bytes | KB | MB | GB 单位大小显示。
- -h :以最易理解的方式显示内存使用大小。
显示字段含义:
- total :总大小。
- used:已使用大小。
- free :剩余空间。
- Shared :多进程共享内存空间总额。
- buffers :缓冲区大小。
- cached :高速缓存大小。
- available :可用空间。
free -m
free -h
十二、命令——长选项"--"、短选项 "-" 、无"-"选项、用法
- 短选项"-" (short options):通常只包含一个大写或小写字母,如 ls -a 。短选项可组合使用,如 ls -as 。
- 长选项"--" (long options):包含了大小写字母组成的单词,如 ls --all 、ls --size 、ls --help 。
- 无"-"选项 :选项前面没有任何连字号(横 "-"),可组合使用,如 tar xzvf 。
- 短选项"-"+完整单词:如 find -name -fstypt 。这种是不被上述规则约束的。
- 短选项"-"和长选项"--"的区别:如 ls -a 和 ls --all 是等价的,短选项是长选项的简写,长选项是短选项的单词写法,有些选项只有短选项或者只有长选项(无等价副本)。