Web安全-Linux基础-02-系统基础命令
Linux02
邻家阿婆赠花苗,谢也含笑,枯也含笑。
1、系统基本编辑命令
vi / vim
记事本 / 专业记事本
vi filename --编辑一个文件# 01.普通模式(查看模式)
不能进行编辑输入操作 但是可以移动光标
同时可以执行一些操作命令
比如: 删除 复制 粘贴(后面有详细的)# 02.编辑模式
i / o / a / r
insert模式:在当前光标位置前进入插入模式
open line模式:在当前行下方插入新行并进入插入模式
append模式:在当前光标位置后进入插入模式
replace模式:进入连续替换模式(覆盖后续字符,按 Esc 退出)# 03.末行模式(命令模式)
实现 文件的内容保存 检索 替换 显示行号
检索 : /要检索的内容
替换 : %s/root/ROOT/g
--显示行号 :set nu number
ESC→ :
q 不保存退出
q! 强制不保存退出
wq 保存退出
wq! 强制保存退出# 04.普通模式的一些快捷命令
yy 复制光标所在行
nyy 数字yy 复制连续多行内容
p 粘贴复制/剪切的内容
np 粘贴n次复制/剪切的内容
dd 删除光标所在行
ndd 删除n行
D 删除本行内容,但是保留空行
dG 删除光标所在位置后的所有行内容
G 快速移动到最后一行
gg 快速移动到第一行
nG 快速移动到第n行
echo
打印
# 01.分行打印
[root@koko ~]# echo "123";echo "456"
123
456
--可以将多个信息同时输出 ; 命令分隔符# 02.实现空格的不同使用
echo -e
-e \n --换行
-e \t ----tab空格
-e \c ---不换行
cat
# 01.追加插入新的内容
[root@koko ~]# cat>>a<<EOF --以EOF为结尾,EOF只是一个标记,还可以用end,stop等其他任何标记
> linux
> network
> python
> hello
> EOF[root@koko ~]# cat a --查看插入的内容
linux
network
python
hello# 02.覆盖插入新的内容
[root@koko ~]# cat>a<<EOF --这里会将前面完全清空,然后覆盖写入
> abc
> def
> ghi
> EOF[root@koko ~]# cat a --查看插入的内容
abc
def
ghi
命令 | 文件操作 | 文件原有内容 | 适用场景 |
---|---|---|---|
cat > a << EOF | 覆盖写入 | 完全清空 | 创建新文件或覆盖旧文件 |
cat >> a << EOF | 追加写入 | 保留原有内容 | 在文件末尾添加新内容(追加) |
# 03.查看文件命令
cat -n filename -- 带行号查看文件内容head / tail [-n] filename --默认查看10行 -n 查看几行 --可以查看文件前几行/后几行信息
tail -f --动态查看文件,适用于追踪日志文件信息变化
/var/log/secure --记录登录信息的日志文件
grep
过滤筛选命令
语法:grep [参数] 匹配信息 文件名
# 01.参数介绍
-i参数 不区分大小写(ignore case)
-n参数 带行号(number)
-c参数 统计匹配的行数(count)
-v参数 过滤排除指定信息(invert)# 02.示例
grep "root" p --过滤p文件中包含root的文件
grep -n "root" p --过滤p文件中包含root的文件并显示行号
grep -c "root" p --过滤p文件中包含root的文件并统计出现的次数
grep -v "root" p --过滤p文件中不包含root的文件
2、系统相关命令
数据下载命令
# 01.tree
yum install -y tree --展示目录下的结构# 02.lrzsz
yum install -y lrzsz --可以实现Windows和linux之间互传数据信息# 03.wget
yum install wget --获取下载链接地址
基础优化命令
# 01.修改主机名
hostname 主机名 --临时修改
echo $HOSTNAME --查看主机名
只是对系统环境变量作修改,修改之后要重新连接才能显示hostnamectl set-hostanme 主机名 --是对系统环境变量做修改,对主机名配置文件做修改
bash 命令刷新cat /etc/hostname --查看主机名# 02.man命令
man cp --查看cp命令的功能
按q退出
字符编码优化
全球国家字符统 utf-8编码
中国对应编码 gbk编码 # 01.查看字符集
cat /etc/locale.conf# 02.修改字符集
localectl set-locale --字符集编码
localectl set-locale LANG=zh_CN.utf-8 --设置为utf-8
3、系统目录结构
目录结构介绍
# 01.Windows 目录形式
C:\xxx\xxx
盘符:\子目录\子目录\文件# 02.linux 目录形式
/xxx/xxx
根目录/目录/目录/文件# 03.根目录
根目录 一切目录的起点 一切从根出发
每个用户都有自己名字命名的家目录其中root用户的家目录 直接在根目录下
普通用户的家目录 放在 /home/进行管理
重点目录结构
目录名称 | 用途描述 |
---|---|
bin | 存放二进制命令文件(普通用户可以使用)。 |
sbin | 存放二进制命令文件(root 用户可以使用)。 |
etc | 存放软件程序或系统程序配置文件。 |
lib | 存放需要调取的库文件信息(旧软件程序调取库文件)。 |
lib64 | 存放需要调取的库文件信息(新软件程序调取库文件)。 |
media | 可用于存放实例视频或图片;也可作为默认挂载点。 |
mnt | 可用作默认挂载点。 |
opt | 存放第三方软件程序数据(等价于 Windows 的 program files)。 |
usr | 存放第三方软件程序数据(等价于 Windows 的 program files)。 |
root | 存放用户信息家目录(root 用户的家目录,符号 ~ 表示)。 |
home | 存放用户信息家目录(普通用户的家目录,符号 ~ 表示)。 |
boot | 存放系统启动相关的数据。 |
dev | 存放一些设备文件信息。 |
var | 用于存放日志文件(全称 variable)。 |
tmp | 用于临时存放文件信息(类似于 Windows 的回收站)。 |
proc | 存放系统内核配置信息或服务进程信息(不会占用磁盘空间,只会占用内存空间)。 |
系统目录挂载
为什么要学挂载?
类似于银行,工作环境是不能联网的,需要读取数据就要借助U盘
挂载概念
操作磁盘/操作分区,linux 没有盘符设置 如何设置好分区 给分区再设置一个入口
目录和分区磁盘建立关联过程 称为挂载
实操:实现光驱挂载识别
# 01.加载光驱镜像文件# 02.识别挂载光驱设备
[root@koko mnt]# touch hello.txt --创建一个hello.txt
[root@koko mnt]# mount /dev/cdrom /mnt --将光驱挂载到/mnt下,挂载后的/mnt是新的内容
mount: /dev/sr0 is write-protected, mounting read-only --翻译一下:写保护,将以只读方式挂载
[root@koko mnt]# ll --注意:这时候我们还在/mnt目录下,此时还能够看到这个hello.txt文件
total 0
-rw-r--r-- 1 root root 0 Jul 12 09:18 hello.txt
[root@koko mnt]# cd --这里主要是为了退出当下这个目录,退出这个进程,才能挂载上
[root@koko ~]# cd /mnt --我们再切进去/mnt,发现里面的hello.txt看不到了
[root@koko mnt]# ls
CentOS_BuildTag EULA LiveOS RPM-GPG-KEY-CentOS-7 TRANS.TBL isolinux
EFI GPL Packages RPM-GPG-KEY-CentOS-Testing-7 images repodata# 03.利用命令写在
umount /mnt
[root@koko mnt]# umount /mnt --我们在/mnt文件夹下,卸载,会报错
umount: /mnt: target is busy. --/mnt中的进程被占用,所以无法卸载(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))
[root@koko mnt]# cd .. --我们回到上级根目录
[root@koko /]# umount /mnt --再次卸载
[root@koko /]# ll /mnt --查看/mnt下的文件,发现hello.txt
total 0
-rw-r--r-- 1 root root 0 Jul 12 09:18 hello.txt
这里简要的体验了一下,linux的挂载功能,里面还是有挺多小细节的。开始我一直没挂载上,因为我始终没有退到根目录下,导致这个/mnt里面的内存一直被占用,当我把这片内存释放了,挂载就成功了。(感谢身边的大佬的解释)
对机器使用u盘时,Windows会自动挂载,所以一直以来我们使用u盘都很方便。对于Linux,你就要手动挂载,一般情况下,Linux有两个文件夹用来挂载,/mnt和/media,这里我们主要用的是/mnt。Linux要为u盘设置好分区,然后再进行挂载,这样才能使用u盘。
重要配置信息
1. 网卡配置
# 01.网卡配置信息
cat /etc/sysconfig/network-scripts/ifcfg-eth0 # 企业一般用eth0、eth1...ethN
cat /etc/sysconfig/network-scripts/ifcfg-ens33 # 默认是ens33TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.0.0.5
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=10.0.0.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=27a73818-89f3-4991-9890-2da7924a73c4
DEVICE=ens33
ONBOOT=yes着重关注以下几个:
TYPE=Ethernet --使用网络类型:以太网:Ethernet
BOOTPROTO=none --地址分配的方式:dhcp(自动获取地址)/none(static)(手工配置地址)
DEFROUTE=yes --最下面有个网关地址 yes 就是可以使用GATEWAY=10.0.0.1 --是否激活网关地址功能(可以实现访问外网)
NAME=ens33
DEVICE=ens33 --两个差不多 定义网卡名称信息 要保持一致
UUID=0e187686-8c46-4a08-8842-4a184469065a --通过唯一识别码,可以识别虚拟主机的硬件信息
ONBOOT=yes --如果关闭网卡的话 状态改为no --使网卡默认开机启动(激活)
IPADDR=10.0.0.10 --网卡 --ipv4地址配置
PREFIX=24 --24个1
NETMASK=255.255.255.0 --网卡子网掩码配置
DNS1=223.5.5.5 114.114.114.114 8.8.8.8 --网卡DNS地址配置(可以访问域名)
GATEWAY=10.0.0.254 --配置可以访问外网的地址(可以实现访问外网)ps:如果要修改相关配置 记得重启网卡使之生效
systemctl restart network# 02.修改网卡名字(实验)
1、修改文件内容 网卡ens33 改成eth0
vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=eth0
DEVICE=eth0
2、修改/etc/sysconfig/network-scripts/ifcfg-ens33为/etc/sysconfig/network-scripts/ifcfg-eth0
mv ifcfg-ens33 ifcfg-eth0
3、修改/etc/default/grub 加入net.ifnames=0 biosdevname=0
4、执行 命令: grub2-mkconfig -o /boot/grub2/grub.cfg
5、重启 reboot
sshd –t
2. 域名解析配置
# 01.配置访问外网域名配置文件 /etc/resolv.conf
[root@xiaoX ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search com
nameserver 223.5.5.5 --不能写错 写错就访问不了了
223.5.5.5 是阿里云的一个公共DNS DNS --是域名系统# 02.配置访问内网域名配置文件 /etc/hosts
[root@xiaoX ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
作为网络安全学习者,这里提一嘴,DNS域名欺骗攻击(DNS Spoofing),也称为DNS缓存投毒(DNS Cache Poisoning)
攻击者通过篡改DNS服务器的缓存记录,将合法的域名解析到错误的IP地址(通常是恶意服务器),从而劫持用户流量,实现窃听信息、植入恶意软件或钓鱼诈骗等目的。
DNS负责域名解析服务,在主机的本地域名服务器中会有一个缓存表,攻击者正是利用这点,通过各种手段去改变这一点,从而实现主机正常访问域名却被欺骗至恶意IP上,接着就会受到一系列恶意操作。具体的攻击手段、案例、实验,大家可以上网搜索并学习。
不过现在大部分都是遵循https协议,很多手法在现实中不太适用,不过思路依然值得学习。
3. 系统变量
主要是和变量、环境变量、别名相关的配置文件信息
变量: 牵一发而动全身 有指定作用(认为定义)
环境变量 :系统默认定义好的 有特殊作用
# 01.查看环境变量
echo $PATH --定义了命令文件存储位置 使命令操作可以执行与应用[root@koko /]# echo $PATH --输出环境变量PATH值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@koko /]# echo $USER --输出当前登录用户的用户名
root
[root@koko ~]# echo $PS1 --决定命令提示符呈现方式 环境变量
[\u@\h \W]\$
全局生效(对所有用户生效)# 02.变量的使用
[root@koko ~]# a=1
[root@koko ~]# echo $a
1
变量赋值时不需要$符号 使用时必须有$符号# 03.全局生效(对所有用户生效)
网安 关注 应急效应 异常占用资源 进程关闭后再次运行
有可能是 profile 被植入脚本运行命令
/etc/profile
/etc/bashrc
两个文件写到任意一个都会受到影响(把某个恶意跑进程的脚本放进去)# 04.局域生效(对指定用户生效)
~/.bash_profile
~/.bashrc
局部变量优于全局变量,用户配置覆盖系统配置加载顺序
/etc/profile → ~/.bash_profile → ~/.bashrc → /etc/bashrc# 05.设置别名,简化键盘操作
设置别名
[root@koko ~]# alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-ens33'
[root@koko ~]# eth0
TYPE=Ethernet
........
取消别名
[root@koko ~]# unalias eth0
[root@koko ~]# eth0
-bash: th0: 未找到命令
永久设置别名
/etc/profile 里最后一行放入
alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-eth0'
📁 全局生效(所有用户)
文件路径 | 加载时机 | 安全风险 | |
---|---|---|---|
1 | /etc/profile | 登录式Shell(如SSH登录、系统登录) | 恶意脚本植入后,所有用户登录即触发 |
2 | /etc/bashrc 或 /etc/bash.bashrc | 所有交互式Shell(包括终端/tty) | 打开任何终端窗口即触发恶意操作 |
👤 局部生效(指定用户)
文件路径 | 加载时机 | 安全风险 | |
---|---|---|---|
1 | ~/.bash_profile | 登录式Shell(用户SSH登录时) | 只影响该用户,登录后触发恶意进程 |
2 | ~/.bashrc | 交互式Shell(用户打开终端时) | 每次新开终端窗口即触发恶意行为 |
攻击者会篡改这些环境变量配置的文件,通常都会在文件的尾部追加恶意命令,然后利用远程下载脚本,还有对局部文件覆盖全局的特性可能利用来绕过监控。当我们监控到CPU异常进程时,应该迅速先从这些配置文件中检查开始。
4.开机自动加载命令
# 01.文件路径
/etc/rc.d/rc.local --系统完成内核引导、初始化服务后最后执行的用户自定义脚本# 02.权限要求
使用这个文件 需要执行 否则不生效
chmod +x /etc/rc.d/rc.local
权限r读取权限,w写入权限,x执行权限。
r=4,w=2,x=1.
给他读写,4+2=6,chmod 6
# 03.执行身份是以管理员身份(root)运行的 有时候换用户单独执行执行脚本里的某个命令 可能会权限不足
这里存在一个双视角冲突:
对于运维 开发人员角度 利用脚本简化操作
而对于网安人员角度 脚本放在该文件中 会有风险
(以下是用ai生成的一些对比,个人能力有限,ai辅助学习)
⚖️ 双视角冲突与平衡
维度 | 运维开发需求 | 网络安全要求 | 平衡方案 |
---|---|---|---|
执行权限 | 需要高权限执行操作 | 最小权限原则 | 使用专用系统账户 + sudoers精细控制 |
脚本来源 | 方便使用远程脚本 | 禁止远程代码执行 | 只允许本地签名脚本: gpg --verify /opt/script.sh.sig |
监控需求 | 关注执行结果日志 | 需要行为审计 | 强制日志记录: exec > /var/log/rc-local.log 2>&1 |
更新机制 | 快速修改生效 | 防止非法篡改 | 配置变更审批 + 文件完整性监控(HIDS) |
5.用户登录信息提示
/etc/motd
[root@koko ~]# vim /etc/motd
文件中可以添加喜欢的开机信息 比如cowsay /animalsay “内容”
配置好需要断开重连这里有点类似idea写java项目的banner.txt了
6.系统版本信息查看
cat /etc/redhat-release
系统重要目录信息
# 01.自动加载运行脚本目录
ll /etc/profile.d/ --目录下的脚本会自动运行(有新的会话连接)--网络安全人员 需要关注此目录中是否有异常修改或者增加的信息# 02.查看历史命令
history 可以查看历史命令
history -c 慎用,会把历史记录清理掉# 03.查看文件属性
file + 文件名(目录或文件都可) --可以查看文件类型/属性# 04.查看磁盘占用情况
du -sh */路径 --计算的是文件存储到磁盘所占的空间,计算的是占了多少block# 05.系统存储日志信息目录
/var/log/
重要的有:messages secure dmesg可以尝试错误连接 查看日志最下面的信息
secure :可以记录系统用户登录情况信息 防止用户暴力破解
message: 可以记录系统或软件程序运行情况,同时也会记录异常情况,可以实现排查问题
dmesg:可以记录系统运行启动信息(硬件检测信息 内核运行信息)查看日志时关注的词汇:error错误 |grep “” 如果error过多--暴力破解
cat /var/log/messages|grep error
解决:这时想办法封ip # 06.系统存储硬件信息目录
cat /proc/cpuinfo --查看CPU信息
LANG=en --修改语言
grep -c processor /proc/cpuinfo --用于确认服务器总的CPU的核心数
free -h --可以查看空间使用情况
df -h --查看磁盘使用情况(disk)