ines-saouli/startech-linux-server
GitHub: ines-saouli/startech-linux-server
通过模拟企业 Linux 服务器环境,系统性地实践用户管理、权限控制、密码策略、备份和 SSH 日志分析等系统管理技能。
Stars: 0 | Forks: 0
# 🐧 StarTech 企业服务器
## 📖 概述
本项目旨在管理和保护一家名为 **StarTech** 的虚构企业的 Linux 服务器。
目标是建立一个完整的架构,包括多个部门、用户、组、访问规则、密码策略、备份以及对 SSH 认证日志的分析。
所有任务均在命令行下完成,未使用脚本。
## 🎯 目标
- 创建和管理用户与组
- 组织企业目录树
- 配置 Linux 权限
- 使用 ACL 管理特定访问
- 实施密码策略
- 保护共享文件夹
- 创建带有访问限制的备份
- 分析 SSH 日志
- 识别暴力破解尝试
- 诊断并修复权限故障
## 🛠️ 技术与命令
- Linux
- Bash
- `useradd`
- `groupadd`
- `chmod`
- `chown`
- `setfacl`
- `getfacl`
- `chage`
- PAM
- `grep`
- `cut`
- `sort`
- `uniq`
- `wc`
- `cp`
## 🏢 组架构
创建了以下组:
```
dev
marketing
finance
direction
it
startech
managers
```
每个用户属于:
- 其所在部门;
- 通用组 `startech`;
- 担任经理职务时,属于 `managers` 组。
### 创建示例
```
sudo groupadd dev
sudo groupadd marketing
sudo groupadd finance
sudo groupadd direction
sudo groupadd it
sudo groupadd startech
sudo groupadd managers
```
```
sudo useradd -m -s /bin/bash -g dev -G startech dev1
sudo useradd -m -s /bin/bash -g dev -G startech dev2
sudo useradd -m -s /bin/bash -g dev -G startech,managers dev_mgr
```
### 验证
```
getent group dev marketing finance direction it startech managers
id dev1
id dev_mgr
```
## 📂 服务器目录树
```
/srv/startech
├── dev
├── marketing
├── finance
├── direction
├── commun
├── archives
└── managers
```
### 创建
```
sudo mkdir -p /srv/startech/{dev,marketing,finance,direction,commun,archives,managers}
```
```
sudo chown root:startech /srv/startech
sudo chmod 2750 /srv/startech
```
## 🔐 权限管理
### 部门文件夹
每个用户只能访问其所在部门的文件夹。
经理拥有:
- 对其部门的完全访问权限;
- 对其他部门的只读访问权限。
开发部门示例:
```
sudo chown root:dev /srv/startech/dev
sudo chmod 2770 /srv/startech/dev
sudo setfacl -m g:managers:rx /srv/startech/dev
sudo setfacl -d -m g:managers:rx /srv/startech/dev
```
### 经理文件夹
该文件夹仅供 `managers` 组的成员使用。
```
sudo chown root:managers /srv/startech/managers
sudo chmod 2770 /srv/startech/managers
```
### 公共文件夹
所有员工都可以在公共文件夹中创建文件。
**sticky bit** 可防止用户删除属于其他用户的文件。
```
sudo chown root:startech /srv/startech/commun
sudo chmod 3770 /srv/startech/commun
```
测试:
```
sudo -u dev1 touch /srv/startech/commun/test-dev1
sudo -u dev2 rm /srv/startech/commun/test-dev1
```
第二个命令应该被拒绝。
### 归档文件夹
`direction` 组可以写入该文件夹。
其他员工只能查看其内容。
```
sudo chown root:direction /srv/startech/archives
sudo chmod 2770 /srv/startech/archives
sudo setfacl -m g:startech:rx /srv/startech/archives
sudo setfacl -d -m g:startech:rx /srv/startech/archives
```
## 🔑 密码策略
实施的策略要求:
- 至少 10 个字符;
- 7 天后过期;
- 禁止重复使用最近 3 个密码;
- 失败 3 次后锁定;
- 首次登录时必须更改密码。
### 首次登录强制更改
```
sudo passwd dev1
sudo chage -d 0 dev1
sudo chage -l dev1
```
### 7 天后过期
```
sudo chage -M 7 dev1
```
### 最小长度
配置于:
```
/etc/security/pwquality.conf
```
```
minlen = 10
```
## 💾 备份
在 `/mnt/backups` 中创建了两个带有日期的备份文件夹。
```
DATE=$(date +%F)
sudo mkdir -p /mnt/backups/$DATE
sudo mkdir -p /mnt/backups/${DATE}-2
```
访问规则:
- `it` 组可以读写;
- `direction` 组可以读取;
- 其他用户没有任何访问权限。
```
sudo chown root:it /mnt/backups
sudo chmod 2770 /mnt/backups
sudo setfacl -m g:direction:rx /mnt/backups
sudo setfacl -d -m g:direction:rx /mnt/backups
```
复制示例:
```
sudo cp -a \
/srv/startech/dev \
/srv/startech/marketing \
/srv/startech/finance \
/srv/startech/direction \
/srv/startech/managers \
/srv/startech/archives \
/mnt/backups/$DATE/
```
## 🔎 SSH 日志分析
分析了以下文件:
```
/var/log/auth.log
```
目的是识别:
- 尝试连接的 IP 地址;
- 最活跃的 IP;
- 最受针对性的用户;
- 成功的连接;
- 潜在的暴力破解尝试。
### 提取 IP 地址
```
grep -E "sshd.*(Failed password|Accepted password|Invalid user)" /var/log/auth.log \
| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' \
| sort -u
```
### 最活跃的前 5 个 IP
```
grep -E "sshd.*(Failed password|Invalid user)" /var/log/auth.log \
| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' \
| sort \
| uniq -c \
| sort -nr \
| head -5
```
### 成功的连接
```
grep "sshd.*Accepted password" /var/log/auth.log \
| cut -d' ' -f1-3,9,11
```
### 失败次数
```
grep -c "sshd.*Failed password" /var/log/auth.log
```
一个在短时间内生成大量尝试的 IP 地址可能表明发生了 **SSH 暴力破解** 攻击。
## 🧯 故障诊断
该项目包含几个模拟事件:
- 经理无法访问 `managers` 文件夹;
- `direction` 无法在 `archives` 中写入;
- 财务用户能够读取 dev 文件夹;
- 在 `commun` 中发生未经授权的删除;
- 无法访问某个部门;
- 失去对备份的访问权限;
- 多次失败后未锁定;
- 经理的访问权限不正确;
- 已离职用户仍存在于组中。
对于每个事件,遵循的方法是:
1. 识别可能的原因;
2. 检查组和权限;
3. 应用修复;
4. 测试结果。
### 诊断命令
```
id nom_utilisateur
groups nom_utilisateur
ls -ld /srv/startech/*
getfacl /srv/startech/dev
getfacl /srv/startech/commun
getfacl /mnt/backups
```
## 📚 我学到了什么
这个项目让我深入了解了:
- 用户和组的管理;
- 高级权限管理;
- Linux ACL;
- setgid 和 sticky bit;
- 共享文件夹的安全保护;
- 配置密码策略;
- 备份管理;
- SSH 日志分析;
- 检测可疑行为;
- 事件的诊断和解决。
## 🚀 培养的技能
- Linux 系统管理
- 身份和访问管理
- 访问控制
- Linux 安全防护
- 日志分析
- SSH 调查
- 暴力破解检测
- 数据备份
- 故障诊断
- 使用 Bash 终端
## 💡 未来展望
为了走得更远,可以通过以下方式丰富此实验室:
- 使用 `cron` 自动化备份;
- 安装 Fail2ban;
- 使用 Wazuh 集中管理日志;
- 针对 SSH 尝试创建警报;
- 监控文件完整性;
- 使用 Bash 或 Ansible 自动化用户创建。
标签:Linux系统管理, 应用安全, 数据备份, 权限控制, 系统运维, 红队行动, 访问控制列表(ACL)