6.Linux操作系统操作与安全加固

6.操作系统操作与安全加固

6.1.linux操作系统基础

  • Linux的介绍

​ Linux是一个可以自由发布的类UNIX内核实现,它是一个操作系统的底层核心。Linux是由芬兰赫尔辛基大学的Linus开发,期间得到了网上广大UNIX程序员的帮助。它最初是受其教授的Minix(一个小型的类UNIX系统)启发而开发的程序,纯属个人的爱好,但是后来它自身逐步发展成为一个完整的系统。
要理解什么是Linux,首先要了解在Linux之前诞生的系统和应用程序——UNIX和GNU软件。

  • ​ Linux目录结构

​	在这里插入图片描述

bin -> usr/binBinaries (二进制文件) 的缩写, 这个目录存放系统用户常使用的命令
/boot存放着启动Linux时使用的一些核心文件,包括一些连接和镜像文件
/devdev 是 Device(设备) 的缩写, 存放的是 Linux 的外部设备
/etcetc 是 Etcetera(等等) 的缩写,存放所有的系统管理所需要的配置文件和子目录
/home用户主目录,每个用户都有自己的目录,一般用户目录名是以用户的账号命名
/lib、/lib64lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
/lost+found该目录一般情况下是空的,当系统非法关机后,就会存放一些文件
/medialinux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下
/mnt让用户临时挂载别的文件系统,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容
/optopt是optional(可选)的缩写,给主机额外安装软件的目录
/proc是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息【注意:该目录的内容不在硬盘上,在内存中】
/root该目录为系统管理员,也称作超级权限者的用户主目录
/run是一个临时文件系统,存储系统启动以来的信息; 当系统重启时,这个目录下的文件应该被删掉或清除
/sbin -> usr/sbin存放着超级用户root常使用的命令
/srv存放一些服务启动之后需要提取的数据
/tmptmp 是 temporary(临时) 的缩写,存放一些临时文件的
/usrusr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下
/varvar 是 variable(变量) 的缩写,存放着在不断扩充着的东西,将那些经常被修改的文件 放在这个目录下,包括各种日志文件

6.1.1.linux的基础操作

#查看主机名
	hostname
#列出文件列表
	ls  (-a -l - h)  
#复制文件
	cp     
#进入文件夹目录
	cd.. . ~ -  目录名)
#创建文本文件
	touch   test.txt
#创建文件夹
	mkdir  
#挂载光驱
	mount  挂载源   /挂载点
#卸载光驱
	 umount 挂载源 /挂载点
#移动文件
	mv 
#服务管理(停止与启动)
	systemctl start  (服务名)     (restart,stop,start,enable)
#(删除文件)
	rm   
#查看网络当前配置
	ip add  show           ifconfig       
#清楚当前窗口
	clear
#关机命令
	poweroff/shutdown/init 0
#查看所有系统的登录记录
	last
#查看命令的帮助
	man ls/vim/      ls/vim --help
#查看文本的前N行数据
	head -n
#查看文本的后N行数据
	tail -n
#查看系统版本信息
	uname -a
	cat /etc/os-release	
#grub状态下恢复密码
	在Linux16后面加上 'init=/bin/bash console=tty0'
#强制杀死异常进程
	kill [参数] [进程PID]
	kill -9  1234

6.2.linux的命令

6.2.1.进阶命令

#普通用户下更改root密码
	sudo passwd root
#编辑软件源列表(换源)
	vim /etc/apt/sources.list
#更新系统的包索引和包的列表
	apt update
#将软件包升级到最新版本
	apt upgrade
#安装 ssh服务
	apt install openssh-server
#更改SSH服务配置信息(可解决安装完后无法ROOT登录问题)
	vim /etc/ssh/sshd_config
#重启sshd服务(status,enable,start,stop,restart)
	systemctl restart ssh.service
#打包文件(c:生成档案文件,X解开打包文件,v:列出归档解档的详细过程,f:指定档案文件名称)
	tar -xvf 打包文件.tar 被打包的文件路径
