【跟我学Linux】第十四天:用户权限细化(ACL)、定时任务进阶、搭建简单 HTTP 服务

一、用户权限细化:用 ACL 实现 “更灵活的文件访问控制”

之前学的chmod(所有者 / 所属组 / 其他人)权限是 “粗粒度控制”(比如给整个组权限),但实际工作中常需要 “细粒度控制”—— 比如 “只允许同事 A 访问文件,同事 B 不能访问”,这时候就需要ACL(Access Control List,访问控制列表),像 “给文件配一把带多个钥匙的锁,指定谁能开”。

1. 什么是 ACL?(用例子秒懂)

假设你有一个project.txt文件,默认权限是rw-r--r--(你能读写,组内和其他人只能读):

  • chmod只能做到 “给整个组加写权限”(组内所有人都能改);
  • ACL可以精确到 “只给同事 A(用户userA)加写权限,组内其他人仍只能读”—— 这就是 ACL 的优势。
2. 实操:用 ACL 给指定用户 / 组单独授权

步骤 1:先安装 ACL 工具(部分系统默认未安装)

bash

sudo apt update  
sudo apt install acl  # 输入密码后按y安装  

步骤 2:创建测试文件和用户(模拟多用户场景)

bash

cd ~/linux_study  
touch project.txt  # 创建一个“项目文件”  
echo "这是一个需要共享的项目文档" > project.txt  

# 创建两个测试用户(模拟同事A和B)  
sudo useradd userA  
sudo useradd userB  

步骤 3:查看文件当前的 ACL 权限(默认是空的)

bash

getfacl project.txt  # getfacl:查看ACL权限列表  

输出类似(默认只有基础权限,没有额外 ACL 规则):

plaintext

# file: project.txt  
# owner: 你的用户名  
# group: 你的用户名  
user::rw-  # 所有者权限(读写)  
group::r--  # 所属组权限(只读)  
other::r--  # 其他人权限(只读)  

步骤 4:给用户userA单独加 “写权限”(不影响其他人)

bash

# 命令格式:setfacl -m u:用户名:权限 文件名  
setfacl -m u:userA:rw- project.txt  # 给userA读写权限  

  • u:userA:rw-u表示 “用户”,userA是目标用户,rw-是要赋予的权限。

步骤 5:验证userA的权限(切换到 userA 测试)

bash

# 切换到userA用户(需要输入userA的密码,之前没设的话先sudo passwd userA设置)  
su - userA  # 输入userA的密码  

# 尝试写入project.txt(因为有ACL权限,应该能成功)  
echo "userA添加的内容" >> /home/你的用户名/linux_study/project.txt  

# 查看文件内容,确认写入成功  
cat /home/你的用户名/linux_study/project.txt  

# 退出userA,回到自己的用户  
exit  

步骤 6:验证userB没有写权限(对比测试)

bash

su - userB  # 切换到userB  

# 尝试写入project.txt(应该失败,因为没给userB权限)  
echo "userB添加的内容" >> /home/你的用户名/linux_study/project.txt  
# 会提示“权限不够”,符合预期  

exit  # 退出userB  

步骤 7:删除 ACL 权限(不需要时清理)

bash

# 命令格式:setfacl -x u:用户名 文件名  
setfacl -x u:userA project.txt  # 删除userA的ACL权限  

# 验证:getfacl project.txt 会发现userA的权限已消失  

ACL 的核心优势:不用修改文件的所有者 / 所属组,就能给特定用户 / 组单独授权,适合多用户协作但权限需要精细控制的场景(如公司内部项目文件共享)。

二、定时任务进阶:让 crontab 更 “聪明”(复杂定时 + 避免坑)

之前学了crontab的基础定时(如每天 3 点),但实际工作中需要更复杂的定时(如 “每月最后一天备份”)、“避免任务重叠”(前一个任务没跑完,新任务又启动),今天学这两个实用技巧。

1. 复杂定时:用crontab实现 “每月最后一天”“每周工作日” 等特殊时间

crontab的 5 个时间字段(分 时 日 月 周)支持特殊表达式,解决 “非固定周期” 的定时需求。

(1)每月最后一天执行任务(比如每月最后一天汇总报表)

命令格式(写在crontab -e里):

bash

0 23 28-31 * * [ $(date +\%d -d tomorrow) = 01 ] && 你的命令  

  • 解释
    • 28-31 * *:每月 28-31 日的 23 点 0 分触发检查;
    • [ $(date +\%d -d tomorrow) = 01 ]:判断 “明天是否是 1 号”(如果是,说明今天是当月最后一天);
    • && 你的命令:如果条件成立,就执行你的命令(比如备份脚本)。

实操:每月最后一天 23 点备份project.txt/backup

bash

crontab -e  # 编辑定时任务  

添加一行(替换成你的脚本路径):

bash

0 23 28-31 * * [ $(date +\%d -d tomorrow) = 01 ] && cp ~/linux_study/project.txt /backup  
(2)每周一到周五执行任务(工作日自动处理)

命令格式(周字段1-5代表周一到周五):

bash

0 9 * * 1-5 你的命令  # 每周一到周五9点执行  

实操:工作日 9 点自动运行system_check.sh(系统检查):

bash

0 9 * * 1-5 ~/linux_study/system_check.sh >> ~/linux_study/check_log.txt 2>&1  
2. 避免任务重叠:防止 “前一个任务没跑完,新任务又启动”

