Linux基础知识

shell

定义

shell是系统的用户界面,提供用户和内核交互操作的一种接口

使用

  1. 交互式命令行:等待用户输入一行一行执行

  2. shell脚本:写入一个文件,一起运行

bash shell

[root@localhost ~]# [用户名@主机名 目录名]权限标识

目录名:光标所在目录,家目录:~

权限标识:超级管理员权限:#,普通用户:$

cal命令

用于查看日历

cal -year -m 2020

ls命令

显示指定工作目录下的内容

-a 显示所有文件和目录

-l 加文件型态,权限,拥有者,文件大小

-r 次序相反(原来按照英文字母)

-t 按照建立时间先后

-A 与-a同但是不显示"."目前目录和'..'父目录

-F 文件名加符号 可执行文档:* ,目录:/, 链接:@

可以组合

  • 查看当前目录下文件详情,包括隐藏文件

[root@localhost ~]# ls -lha

cd命令

切换工作目录

  • 跳转到/usr/bin目录下

[root@localhost ~]# cd /usr/bin

跳到上一层 ca..

pwd命令

显示工作目录

echo命令

字符串的输出

-n:不输出尾行换行符

-e: 加反斜线转译

  • \ 反斜线

  • \a 报警符(BEL)

  • \b 退格符

  • \c 禁止尾随的换行符

  • \f 换页符

  • \n 换行符

  • \r 回车符

  • \t 水平制表符

  • \v 纵向制表符

poweroff命令

关机

reboot

重启

whoami

显示用户自身

快捷键、

快捷键作用
^C终止前台运行的程序
^D退出 等价exit
^L清屏
^A光标移动到命令行的最前端
^E光标移动到命令行的后端
^U删除光标前所有字符
^K删除光标后所有字符
^R搜索历史命令,利用关键词

帮助命令

history

-c 将目前shell的history命令删除

-a 将新增的命令写入histfiles 默认写入~/.bash_history

-r 将histfiles内容读入到目前shell的history记忆中

-w 将目前history记忆的内容写入到histfiles

  • 将history的内容写入一个新的文件中

[root@localhost ~]# history -w histfiles.txt

help命令

  • -d:输出每个主题的简短描述

  • -m:以伪 man 手册的格式显示使用方法

  • -s:为每一个匹配 PATTERN 模式的主题仅显示一个用法

man命令、

在线帮助手册

alias

设置指令别名

[root@localhost ~]# alias wl='ip address'
[root@localhost ~]# wl
  • 为了让别名永久生效,可以讲修改别名的命令写入bashrc文件,这个文件中的命令会在每次登陆命令行的时候执行

[root@localhost ~]# echo "alias wl='ip address'" >> /etc/bashrc

文件管理常见命令

ls:列出目录和文件

cd:切换目录

pwd:显示目前目录

mkdir: 创建新目录 -p递归创建包含上一层目录

rmdir:删除空目录

cp:复制文件或目录

rm:删除文件或目录 -f 忽略不存在 -r递归删除(危险)

mv:移动或修改名称 -f 已存在则覆盖 -i询问

touch

创建文件

cat命令、

-n 从1对输出行编号

-b 不对空白行编号

-s 空行合并

less命令

浏览文件

head命令

查看文件开头部分

  • -q:隐藏文件名,默认是隐藏

  • -v:显示文件名

  • -c<数目>:显示的字节数。

  • -n<行数>:显示的行数。

tail命令

把文本文件里的最尾部的内容显示在屏幕上

  • -f:循环读取

  • -q:隐藏文件名,默认隐藏

  • -v:显示文件名

  • -c<数目>:显示的字节数

  • -n<行数>:显示文件的尾部 n 行内容

  • -s:与-f合用,表示在每次反复的间隔休眠S秒

vim

命令模式,输入模式,末行模式

命令模式

刚启动就是命令模式,

按下i 切换到输入模式,

x删除光标处的字符,

:切换到末行模式

ctrl+f 下一页 +d 下半页