#安装和XSHELL传输文件的软件(一款代替FTP的软件)
	apt install lrzsz
#lrzsz的用法
#上传文件
	rz -y
#下载文件
	sz 文件名
#让列表文件以M的单位来显示
	ls -lh
#显示目录所有文件系统的可用空间以及使用情形,并用Gb,mb显示
	df -h
#查看当前目录的大小
	du -shntu的基础操作
#查看当前用户的环境变量
	echo $PATH  
	
#更改文件的用户组,更改某个目录或文件的用户名和用户组的,   -R是递归修改权限(更改整个文件夹)
	chown 用户名:组名 文件路径
#chmod用法,修改某个目录或文件的访问权限。
	chmod u+w 文件名        chmod 777 文件名

6.2.2.其他一些常用命令

  • alias命令,设置命令的别名输入方式,简化太长的命令

image-20230520225229679

  • 直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?,使用编辑器打开~/.bashrc,在文件中加入别名设置,如:alias rm=‘rm -i’,保存后执行source ~/.bashrc,这样就可以永久保存命令的别名了。

6.3.linux用户和用户组相关概念

6.3.1.用户的基础

  • Linux是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。

  • 不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

6.3.2.用户的简介

  • 每次登录后的权限会根据用户的身份来确定
  • 每个进程在执行时,也会有其用户,该用户也和进程所能控制的资源有关,如Mysql用户之类的
  • 每个用户都有自己的UID,每个用户组也有自己的组ID称为GID,并且这两个码是不可重复的。
  • 普通用户只能由root用户创建,该用户拥有家目录,并且可以登录。

6.3.3.用户和用户组的配置文件

  • /etc/passwd

在这里插入图片描述

在配置中以冒号分隔各个模块之间的信息从左到右依次是

用户名 | 登录密码 (以X代替) | UID | GID | 组名 | 家目录 | shell环境

  • /etc/shadow #存储者用户的密码信息

image-20230519225454370

  • /etc/login.defs #该文件可以设置密码过期时间,密码最大长度限制等内容

在这里插入图片描述

  • /etc/group #存储用户组的信息

image-20230519230229506


6.3.4.Linux用户和用户组管理相关命令

useradd 用于添加用户

  • 用法:useradd [选项] 用户名