比如你的备份脚本需要 1 小时,但定时任务每 30 分钟执行一次,会导致多个脚本同时运行(占资源、可能冲突)。用flock(文件锁)解决:让任务启动前检查 “是否已有同名任务在运行”,有则跳过。

实操:给定时任务加 “文件锁”(以每小时备份为例)

bash

crontab -e  # 编辑任务  

添加一行(关键是flock -n /tmp/backup.lock):

bash

0 * * * * flock -n /tmp/backup.lock -c '~/linux_study/auto_backup.sh'  

  • 解释
    • /tmp/backup.lock:一个临时 “锁文件”(任务运行时创建,结束后自动删除);
    • -n:如果锁文件已存在(说明有任务在运行),直接跳过不执行;
    • -c:后面跟要执行的命令(你的备份脚本)。

三、搭建简单 HTTP 服务:用 nginx 部署一个 “能访问的网页”(工作必用)

实际工作中经常需要 “搭建内部网页服务”(比如放项目文档、数据报表),nginx 是最常用的轻量网页服务器(就像 “电脑上的网页管家,负责把网页内容发给访问者”)。今天学 “用 nginx 搭建一个自己的网页,在浏览器里访问”。

1. 安装 nginx(网页服务器)

bash

sudo apt update  
sudo apt install nginx  # 输入密码后按y,等待安装完成  

安装完成后,nginx 会自动启动,用以下命令验证:

bash

sudo systemctl status nginx  # 显示“active (running)”说明启动成功  
2. 开放 80 端口(HTTP 服务默认端口,需防火墙允许)

bash

sudo ufw allow 80/tcp  # 允许外部访问80端口(HTTP)  
sudo ufw status  # 验证规则是否添加成功(会显示80/tcp ALLOW)  
3. 访问默认网页(验证服务能正常工作)

步骤 1:查本机 IP(让浏览器知道 “访问哪台电脑”):

bash

ip a  # 找类似“192.168.1.100”的IP(不是127.0.0.1)  

步骤 2:在本机或同一局域网的其他设备上,打开浏览器,输入你的 IP(比如192.168.1.100):

  • 会看到 nginx 的默认页面(“Welcome to nginx!”),说明服务部署成功!
4. 替换成 “自己的网页内容”(比如放项目文档)

nginx 默认的网页文件存放在/var/www/html/目录,替换这个目录下的文件,就能显示自己的内容。

步骤 1:创建自己的网页文件index.html

bash

nano ~/linux_study/index.html  # 在学习目录创建网页文件  

写入简单的 HTML 内容(复制粘贴,不用懂 HTML,能显示文字即可):

html

预览

<!DOCTYPE html>  
<html>  
<body>  
  <h1>这是我的第一个网页!</h1>  
  <p>用nginx搭建,是不是很简单?</p>  
  <p>项目文档:<a href="project.txt">查看project.txt</a></p>  
</body>  
</html>  

步骤 2:把自己的网页文件和project.txt放到 nginx 目录(需要管理员权限)

bash

# 先备份nginx默认的index.html(可选,防止想恢复)  
sudo cp /var/www/html/index.html /var/www/html/index.html.bak  

# 复制自己的网页文件到nginx目录  
sudo cp ~/linux_study/index.html /var/www/html/  

# 复制project.txt到nginx目录(让网页能链接到它)  
sudo cp ~/linux_study/project.txt /var/www/html/  

步骤 3:刷新浏览器,查看效果
在浏览器输入你的 IP(如192.168.1.100),会显示你写的网页内容,点击 “查看 project.txt” 还能下载 / 查看文件 —— 你的第一个网页服务就搭建好了!

5. 停止 / 重启 nginx 服务(需要时)

bash

sudo systemctl stop nginx  # 停止服务(网页无法访问)  
sudo systemctl start nginx  # 启动服务  
sudo systemctl restart nginx  # 重启服务(修改配置后生效)  

今日必练实操清单(跟着做,15 分钟搞定)

  1. ACL 权限练习

    • userB添加project.txt的 “只读权限”(用setfacl -m u:userB:r-- project.txt);
    • 切换到userB,验证能读但不能写(cat能看,echo写入会报错);
    • 最后用setfacl -b project.txt-b清除所有 ACL 权限)。
  2. 定时任务进阶

    • crontab -e添加 “每周一到周五的 18 点,把project.txt复制到~/backup_daily”(先创建~/backup_daily目录);
    • 命令:0 18 * * 1-5 cp ~/linux_study/project.txt ~/backup_daily/
  3. HTTP 服务搭建

    • 按步骤安装 nginx,替换默认网页为自己写的index.html
    • 用手机连接同一局域网,访问你的 IP,确认能看到网页(证明服务正常)。

今日总结(3 句话记住核心)

  1. ACL 权限setfacl -m u:用户名:权限 文件名 → 给特定用户单独授权,不用改所属组,多用户协作必备。
  2. 定时任务进阶:支持 “每月最后一天”(用日期判断)、“每周工作日”(1-5),加flock避免任务重叠。
  3. 简单 HTTP 服务sudo apt install nginx → 把网页文件放/var/www/html/,开放 80 端口,浏览器输入 IP 即可访问(搭建内部文档服务器超简单)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值