ctrl+b 上一页 +u 上半页

0:移动到一行最起点

$:移动到一行最后

G:移动到最后一行

gg:第一行

文本的替换:
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 (常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

输入模式

esc 进入命令模式

末行模式

q退出程序, w保存文件

删除所有文件中的内容:ggdG或者Gdgg

dd:删除一行

ndd:向下删除n行

yy:复制光标所在一行 +n 向下复制n行

p:下一行粘贴 P:上一行粘贴

u:复原上一个动作

Ctrl+r:重做上一个动作

.:重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了

set nu :设置行号

文件类型

ls -l

-:普通文件

d:目录文件

b:块设备文件

c:字符设备文件

s:套接字文件

p:管道文件

l:链接文件

file

查看文件类型

stat

显示文件时间

A时间:访问时间

M时间:修改时间

C时间:修改状态

文件查找

which

查找环境

locate

用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或目录

find(常用)

find 路径 选项 [查找条件+处理动作]

条件: -name 文件名查找

-iname 忽略大小写

-size +5M 大于5M

-maxdepth 3 -a -name '' 指定目录深度

-a 同时满足 -o 或

-mtime +5 修改时间超过5天

-user wxz 属主是wxz的文件

-group xwz 属组是xwz的文件

-nouser 没有属主

-type d 文件类型

-regex ' ' 正则表达式

用户权限

用户的查看

id

-g 所属群组的idd

-G 附加群组的id

uid

0: root

1~999 系统用户

1000+ 普通用户

相关的文件

passwd文件

保存用户信息

shadow文件

密码过长用x代替,真实的密码保存在shadow中

group文件

用户和组的对应关系,在group文件中保存

用户的管理

添加用户 :groupadd

  • -g:指定新建工作组的 id;

  • -r:创建系统工作组,系统工作组的组ID小于 500;

  • -K:覆盖配置文件/etc/login.defs

  • -o:允许添加组 ID 号不唯一的工作组。

  • -f:如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。

修改用户组:groupmod

更改群组识别码或名称

  • 修改fd组的名字为finance

[root@localhost ~]# groupmod -n finance fd
[root@localhost ~]# tail -n 1 /etc/group
finance:x:4000:

删除用户组:groupdel

[root@localhost ~]# groupadd test

用户组成员管理:gpasswd

  • -a:添加用户到组;

  • -d:从组删除用户;

  • -A:指定管理员;

  • -M:替换组中的全部用户列表,不包含在内的用户将会从组中删除;

  • -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

  • 创建用户itadmin,并且将其加入it组

useradd itadmin
gpasswd -a itadmin it

用户管理: useradd

为添加的用户指定相应的用户组

[root@localhost ~]# useradd -g root user02

为新添加的用户指定home目录

[root@localhost ~]# useradd -d /home/test user03

不给登录的用户

[root@localhost ~]# useradd -g root user02

切换用户: su

su - 切换到相应的环境变量

修改哦用户 usermod

改变目录:usermod -d /home user01

改变uid:usermod -u 6666 user02

删除用户:userdel

-r 删除目录及其之中的文件

passwd

改密码

change

改密码过期时期

sudoers

创建一些非root用户, 只让它们拥有不完全的权限

文件权限

ll或者ls -l

文件类型(1)+属主权限(3)+属组权限(3)+其他权限(3)

分别是读 写 执行

修改文件属主 chown

设置文件的所有者为root

[root@localhost ~]# chown root anaconda-ks.cfg

拥有者为user11,允许使用的组为it

[root@localhost ~]# chown user11:it file.txt

修改文件权限 chmod

u:拥有者

g:同一个群体(group)

o:其他人

a:表示ugo

八进制语法

1:执行

2:只写

4:只读

所以:rwx==4+2+1

文件访问控制列表

getfacl命名

查看权限列表

getfacl file1

-R递归显示子目录

-e显示所有有效权限

setfacl命令

精确设置文件权限

-R:递归操作子目录

-m:更改文件的访问文件列表

给用户添加acl权限:

[root@localhost ~]# chown root:worker /workdir
[root@localhost ~]# chmod 770 /workdir  # 不允许其他用户对目录的权限

给user1可读可进入权限

[root@localhost ~]# setfacl -m u:user1:rx /workdir/
[root@localhost ~]# getfacl -c /workdir

移除user1的访问控制权限:

[root@localhost ~]# setfacl -x u:user1 /workdir/
[root@localhost ~]# getfacl -c /workdir/

mask

给用户或群组设定的权限不能超过 mask 规定的权限范围超过无效

  • 修改上面案例中的newfile的mask权限

  • [root@localhost ~]# setfacl -m m::rwx /workdir/newfile 
    [root@localhost ~]# getfacl -c /workdir/newfile 

特殊权限

suid只能运用在可执行文件上

含义是开放文件所有者的权限给其他用户

chmod 4765 file

-4 设置setuid -2 setgid -1 sticky

sgid

属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所属组用户的权限

sticky

权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777或者其他

chattr

改变文件属性

-a 仅供追加用途

-b 不更新最后存取时间

-R 递归处理 将文件下的子目录也处理

umask

建立文件时预设的权限掩码

-S 以文字的方式表示

进程

进程类型

1.守护进程:系统引导过程中启动,与终端无关

2.前台进程:通过终端启动

systemd

是一个用户空间程序,属于应用程序,不属于内核

他是linux中初始化系统 -- 第一个加载的进程

systemd unit
单元类型文件格式描述
Service unit.service服务类
Target unit.target一个 unit 服务组,用于模拟实现运行级别
Automount unit.automount文件系统自动挂载点
Device unit.device内核识别的设备文件
Mount unit.mount文件系统挂载点
Path unit.path文件或目录
Scope unit.scope外部创建的进程
Slice unit.sliceA group of hierarchically organized units that manage system processes.
Snapshot unit.snapshot系统快照
Socket unit.socket套接字
Swap unit.swap标识 swap 设备
Timer unit.timersystemd 的计时器
管理系统服务

主要命令工具是systemctl

systemctl start name.service启动服务
systemctl stop name.service停止服务
systemctl restart name.service重启服务(没启动的服务会启动)
systemctl try-restart name.service只重启正在运行的服务
systemctl reload name.service重载配置文件
systemctl status name.service systemctl is-active name.service检查服务状态检查服务是否启动
systemctl list-units --type service --all显示所有的服务状态
systemctl enable name.service启用开机自启服务
systemctl disable name.service停用自启服务
systemctl status name.service systemctl is-enabled name.service检查服务状态查看服务是否自启
systemctl list-unit-files --type service查看所有服务
systemctl list-dependencies --after列出在指定服务之前启动的服务(依赖)
systemctl list-dependencies --before列出在指定服务之后启动的服务(被依赖)

ps

长用组合

ps aux

ps -ef

ps -efH

top

显示进程动态

-d 改名更新速度

-c 切换显示模式

-S 积累模式

-s 安全模式 将交互式命令取消

-i 不显示闲置的无用的进程

-n 显示更新速度

-z 彩色

kill

删除执行中的程序或工作

pkil

杀死一个进程,杀死指定名字的所有的进程

-u 指定进程名

-t 指定终端

实例

结束所有的sshd进程

pkill sshd

结束所有的user1的进程

pkill -u user1

进程优先级

相对优先级 nice和PR

值越高优先级越低

PR = Nice + 20

查看进程nice级别

使用ps查看
ps aux pid,command,nice --sort=nice
ps aux pid,command,nice,cls --sort=-nice
使用top查看

NI:实际nice级别

PR:将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

PR值是OS动态调整的

renice -20 10267

jobs

查看当前终端放入后台的任务

将任务放到后台

  1. 在命令后面加空格&,在后台运行

  2. 命令执行过程中按Ctrl+Z,在后台处于暂停

    实例

[root@localhost ~]# top &
[root@localhost ~]# vi &
[root@localhost ~]# ping baidu.com > /dev/null &
# 让ping运行,但是不显示结果
[root@localhost ~]# jobs
[1]   已停止               top
[2]-  已停止               vi
[3]+  运行中               ping baidu.com > /dev/null &

将任务恢复到前台

bg %工作号

存储管理

目前我们主流的硬盘主要有两种形态,一种是及机械硬盘(HDD),一种是的固态硬盘(SSD)

管理分区

列出分区情况: lsblk

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part
  ├─centos-root 253:0    0   47G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
sr0              11:0    1 1024M  0 rom

创建分区命令

对于小容量硬盘和需要广泛操作系统兼容性的场景,MBR分区方案仍然是一个可行的选择。而对于大容量硬盘、较新型号主板及高端计算机以及需要更高安全性和数据恢复能力的场景,GPT分区方案则是更好的选择。随着技术的发展和硬件的升级,GPT分区方案将成为未来的主流趋势。

fdisk 管理MRB分区

gdisk 管理GPT分区

parted 高级分区

parted命令

查看分区情况

parted /dev/sda print

设置磁盘的分区表

[root@localhost ~]# parted /dev/sdb mklabel msdos
或者
[root@localhost ~]# parted /dev/sdb mklabel gpt

对磁盘进行分区

[root@localhost ~]# parted /dev/sdb mkpart primary 1 200M

删除分区

[root@localhost ~]# parted /dev/sdb rm 1

fdisk 和 gdisk工具

参数作用
m查看全部可用的参数
n添加新的分区
d删除某个分区信息
l列出所有可用的分区类型
t改变某个分区的类型
p查看分区信息
w保存并退出
q不保存直接退出

mkfs工具

在特定分区建立文件系统

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

实例

  • 实例,使用parted分区,然后使用mkfs创建ext4文件系统

    [root@localhost ~]# parted /dev/sdb mklabel gpt
    [root@localhost ~]# parted /dev/sdb mkpart primary 0 10G
    [root@localhost ~]# mkfs.ext4 /dev/sdb1
    [root@localhost ~]# parted /dev/sdb print

mount

挂在文件系统

  • 实例,挂载分区/dev/sdb1/mnt/volume1下,并且设置为永久自动挂载

[root@localhost ~]# mkdir -p /mnt/volume1
[root@localhost ~]# mount /dev/sdb1 /mnt/volume1
[root@localhost ~]# df -h
# 卸载sdb1
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /mnt/volume1 ext4 defaults 0 0
[root@localhost ~]# mount -a

umnout

撤销已经挂载的设备文件

df -h

显示磁盘空间

du

查看某个目录下文件数据的占用量

 du -sh /etc

添加交换区

在硬盘中预先划分一定的空间,把内存中暂时不常用的数据临时存放到硬盘中

交换分区的大小一般为真实物理内存的1.5~2倍

mkswap /dev/sdb2
free -h
swapon /dev/sdb2
vim /etc/fstab 
UUID=ff13d896-a59e-430d-8d14-3997d19f5de9 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1                /data1    ext4    defaults    0 0
/dev/sdb2                swap  swap    defaults    0 0

quota

安装:yum install -y quota

显示空间已经使用的空间与限制

查看指定用户的磁盘配额和已使用空间

quota -u username

查看指定群组的磁盘配额

quota -g groupname

显示所有用户的磁盘配额

quota -au

查看指定文件系统的磁盘配额

quota -f /path/to/filesystem

软连接和硬链接

硬链接:原始文件被删除,依然可以通过硬链接文件来访问。

软连接不能

In

用于创建链接文件

软连接实例

[root@localhost ~]# echo "hello" > test [root@localhost ~]# ln -s test test123 [root@localhost ~]# cat test123 hello [root@localhost ~]# ls -l test -rw-r--r--. 1 root root 6 Apr 12 06:10 test [root@localhost ~]# rm -f test [root@localhost ~]# cat test123 cat: test123: No such file or directory

硬链接没有-s

磁盘阵列RAID

RADI O :

数据的并行读写,性能拉满没有容错,一步错全部错

RAID 1:

镜像磁盘,有备份的数据副本

RAID 5:

当其中一个硬盘驱动器发生故障时,剩余的硬盘驱动器可以通过计算奇偶校验信息来恢复丢失的数据。

RAID 10:

数据首先被镜像到两个或多个磁盘上(这类似于RAID 1),然后这些镜像组(也称为条带对)再被条带化到多个磁盘对上,以实现数据的并行访问(这类似于RAID 0)。

mdadm命令

RAID阵列的创建,调整,监控.删除等全套管理操作

# 基本语法
mdadm [mode] <raid-device> [options] <component-devices>
# mode表示操作模式例如Creat Assemble(装配)
# <r-d>表示要操作的设备名,例如/dev/md0
# option是操作的附加选项
# <c-d>阵列的成员设备

如何正确挂载

  1. 创建文件系统

    在挂载事前确保分区或设备有一个有效的文件系统.如果没有则用mkfs.xfs或者mkfs.ext4来创建

    mkfs.xfs /dev/md0 
    mkfs.ext4 /dev/md0
  2. 创建挂载点

    挂载点是一个目录,你需要有一个目录.

mkdir /mnt/myraid
  1. 挂在文件系统

    用mount命令将文件系统挂载到之前创建的挂挂载点

    mount /dev/md0 /mnt/myraid
  2. 验证挂载

    df -h

  3. 修改/etc/fstab 已自动挂载

    /dev/md0      /mnt/myraid  xfs    defaults   0 		0

LVM

PE最小存储单元,VG通过PV组合PE,成一个整体,然后LV再从VG中分出来挂载

LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。

部署逻辑卷

[root@localhost ~]# pvcreate /dev/sdb /dev/sdc  #添加两块硬盘支持LVM技术
[root@localhost ~]# vgcreate storage /dev/sdb /devsdc	#加到卷组shorage中
[root@localhost ~]# vgdisplay stprage  #显示卷组
[root@localhost ~]# lvcreate -n vo -l 37 -I 8M storage  #切割出一个约为150MB的逻辑卷
[root@localhost ~]# mkfs.ext4 /dev/storage/vo  #格式化并挂载
[root@localhost ~]# mkdir /mnt/vo
[root@localhost ~]# mount dev/storage/vo /mnt/vo
[root@localhost ~]# fd -h
 [root@localhost ~]# echo "/dev/storage/vo /mnt/vo ext4 defaults 0 0" >> /etc/fstabecho 

卷轴扩容

[root@localhost ~]# lvextend -L 290M /dev/storage/vo 
[root@localhost ~]# e2fsck -f /dev/storage/vo

卷轴缩小

[root@localhost ~]# umount /mnt/vo
[root@localhost ~]# e2fsck -f /dev/storage/vo
[root@localhost ~]# resize2fs /dev/storage/vo 120M

卷轴快照

[root@localhost ~]# vgdisplay
[root@localhost ~]# ls -l /mnt/vo
[root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo

软件包

  1. 源码包:需要编译

  2. 二进制包:已经编译

yum

下载安装的工具

官方源

查看默认的源

[root@localhost ~]# yum repolist

软键源存放得位置: /etc/yum.repos.d/

移除所有的源

# 先移除原有的所有源
[root@localhost ~]# rm -f /etc/yum.repo.d/*
# 通过curl命令来下载阿里云的源,并且放到/etc/yum.repi.d/下面
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# yum repolist

yum常用命令

yum clean all  # 清空缓存
yum makecache  # 重建缓存
yum repolist  #查询可用的仓库
查看软件包
yum provides pstree
yum provides /etc/ssh/sshd_config
yum search pstree
卸载
[root@localhost ~]# yum -y remove httpd
[root@localhost ~]# yum -y groupmove httpd
历史记录
[root@localhost ~]# yum history

RPM

将rpm包下载到本地,之后在安装

[root@atopos ~]# rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm

卸载

[root@atopos ~]# rpm -e vim-enhanced

编译

  1. 指定安装路径,设置功能,生成马克file

    ./configure
  2. make
    Makefile文件编译。可以加 -j 2 参数使用两个cpu核心进行编译
  3. make install

  4. make clean

数据通信基础

DNS(域名解析)

一套从域名到IP的映射的协议

域名解析过程

  1. 浏览器发起域名解析,查找有没有缓存,没有就查找hosts文件,没有再提出域名解析请求

  2. 将请求发送给本地服务器

  3. 接受请求后,查找本地的缓存,有就发回,没有本地服务器就把请求发给根域名服务器,根域名服务器给本地服务器发送对应的地址

  4. 重复3,直到找到正确的记录

  5. 本地域名服务区把结果保存放到缓存,同时把结果返回给客户机

配置网络服务

使用nmtui

#改成中文 LANG="en_US.UTF-8"

命令行配置

[root@localhost ~]# vim /etc/sysconfig/cntwork-scripts/ifcfg-ens??
[root@localhost ~]# systemctl restart network network

nmcli

完成网卡上的所有配置工作

. 查看接口状态

[root@localhost ~]# nmcil device status

. 查看链接信息

[root@localhost ~]# nmcli connection show

. 配置ip

[root@localhost ~]# nmcli con mod "ens33" ipv4.address 192.168.142.100/24 ipv4.getway 192.168.142.2 ipv4.dns "8.8.8.8,4.4.4.4"ipv4.method manual

. 启动停止删除接口

[root@localhost ~]# nmcli connection up ens33
[root@localhost ~]# nmcli connection down ens33
[root@localhost ~]# nmcli connection delete dhcp-ens33

ifconfig

显示或设置网络设备

防火墙

常用软件防火墙工具: iptables和firewalld

真正的防火墙:内核中的netfilter(网络过滤器)

五链

设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链

PEREOUTING (prerouting)

路由前的判断规则

INPUT

入站前的数据包

OUTUT

出战的数据包

FORPUT(forward)

处理转发的数据包

POSTROUTING(postouting)

由判断之后所要进行的规则

四表

raw表

确定对数据包的跟踪状态

mangle

数据的标记

nat表

修改数据包中的源,目标IP或端口

filter表

是否放行该数据包

四标顺序

raw--- mangle--- forward --- postrouting

iptables

-t: 指定表 默认是filter

-A: 添加规则,加上到哪一个链上

-j: 设置处理策略

-s: 指定数据包的来源地址

-p: 指定数据包的协议类型

增加规则

案例一:屏蔽其他主机上的ping包

[root@localhost ~]# iptables -A INPUT -s 192.168.142.100 -p icmp -j DROP
[root@localhost ~]# iptables -A INPUT -s 192.168.88.100 -j ACCEPT
# 目标来自 192.168.88.100 这个 IP 的封包都予以接受
[root@localhost ~]# iptables -A INPUT -s 192.168.88.0/24 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 192.168.88.10 -j DROP
# 192.168.88.0/24 可接受,但 192.168.88.10 丢弃

案例二:屏蔽Linux系统中的远程链接服务(sshd)

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT

查看规则

[root@localhost ~]# iptables -vnl INOUT -t filter --line-numbers
[root@localhost ~]# iptables -nl -t nat

删除规则

[root@localhost ~]# iptables -t nat -nl --line-numbers
[root@localhost ~]# iptables -D INOUT 1
[root@localhost ~]# iptables -D INOUT -p tcp --dport 80 -j DROP

清空所有规则

[root@localhost ~]# iptables -F

修改规则 -R

[root@localhost ~]# iptables -R INOUT 1 -p tcp --dport 8080 -j ACCEPT
[root@localhost ~]# iptables -t filter -R INPUT 1 -p tcp --dport 80 -j ACCEPT

自定义链

自定义一个WEB_CHAIN链

# 查看所有的系统链
[root@localhost ~]# iptables -L
# 添加自定义链
[root@localhost ~]# iptables -t filter -N web_chain
# -E 修改自定义链
[root@localhost ~]# iptables -t filter -E web_chain WEB_CHAIN
# 链中添加规则,开放80端口
[root@localhost ~]# iptables -t filter -A WEB_CHAIN -p tcp -m multiport --dports 80,433 -j ACCEPT

删除自定义链

[root@localhost ~]# iptables -t filter -F WEB_CHAIN
[root@localhost ~]# iptables -t filter -X WEB_CHAIN

规则的保护和恢复

# 保存到文件
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables-config
# 文件中到导入规则
[root@localhost ~]# iptables-restore < /etc/sysconfig/iptables-config

内网的数据代理及服务映射

背景:现在有两个服务器server1和server2,server1是可以上网的,server2是不可以上网的,我们需要在server1上配置NAT来让server2通过server1去访问外网,同样我们也可以通过server1来访问位于server2服务器上的内部网站

[root@localhost ~]# yum install -y httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# ss -nlt
# 1. 配置仅主机模式网卡的IP地址
# 2. 在server1中linux内核中开启数据转发的功能
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/50-default.conf
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p
# 或者[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
# 3. 访问外网的测试
ping baidu.com

配置SNA让server2能网上冲浪

# server1
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.142.0/24 -j SNAT --to-source 192.168.142.100

配置DNAT使可以访问server2中的内部网站

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.142.100:80

转发本地端口

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRCT --to-port 22

firewalld

管理工具-firewall-cmd

# 查看firewalld是否启用,是出于action的状态
[root@localhost ~]# systemctl status firewalld
# 查看当前所在的区域
[root@localhost ~]# firewalld-cmd --get-default-zone
public
# 查看网卡所在区域
[root@localhost ~]# firewalld-cmd --get-zone-of-interface=ens33
public
# 查询public区域是否允许请求SSH或者HTTP协议的流量
[root@localhost ~]# firewalld-cmd --zone=pubilc --query-service=ssh
[root@localhost ~]# firewall-cmd --zone=public --query-service=http
#修改策略
方法一:根据服务协议放行
[root@localhost ~]# firewalld-cmd -permanent --zone=public --add-service=httpd
方法二:根据端口号放行
[root@localhost ~]# firewalld-cmd --permanent --zone=public -add-port=80/tcp

端口转发

[root@localhost ~]# firewall-cmd --permanent --add-forward-port=port=6666:proto=tcp:toport=22
success
[root@localhost ~]# firewall-cmd --reload

服务访问控制

TCP Wrappers是一种用于网络服务访问控制的工具,它使用配置文件中的规则来决定是否允许或拒绝对特定网络服务的访问。控制列表由两个主要文件组成:/etc/hosts.allow和/etc/hosts.deny。这些文件包含服务和客户端的规则,用于控制服务的访问权限

[root@localhost ~]# vim /etc/hosts.deny 

SELinux安全子系统

SELinux是一个强大的访问控制机制,建立在Linux内核上,为系统提供了安全策略控制.

SELinux采用基于角色(role)和类型(type)的强制访问控制.

简单说,SELinux主要作用就是最大限度的减小系统服务进程可访问的资源(最小资源原则)

调整SELinux的模式

# 临时
## 查看当前模式
[root@localhost ~]# getenforce
Enforcing
## 临时调整为permissive
[root@localhost ~]# setenforce 0
[0]为permissive,只记录不阻止

# 永久
[root@localhost ~]# vim /etc/selinux/config
SELINUX=enforcing
SELINUXTYPRE=targeted

自主访问控制(DAC)

在没有使用SELinux的操作系统中,决定一个资源是否能访问的因素是:某个资源是否拥有对应用户的权限

但是root不受管制,都可以访问的

这种权限管理机制的主体是用户,也称为自主访问控制(DAC)

强制访问

在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限

即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小

这种权限管理机制的主体是进程,也称为强制访问控制(MAC)

计划任务

单次调动执行at

yum install -y at
# 启动
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl enable atd     
语法结构

at [option] time

选项

-f 指定包含任务的文

-q 指定新任务的队列名称

-l 指定待执行的任务列表

-d 指定删除的待执行任务

atq : 查看待执行任务

atrm : 通过序号删除任务

timespec

  now +5min            # 从现在开始5分钟后
  teatime tomorrow  # 明天的下午16:00
  noon +4 days        # 4天后的中午
  11:20 AM            # 早上11:20
  .....

循环调度执行cron

# 检查是否启动
[root@localhost ~]# systemctl status crond.service
# 启动
[root@localhost ~]# systemctl start crond.service

cron的基本语法

[root@localhost ~]#crontab -l # 列出当前计划任务
[root@localhost ~]#crontab -r # 删除当前计划任务
[root@localhost ~]#crontab -e # 编辑当前计划任务
[root@localhost ~]#vim /etc/cron.deny # 加入的用户不能使用cron

cron任务的格式

分 时 日 月 星期 命令
* 表示任何数字都符合
0 2 * * * date >> date.txt    # 每天的2点
0 2 14 * * date >> date.txt    # 每月14号2点
0 2 14 2 * date >> date.txt    # 每年2月14号2点
0 2 * * 5 date >> date.txt    # 每个星期5的2点
0 2 * 6 5 date >> date.txt    # 每年6月份的星期5的2点
0 2 2 * 5 date >> date.txt    # 每月2号或者星期5的2点   星期和日同时存在,那么就是或的关系
0 2 2 6 5 date >> date.txt    # 每年6月2号或者星期5的2点

存放位置

/var/spool/cron/root

日志管理

都在/var/log下

查看日志

cat tail 配合grep

日志系统-rsyslogd

rsyslogd:绝大部分日志系统,和操作系统有关,安全,认证sshd,su,计划任务

配置文件
[root@localhost ~]# rmp -qc rsyslog
/etc/logrotate.d/syslog        # 日志轮转(切割)相关
/etc/rsyslog.conf            # rsyslogd的主配置文件
/etc/sysconfig/rsyslog        # rsyslogd相关文件

##logrotate(日志轮转)

[root@localhost ~]# ll /etc/cron.daily
[root@localhost ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

# 日志轮转状态/var/lib/logrotate/logrotate.status
# 日志轮转规则按照/etc/logrotate.conf中来

logrotate主配置文件

[root@localhost ~]# vim /etc/logrotate.conf

子配置文件

[root@localhost ~]# cat /etc/logrotate.d/syslog

I/O重定向

标准输入 0

标准正确输入 1

标准错误输出 2

[root@localhost ~]# date 1> date.txt
[root@localhost ~]# cat date.txt

[root@localhost ~]# date >> date.txt
[root@localhost ~]# date >> date.txt
[root@localhost ~]# date >> date.txt
[root@localhost ~]# cat date.txt

[root@localhost ~]# touch file
[root@localhost ~]# cd file
bash: cd: file: 不是目录
[root@localhost ~]# cd file 2> log.txt
[root@localhost ~]# cat log.txt
bash: cd: file: 不是目录
[root@localhost ~]# ls /home/ /test
ls: 无法访问/test: 没有那个文件或目录
/home/:
user01

#将正确和错误的输出都输出的文件中
[root@localhost ~]# ls /home/ /test &> log.txt
[root@localhost ~]# cat log.txt
ls: 无法访问/test: 没有那个文件或目录
/home/:
user01
[root@localhost ~]# ls /home/ /test > log.txt
ls: 无法访问/test: 没有那个文件或目录
[root@localhost ~]# ls /home/ /test > log.txt 2>&1
[root@localhost ~]# cat log.txt
ls: 无法访问/test: 没有那个文件或目录
/home/:
  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值