-M表示不创建家目录
-d指定用户的主家目录,必须是绝对路径
-s表示指定用户的shell环境
-u表示指定用户的uid
-g表示指定用户的gid(需要指定的gid存在)
-p指定用户的密码(必须以密文的方式指定)存在)
-G表示指定用户的附属组(需要指定的gid
-e指定账户的失效日期,格式为YYYY-MM-DD
-f密码到期后的宽限天数,0表示立即失效,。-1为永不失效
#实例操作,创建用户fjl 并且指定家目录为根目录下的123文件夹内,并且该账户将于2023-11-12日失效
	root@wgs:~# useradd fjl -d /123 -e 2023-11-12

在这里插入图片描述

  • usermod 修改用户的信息

  • 用法:usermod [选项] 用户名

-d修改用户主目录
-e修改账号的有效期限
-f修改在密码过期后多少天即关闭该账号
-g修改用户所属的组
-l修改用户账号名称
-u修改用户ID
-L修改用户密码,使密码无效
-U解除密码锁定
#实例操作,修改用户fjl01m密码过期10天后关闭该账号
#usermod -d 目录 已有的用户名             # 更改已有用户的家

在这里插入图片描述

  • userdel 删除用户

  • 用法:userdel [选项] 用户名

-r将用户的主目录一起删除

gourpadd 用指定的组名称来建立新的组账号

  • 用法:gourpadd [选项] 用户名
-g指定ID(gid)号,除非使用-o选项,否则该值必须唯一(组ID必须有)
-f强制执行,创建相同的id组
-o允许设置相同组id的群组,id可不唯一

gourpmod 更改群组属性

  • gourpmod [选项] 组名
-g指定组ID(gid)
-n修改用户组名

gourpdel 删除用户组

gpasswd 管理用户组


passwd

#更改用户密码
	-k, --keep-tokens	更新只能发送在过期之后
	-d, --delete	删除密码(root only)
	-l, --lock	停止账号使用(root only)
	-u, --unlock	启用已被停止的账户(root only)
	-e, --expire	强迫用户下次登录时必须修改口令(root only)
	-f, --force	强制执行

	-x, --maximum=DAYS	指定口令最长存活期(root only)
	-n, --minimum=DAYS	指定口令最短存活期(root only)
	-w, --warning=DAYS	口令要到期提前警告的天数(root only)
	-i, --inactive=DAYS	口令过期后多少天停用账户(root only)

	-S, --status	显示密码信息(root only)

#以下例子(7天内不允许修改,90天内必须修改,)
	passwd -n 7 -x 90 -w 7 fjl     

image-20230520222244831

chage [选项] 用户名

  • 也可以直接输入chage 用户名,按照提示进行修改

image-20230520222640248

image-20230520222826632

6.3.5.其他用户和用户组以及密码相关常用命令

  • id 用户名 # 用户的信息

image-20230520223831740

  • groups 用户名 # 用户的组信息

image-20230520224414360

  • su - 用户名 #切换用户(用户的环境变量也会切换)
  • su 用户名 #切换用户(用户的环境变量不会切换,不要使用)

image-20230520224304938


6.4.加固以及安全排查

6.4.1.账号安全方面

#1)基本使用
1、用户信息文件 /etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的 shell
注意:无密码只允许本机登陆,远程不允许登陆

2、影子文件 /etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
#2)入侵排查
1、查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
2、查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4、禁用或删除多余及可疑的帐号
    usermod -L user    禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
    userdel user       删除 user 用户
    userdel -r user    将删除 user 用户,并且将 /home 目录下的 user 目录一并删除

6.4.2.历史命令

通过 .bash_history 文件查看帐号执行过的系统命令

'1)'root 用户的历史命令
	history
'2)'普通账号的历史命令(在/home下的各自账号目录下的.bash_history)
	cat ./bash_history

6.4.3.检查异常端口

使用netstat 网络连接命令,分析可以端口

netstat -antlp | more	

6.4.4.检查异常进程

使用ps命令,分析进程

ps aux | grep pid

6.4.5.常见信息排查

  • 查看最近登录信息
last

image-20240321160849050

  • 查看当前登录用户
who

image-20240321160959436

  • 通信状态查看
netstat -anptu             			 #查看端口连接情况
netstat -anptu | more				 #翻页查看
netstat -antpu | grep 127.0.0.1      #筛选关键字

image-20240321163606084

  • 查看开机启动服务以及已有的服务
#查看已有的服务,并进行筛选
	service --status-all | grep ssh

image-20240321164120690

#查看启动脚本
	ls /etc/init.d/

image-20240321164358892

  • 查看计划任务

    • 基本命令
    crontab -l   #列出某个用户cron服务的详细内容
    
    Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
    
    crontab -r   #删除每个用户cront任务(谨慎:删除所有的计划任务)
    
    crontab -e   #使用编辑器编辑当前的crontab文件 
    
    如:*/1 * * * * echo "hello world" >> /tmp/test.txt #每分钟写入文件
    

6.4.5.网络抓包分析

  • tcpdump详细信息
tcpdump命令选项

◇ -a #将网络地址和广播地址转变成名字

◇ -A #以ASCII格式打印出所有分组,并将链路层的头最小化

◇ -b #数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层

◇ -c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump

◇ -d #将匹配信息包的代码以人们能够理解的汇编格式输出

◇ -dd #将匹配信息包的代码以c语言程序段的格式输出

◇ -ddd #将匹配信息包的代码以十进制的形式输出

◇ -D #打印系统中所有可以监控的网络接口

◇ -e #在输出行打印出数据链路层的头部信息

◇ -f #将外部的Internet地址以数字的形式打印出来,即不显示主机名

◇ -F #从指定的文件中读取表达式,忽略其他的表达式

◇ -i #指定监听网络接口

◇ -l #使标准输出变为缓冲形式,可以数据导出到文件

◇ -L #列出网络接口已知的数据链路

◇ -n #不把网络地址转换为名字

◇ -N 不输出主机名中的域名部分,例如www.baidu.com只输出www

◇ -nn #不进行端口名称的转换

◇ -P #不将网络接口设置为混杂模式

◇ -q #快速输出,即只输出较少的协议信息

◇ -r #从指定的文件中读取数据,一般是-w保存的文件

◇ -w #将捕获到的信息保存到文件中,且不分析和打印在屏幕

◇ -s #从每个组中读取在开始的snaplen个字节,而不是默认的68个字节

◇ -S #将tcp的序列号以绝对值形式输出,而不是相对值

◇ -T #将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)

◇ -t #在输出的每一行不打印时间戳

◇ -tt #在每一行中输出非格式化的时间戳

◇ -ttt #输出本行和前面以后之间的时间差

◇ -tttt #在每一行中输出data处理的默认格式的时间戳

◇ -u #输出未解码的NFS句柄

◇ -v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息

◇ -vv#输出相信的保报文信息
  • tcpdump的表达式

◇ 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获,在表达式中一般如下几种类型的关键字:

a):关于数据类型的关键字:

