Linux基础大作业

实验1:文件目录结构与基本命令操作

1、在/tmp目录下创建如下目录结构:

/tmp/test/
├── dir1/
│ ├── file1.txt
│ └── file2.txt
├── dir2/
│ └── subdir/
└── file3.txt

命令解释:

mkdir /tmp/test #创建主目录 /tmp/test
mkdir /tmp/test/dir1 /tmp/test/dir2 #创建子目录 dir1 和 dir2
mkdir /tmp/test/dir2/subdir #创建 dir2 下的 subdir 子目录
touch /tmp/test/dir1/file1.txt /tmp/test/dir1/file2.txt #创建 dir1 下的 file1.txt 和 file2.txt 文件
touch /tmp/test/file3.txt #创建 test 下的 file3.txt 文件
tree /tmp/test #查看目录结构

屏幕截图 2025-08-01 183823

2、将dir1目录及其内容复制到dir2/subdir下

cp -r /tmp/test/dir1 /tmp/test/dir2/subdir/ #将dir1目录及其内容复制到dir2/subdir下

image-20250801184626936

3、查找/tmp目录下所有.txt文件并显示详细信息

find /tmp -type f -name "*.txt" -exec ls -l {} \; #查找/tmp目录下所有.txt文件,对每个找到的文件执行ls -l命令显示详细信息

image-20250801185225838

4、将file3.txt移动到dir1目录并重命名为newfile.txt

mv /tmp/test/file3.txt /tmp/test/dir1/newfile.txt #将file3.txt移动到dir1目录的同时将其重命名为newfile.txt

image-20250801185521304

实验2:用户与组管理

1、创建用户user1、user2和组group1

groupadd group1 #创建组group1
useradd user1 #创建用户user1
useradd user2 #创建用户user2

image-20250801190841487

2、将user1和user2加入group1组

usermod -aG group1 user1 #将user1加入group1组
usermod -aG group1 user2 #将user2加入group1组

image-20250801191141614

3、创建目录/shared,设置权限使group1组成员可以读写,其他人无权限

mkdir /shared #创建目录/shared
chown :group1 /shared #将/shared目录的所属组改为 group1
chmod 770 /shared #将/shared的权限设置为770

image-20250801191522515

4、验证user1可以在/shared中创建文件,user3(非组成员)不能访问

useradd -m user3 #创建user3用于测试
su - user1 #以user1身份登录
touch /shared/1.txt #以user1身份创建文件
exit #退出user1

image-20250801191555180

ls -l /shared #验证文件创建成功
su - user3 #以user3身份登录
ls /shared #尝试访问/shared发现权限不够

image-20250801191938571

实验3:权限管理(UGO)

1、创建文件/data/secret.txt,内容为”Top Secret”

sudo mkdir /data #创建目录/data/secret.txt
sudo touch /data/secret.txt #创建文件secret.txt
sudo sh -c 'echo "Top Secret" > /data/secret.txt' #写入"Top Secret"

image-20250801200905798

2、设置权限:所有者root可读写,组admin可读,其他人无权限

sudo groupadd admin #创建admin组
sudo chown root /data/secret.txt #设置文件所有者为 root
sudo chgrp admin /data/secret.txt #设置文件所属组为 admin
sudo chmod 600 /data/secret.txt #设置权限为所有者可读写
sudo chmod 640 /data/secret.txt #为组添加读权限

image-20250801201303022

3、创建用户testuser并尝试访问该文件验证权限

sudo useradd testuser #创建用户testuser
sudo passwd testuser #设置用户密码
su - testuser -c "cat /data/secret.txt" #尝试读文件发现权限不够

image-20250801201218761

4、使用ACL添加testuser的读写权限

sudo setfacl -m u:testuser:rw /data/secret.txt #为testuser添加ACL读写权限
getfacl /data/secret.txt #查看文件ACL权限
su - testuser -c "cat /data/secret.txt" #以testuser身份再次尝试读文件
su - testuser -c "echo 'Test' >> /data/secret.txt" #以testuser身份尝试写入文件
cat /data/secret.txt #验证secret.txt内容

image-20250801201528890

实验4:SUID权限应用

1、创建脚本/usr/local/bin/showfile,内容为显示/etc/shadow文件内容

sudo vi /usr/local/bin/showfile #编辑/usr/local/bin/showfile为文件写入脚本内容
屏幕截图 2025-08-01 222113

image-20250801222056661

image-20250801223500573

2、设置脚本所有者为root并添加SUID权限

sudo chown root:root /usr/local/bin/showfile #将脚本所有者设置为 root
sudo chmod 755 /usr/local/bin/showfile #为所有用户添加可执行权限
sudo chmod u+s /usr/local/bin/showfile #添加 SUID 权限

image-20250801222721892

3、使用普通用户执行该脚本验证权限提升

sudo useradd user1 #新建用户user1
su - user1 #切换到user1
/usr/local/bin/showfile 访问????失败
image-20250801225206802

4、实验完成后移除SUID权限

sudo chmod u-s /usr/local/bin/showfile #移除 SUID 权限
image-20250801224857486

要求:对脚本内容进行注释

#showfile

echo '#!/bin/bash
cat /etc/shadow' > /usr/local/bin/showfile
chmod +x /usr/local/bin/showfile

实验5:文件属性保护

1、创建重要配置文件/etc/important.conf

sudo touch /etc/important.conf #创建重要配置文件/etc/important.conf

image-20250801204801757

2、使用chattr命令防止文件被修改或删除

sudo chattr +i /etc/important.conf #使用chattr命令防止文件被修改或删除

image-20250801204814414

