今日学习目标
- ✅ 理解Linux用户和组的概念
- ✅ 掌握用户/组的增删改查
- ✅ 彻底搞懂文件权限(rwx)
- ✅ 学会使用sudo提升权限
第一部分:用户管理基础
1. 了解用户信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cd ~/linux-learning/day3 mkdir user-management cd user-management
whoami id who w
cat /etc/passwd | head -5
cat /etc/shadow | head -5
cat /etc/group | head -5
|
2. 创建用户和组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| su - root
groupadd developers groupadd devops groupadd testers
tail -3 /etc/group
useradd john useradd -m jane useradd -d /home/tom -m tom useradd -g developers mike useradd -G devops,testers lisa
passwd john echo "123456" | passwd --stdin jane
id john id jane id mike id lisa
ls -la /home/
|
3. 用户信息管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| usermod -l john_new john usermod -d /home/newhome -m john_new usermod -g testers john_new usermod -G devops,developers john_new
passwd -l john_new passwd -u john_new
passwd -S john_new
userdel john_new userdel -r jane
|
第二部分:实战演练 - 创建项目团队
现在我们来模拟一个真实场景:为一个项目团队创建用户环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| cd ~/linux-learning/day3/user-management
groupadd project_alpha groupadd project_beta
useradd -m -G project_alpha pm_wang echo "pm@123" | passwd --stdin pm_wang
for i in {01..03}; do useradd -m -G project_alpha,project_beta dev_zhang$i echo "dev@123" | passwd --stdin dev_zhang$i done
for i in {01..02}; do useradd -m -G project_beta tester_li$i echo "test@123" | passwd --stdin tester_li$i done
mkdir -p /projects/{alpha,beta,shared} mkdir -p /projects/alpha/{src,doc,bin,logs} mkdir -p /projects/beta/{src,doc,bin,logs}
chown -R pm_wang:project_alpha /projects/alpha chown -R pm_wang:project_beta /projects/beta chmod 770 /projects/alpha chmod 770 /projects/beta
echo "=== 项目组成员 ===" getent group project_alpha getent group project_beta echo "=== 项目目录 ===" ls -la /projects/
|
第三部分:文件权限深度解析
1. 理解权限表示法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| touch permissions.txt echo "Permission Practice" > permissions.txt mkdir permissions_dir
ls -l permissions.txt
|
2. chmod - 修改权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| touch test{1..5}.txt
chmod u+x test1.txt chmod g-w test2.txt chmod o=r test3.txt chmod a+rw test4.txt chmod u=rwx,g=rx,o=r test5.txt
chmod 755 test1.txt chmod 644 test2.txt chmod 700 test3.txt chmod 777 test4.txt
mkdir -p dir1/dir2/dir3 touch dir1/dir2/file.txt chmod -R 755 dir1/
chmod 755 file chmod 644 file chmod 750 file chmod 600 file
|
3. chown/chgrp - 修改所有者和组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| touch ownership.txt mkdir ownership_dir
chown john ownership.txt chown john:developers ownership.txt
chgrp developers ownership.txt
chown -R john:developers ownership_dir/
mkdir shared_folder chmod 770 shared_folder chgrp developers shared_folder
|
第四部分:特殊权限和sudo
1. 特殊权限(SUID、SGID、Sticky Bit)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| chmod u+s /usr/bin/passwd ls -l /usr/bin/passwd
chmod g+s shared_folder ls -ld shared_folder
chmod +t /tmp ls -ld /tmp
chmod 4755 file chmod 2755 dir chmod 1777 dir
|
2. sudo权限配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sudo -l
visudo
john ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
jane ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/dnf
mike ALL=(webuser) /usr/bin/php
echo "你的用户名 ALL=(ALL) ALL" >> /etc/sudoers.d/yourname
|
第五部分:综合实战 - 企业权限模型设计
现在我们来做一个企业级的权限设计项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| cd ~/linux-learning/day3 mkdir enterprise-permissions cd enterprise-permissions
cat > setup_enterprise_permissions.sh << 'EOF'
groupadd dev_team groupadd ops_team groupadd qa_team
for i in dev_{wang,li,zhang}; do useradd -m -G dev_team $i echo "dev@123" | passwd --stdin $i done
for i in ops_{zhao,qian,sun}; do useradd -m -G ops_team $i echo "ops@123" | passwd --stdin $i done
for i in qa_{zhou,wu,zheng}; do useradd -m -G qa_team $i echo "qa@123" | passwd --stdin $i done
mkdir -p /company/{dev,ops,qa,shared,logs,releases}
chown -R root:dev_team /company/dev chmod -R 750 /company/dev
chown -R root:ops_team /company/ops chmod -R 770 /company/ops
chown -R root:qa_team /company/qa chmod -R 750 /company/qa
chown root:dev_team /company/shared chmod 1777 /company/shared
chown root:ops_team /company/logs chmod 750 /company/logs
chown root:ops_team /company/releases chmod 750 /company/releases
chmod g+s /company/dev chmod g+s /company/ops chmod g+s /company/qa chmod g+s /company/releases
echo "=== 权限配置完成 ===" echo "目录权限检查:" ls -la /company/ EOF
chmod +x setup_enterprise_permissions.sh
sudo ./setup_enterprise_permissions.sh
|
第六部分:今日挑战任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
-rwsr-xr-x 1 root root drwxrws--- 2 dev team -rw-r--r-- 1 user users
touch challenge2 chmod 4750 challenge2
cat > users.txt << 'EOF' alice:developers:alice@123 bob:ops:bob@123 charlie:qa:charlie@123 EOF
cat > batch_create_users.sh << 'EOF'
INPUT_FILE="users.txt" LOG_FILE="user_creation.log"
echo "开始创建用户: $(date)" > $LOG_FILE
while IFS=: read -r username group password; do echo "正在创建用户: $username"
if ! grep -q "^$group:" /etc/group; then groupadd $group echo " 创建组: $group" >> $LOG_FILE fi
useradd -m -G $group $username echo "$password" | passwd --stdin $username
if [ $? -eq 0 ]; then echo " ✅ 用户 $username 创建成功" >> $LOG_FILE else echo " ❌ 用户 $username 创建失败" >> $LOG_FILE fi done < $INPUT_FILE
echo "用户创建完成: $(date)" >> $LOG_FILE echo "查看日志: $LOG_FILE" EOF
chmod +x batch_create_users.sh ./batch_create_users.sh
|
常用的整数比较运算符
| 运算符 |
含义 |
英文 |
示例 |
-eq |
等于 |
equal |
[ $a -eq $b ] |
-ne |
不等于 |
not equal |
[ $a -ne $b ] |
-gt |
大于 |
greater than |
[ $a -gt $b ] |
-lt |
小于 |
less than |
[ $a -lt $b ] |
-ge |
大于等于 |
greater or equal |
[ $a -ge $b ] |
-le |
小于等于 |
less or equal |
[ $a -le $b ] |
第七部分:今日总结和面试题
重要知识点回顾:
- ✅ 用户管理:useradd, usermod, userdel, passwd
- ✅ 组管理:groupadd, groupmod, groupdel
- ✅ 权限管理:chmod, chown, chgrp
- ✅ 特殊权限:SUID(4), SGID(2), Sticky(1)
- ✅ sudo配置:/etc/sudoers
面试必考题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 答:配置sudo,如 "username ALL=(ALL) ALL"
答:文件:r读内容,w修改内容,x执行 目录:r列文件名,w创建删除文件,x进入目录
答:创建共同组,chown -R root:group /dir,chmod 770 /dir
答:SUID: 执行时以文件所有者身份运行 SGID: 目录中新文件继承目录的组
答:在sudoers中配置,如 "user ALL=(ALL) /usr/bin/systemctl"
|
今日名言:”权限是Linux安全的基石,理解权限就是理解Linux的安全模型。”