- List item
本篇为《Linux从小白到高手》进阶实操篇的第一篇,主要介绍分享一些用户及权限有关的实际工作场景应用。
场景1:
实际工作中你一定会碰到如下图所示的情景:本部门有5个组,分别为:①Root组:用户root,超级权限;②DataBase组:成员jack,是Oracle DBA;③OP组:成员Tim,一般操作权限;④运维组:成员Jim,较高权限,⑤Developer组:成员Tom,普通权限。
1.1领导让你写脚本完成以上组织架构。
参考脚本如下:
#!/bin/bash
#创建组
sudo groupadd Root组
sudo groupadd DataBase组
sudo groupadd OP组
sudo groupadd 运维组
sudo groupadd Developer组
#创建用户并设置密码(需要手动输入两次密码以确认)
sudo useradd -m -g Root组 -s /bin/bash root
echo "root:your_root_password" | sudo chpasswd # 请替换your_root_password为实际密码
sudo useradd -m -g DataBase组 -G Root组 -s /bin/bash jack
echo "jack:your_jack_password" | sudo chpasswd # 请替换your_jack_password为实际密码
sudo useradd -m -g OP组 -s /bin/bash Tim
echo "Tim:your_tim_password" | sudo chpasswd # 请替换your_tim_password为实际密码
sudo useradd -m -g 运维组 -G Root组 -s /bin/bash Jim
echo "Jim:your_jim_password" | sudo chpasswd # 请替换your_jim_password为实际密码
sudo useradd -m -g Developer组 -s /bin/bash Tom
echo "Tom:your_tom_password" | sudo chpasswd # 请替换your_tom_password为实际密码
#分配特定权限(以下权限设置仅为示例,具体权限应根据实际需求调整)
#给予root用户超级权限(通常root用户默认拥有超级权限)
sudo usermod -aG sudo root
#为jack用户添加Oracle DBA相关权限(假设Oracle已安装并配置)
#这一步通常需要Oracle特定的配置和脚本,这里仅做象征性设置
#例如,假设有一个sudoers文件来管理Oracle DBA权限
echo "jack ALL=(ALL) NOPASSWD: /path/to/oracle/dba/commands" | sudo tee -a /etc/sudoers.d/jack_oracle_dba
#注意:编辑sudoers文件应使用visudo命令以确保语法正确
#设置Tim用户的权限(一般操作权限)
#这里假设一般操作权限仅包含对某个目录的读写权限
sudo chown -R :OP组 /some/general/operation/directory
sudo chmod -R 770 /some/general/operation/directory
sudo usermod -aG OP组 Tim
#设置Jim用户的稍高权限(例如,对系统日志的读取权限)
sudo chown -R :运维组 /var/log
sudo chmod -R 750 /var/log
sudo usermod -aG 运维组 Jim
#设置Tom用户的普通权限(例如,对某个开发目录的读写权限)
sudo chown -R :Developer组 /home/Developer/projects
sudo chmod -R 755 /home/Developer/projects
sudo usermod -aG Developer组 Tom
1.2 tom比较牛逼,他还懂DataBase,领导让他多干点,能者多劳:
- 创建用户tom并将其添加到Developer组作为主组(如果tom用户还不存在):
sudo useradd -m -g Developer组 -s /bin/bash tom
#设置密码(需要手动输入)
sudo passwd tom
- 如果tom用户已经存在,并且你想更改其主组为Developer组:
sudo usermod -g Developer组 tom - 将tom用户添加到DataBase组作为附加组:
sudo usermod -aG DataBase组 tom - 验证tom的身份
id tom
uid=1001(tom) gid=1002(Developer组) groups=1002(Developer组),1003(DataBase组)
1.3 运维组新招聘了Andy,他是老大,需要维护负责整个服务器系统和DB,请给他相应的权限
- 创建Andy用户:
sudo useradd -m -g 运维组 -s /bin/bash andy
#设置密码(需要手动输入)
sudo passwd andy
如果Andy已经存在,但不在运维组中,你可以使用usermod命令将其添加到运维组:
sudo usermod -aG 运维组 andy - 配置sudo权限:
为了让Andy能够执行需要root权限的命令,你需要编辑sudoers文件。建议使用visudo命令来安全地编辑这个文件:
sudo visudo
在打开的编辑器中,你可以添加一行来给予Andy特定的sudo权限。例如,如果你想让Andy能够执行所有需要root权限的命令(这通常是一个高风险操作,应该谨慎使用),你可以添加:
andy ALL=(ALL) ALL
但是,更安全的做法是仅给予Andy执行特定命令的权限。例如,如果你只想让Andy能够重启服务器和访问数据库,你可以添加类似以下的行(具体命令可能需要根据你的系统配置进行调整):
andy ALL=(ALL) NOPASSWD: /sbin/reboot, /usr/bin/systemctl restart *, /path/to/database/admin/command
NOPASSWD:选项允许Andy在执行这些命令时不需要输入密码。如果你希望Andy在每次使用sudo时都输入密码,可以省略这个选项。 - 配置数据库权限(这个可能对新手有点“超纲”):
如果Andy需要访问数据库,还需要在数据库管理系统中为他配置相应的权限。这通常涉及到使用数据库管理工具(如Oracle SQLPLUS,MySQL的mysql命令行工具、PostgreSQL的psql等)来创建用户并授予权限。
假如如,在MySQL中,你可以使用以下命令(在MySQL命令行工具中执行):
CREATE USER 'andy'@'localhost' IDENTIFIED BY 'andy_password';
GRANT ALL PRIVILEGES ON *.* TO 'andy'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 验证配置:
最后,好了后你需要向你的新领导会汇报下。你可以让Andy尝试执行一些需要特权的命令,比如重启服务器(实际并不建议哦)或访问数据库,以确保他没有遇到权限问题。
场景2:经典的linux警察与土匪的游戏
jack, jerry: 警察
xh, xq: 土匪
(1) 创建组
(2) 创建用户
(3) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
(4) jack 修改该文件,让其它组人可以读, 本组人可以读写
(5) xh 投靠 警察,看看是否可以读写.
- 创建用户和组
创建用户组
警察组:police
土匪组:bandit
使用groupadd命令创建这两个组。
sudo groupadd police
sudo groupadd bandit
- 创建用户
警察:jack, jerry
土匪:xh, xq
使用useradd命令并指定用户组来创建这些用户。
sudo useradd -g police jack
sudo useradd -g police jerry
sudo useradd -g bandit xh
sudo useradd -g bandit xq
//为用户设置密码。
sudo passwd jack
sudo passwd jerry
sudo passwd xh
sudo passwd xq
- 文件权限设置
jack创建文件
切换到jack用户,并创建一个文件,例如police_file.txt。
su - jack
touch police_file.txt
设置文件权限
使用chmod和chown命令设置文件权限,使得jack可以读写该文件,police组的成员可以读该文件,而其他用户没有任何权限。
chmod 640 police_file.txt # 所有者读写,组读,其他无权限
#chown不是必须的,因为jack已经是文件的所有者
#chown jack:police police_file.txt
验证权限
jack可以读写文件。
jerry(同属police组)可以读文件,但不能写。
xh和xq(属bandit组)无法访问文件。
4. 模拟权限变更和组切换
xh投靠警察
将xh用户添加到police组。
sudo usermod -aG police xh
此时,xh应该能够读取jack创建的文件。
su - xh
cat /path/to/police_file.txt # 假设知道文件的完整路径
但xh仍然不能写入该文件,除非jack或具有相应权限的用户更改文件权限。
修改文件权限
jack可以修改文件权限,使得police组的成员可以读写该文件。
su - jack
chmod 660 police_file.txt # 所有者读写,组读写,其他无权限
现在,xh作为police组的成员,可以读写该文件。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。