3、尝试修改和删除文件验证保护效果

echo "111" | sudo sh -c 'cat > /etc/important.conf' #尝试修改文件
sudo rm /etc/important.conf #尝试删除文件

image-20250801204833395

4、恢复文件正常属性

sudo chattr -i /etc/important.conf #恢复文件正常属性

image-20250801204849196

实验6:sudo权限配置

1、创建用户admin和组sudoadmin

sudo useradd admin  #创建用户admin,指定bash作为默认shell
sudo groupadd sudoadmin #创建sudoadmin组

image-20250801205949720

2、配置sudo使sudoadmin组成员可以执行所有命令无需密码

sudo visudo #使用visudo安全编辑添加%sudoadmin ALL=(ALL) NOPASSWD:ALL
image-20250801210110304

image-20250801205524256

3、将admin用户加入sudoadmin组

sudo usermod -aG sudoadmin admin  #将admin用户添加到sudoadmin组
image-20250801210303057

4、验证admin用户可以使用sudo执行特权命令

su - admin  #切换到admin用户
sudo useradd user666 #用户可以使用sudo执行特权命令
image-20250801210632901

实验7:综合权限管理

1、创建目录/project,属组为devteam

sudo mkdir /project #创建目录/project
sudo groupadd devteam #创建组devteam
sudo chown :devteam /project #/project属组devteam
image-20250801212130345

2、设置权限:组成员可读写,其他人只读

sudo chmod 750 /project #组成员可读写,其他人只读
image-20250801212200098

3、设置SGID权限使新建文件自动继承组权限

sudo chmod 2770 /project 设置SGID权限使新建文件自动继承组权限
image-20250801212218236

4、创建用户dev1、dev2并加入devteam组

sudo useradd -G devteam dev1 #创建dev1加入devteam组
sudo useradd -G devteam dev2 #创建dev2加入devteam组
image-20250801212248303

5、验证dev1创建的文件dev2可以编辑

su - dev1 #切换到dev1用户
cd /project #进入/project
touch 1.txt #创建1.txt文件
echo "1111" > 1.txt #写入1111
exit #退出用户dev1
su - dev2 #切换到用户dev2
cd /project #进入/project
echo "222222222" >> 1.txt #尝试写入222222222到1.txt
cat testfile.txt #查看发现成功写入

image-20250801212628438

实验8:日志分析与安全审计

1、创建日志文件
将以下内容保存为 /var/log/application.log

2024-03-15 09:10:22 [INFO] User 'admin' authenticated from 192.168.1.100 (session: SESS-7X2G9P)
2024-03-15 09:11:05 [ERROR] Failed login attempt for user 'root' from 10.0.0.55 (reason: invalid password)
2024-03-15 09:12:33 [WARNING] High CPU usage detected (92%) on server-node-01
2024-03-15 09:13:17 [SECURITY] Sensitive file accessed: /etc/shadow by user 'backup'
2024-03-15 09:14:02 [DEBUG] API request: GET /api/v1/users?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
2024-03-15 09:15:48 [INFO] Payment processed: $250.00 via Credit Card (ref: PAY-8832)
2024-03-15 09:16:30 [ERROR] Database connection timeout (MySQL@10.0.0.100:3306)
2024-03-15 09:17:11 [ALERT] SSH brute force detected from 45.33.12.88 (15 attempts)
sudo vi /var/log/application.log #打开编辑/var/log/application.log写入内容
image-20250801214521131

image-20250801214315548

2、设置权限

chmod 640 /var/log/application.log
chown root:adm /var/log/application.log
image-20250801214807064

任务1.1:统计日志中所有错误事件的数量

grep "\[ERROR\]" /var/log/application.log | wc -l #统计[ERROR]/var/log/application.log中出现了多少次
image-20250801214930514

任务1.2:提取所有包含IP地址的行(仅显示IP)

grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/application.log #在/var/log/application.log中查找所有包含ip规则内容的行

image-20250801215228027

任务2.1:查看SECURITY事件及其前后1行内容

grep -A 1 -B 1 "\[SECURITY\]" /var/log/application.log #-A 1 -B 筛选[SECURITY]前后一行

image-20250801215441956

任务3.1:找出所有涉及金额的记录(含$符号)

grep "\$" /var/log/application.log #筛选包含$的行

image-20250801215624144

扩展任务:提取金额数值并计算总和

grep "\$" /var/log/application.log | grep -Eo "[0-9]+\.[0-9]+" | awk '{sum += $1} END {print sum}' #筛选包含$的行再提取其中包含数字的部分再逐行处理累加提取出来的数字输出sum总和

image-20250801215948342

​ 时间范围统计:统计09:10-09:15期间的事件数量

awk '/2024-03-15 09:1[0-5]:[0-5][0-9]/ {count++} END {print count}' /var/log/application.log #逐行处理/var/log/application.09:10-09:15内的文件count加一最后输出总和

image-20250801220313192

任务4.1:检测潜在暴力破解行为

grep "Failed login\|brute force" /var/log/application.log

image-20250801220716537

任务5.1:分析脚本文件生成安全事件报告

echo "安全事件报告" > report.txt #创建report.txt文件并写入安全事件报告
date >> report.txt #追加当前时间到报告中
echo "=== 高风险事件 ===" >> report.txt #追加高风险事件分隔行
grep -E "SECURITY|ALERT" /var/log/application.log >> report.txt #追加筛选出来的包含SECURITY|ALERT的行加入文件
echo "=== 异常IP列表 ===" >> report.txt #追加高风险事件分隔行
grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/application.log | sort -u >> report.txt #追加去重后的日志中出现过的ip地址