包括host、port、net,例如host 192.168.38.7表示这是一台主机,net 192.168.38.0表示这是一个网络地址,port 22指明端口号是22,如果没有指明类型,则默认的类型是host。

b):数据传输方向的关键字:

包括src、dst、dst or src、dst and src,这些关键字指明了传输的方向,比如src 192.168.38.7说明数据包源地址是192.168.38.7,dst net 192.168.38.0指明目的网络地址是192.168.38.0,默认是监控主机对主机的src和dst,即默认监听本机和目标主机的所有数据。

c):协议关键字:

包括ip、arp、rarp、tcp、udp、icmp等,

d):其他关键字:

运算类型的:or、and、not、!
辅助功能型的:gateway、less、broadcast、greater
  • 普通抓包
tcpdump -i ens33

image-20240321174228119

  • 指定查询的次数为3次,并且写入1.out内
tcpdump -i ens33 -c 3 -w 1.out
  • 指定查询IP1和IP2通信的所有数据包
#这里的host代表的是这个主机,查询192.168.174.4和1.82.232.108的数据包
tcpdump host 192.168.174.129 and 1.82.232.108

image-20240321195738938

  • 指定查询源地址为IP1,目的地址为IP2的数据包
#源----->目的
	tcpdump src 1.82.232.108 dst 192.168.174.129
#源----->目的并显示详细信息
	tcpdump src 1.82.232.108 and  dst 192.168.174.129 -vnn
#任意到目的的信息
	tcpdump   dst 192.168.174.129

image-20240321195936901

#抓取某个协议
	tcpdump -i eth0 -nn arp

6.4.6.文件比对

  • 使用diff命令,不对两个文件的不同
diff -car 1 2

image-20240321165129166
bat
#这里的host代表的是这个主机,查询192.168.174.4和1.82.232.108的数据包
tcpdump host 192.168.174.129 and 1.82.232.108
``
在这里插入图片描述

  • 指定查询源地址为IP1,目的地址为IP2的数据包

#源----->目的 tcpdump src 1.82.232.108 dst 192.168.174.129 #源----->目的并显示详细信息 tcpdump src 1.82.232.108 and dst 192.168.174.129 -vnn #任意到目的的信息 tcpdump dst 192.168.174.129

[外链图片转存中...(img-1gjAo3aS-1711421476137)]

``bash
#抓取某个协议
tcpdump -i eth0 -nn arp




### 6.4.6.文件比对

- 使用diff命令,不对两个文件的不同

```bash
diff -car 1 2

在这里插入图片描述

  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值