《Linux从小白到高手》进阶实操篇:用户及权限有关的实际工作场景应用

news2024/10/9 14:41:05
  1. 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,领导让他多干点,能者多劳:

  1. 创建用户tom并将其添加到Developer组作为主组(如果tom用户还不存在):
sudo useradd -m -g Developer组 -s /bin/bash tom  
#设置密码(需要手动输入)  
sudo passwd tom
  1. 如果tom用户已经存在,并且你想更改其主组为Developer组:
    sudo usermod -g Developer组 tom
  2. 将tom用户添加到DataBase组作为附加组:
    sudo usermod -aG DataBase组 tom
  3. 验证tom的身份
id tom
uid=1001(tom) gid=1002(Developer组) groups=1002(Developer组),1003(DataBase组)

1.3 运维组新招聘了Andy,他是老大,需要维护负责整个服务器系统和DB,请给他相应的权限

  1. 创建Andy用户:
    sudo useradd -m -g 运维组 -s /bin/bash andy
    #设置密码(需要手动输入)
    sudo passwd andy
    如果Andy已经存在,但不在运维组中,你可以使用usermod命令将其添加到运维组:
    sudo usermod -aG 运维组 andy
  2. 配置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时都输入密码,可以省略这个选项。
  3. 配置数据库权限(这个可能对新手有点“超纲”):
    如果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;
  1. 验证配置:
    最后,好了后你需要向你的新领导会汇报下。你可以让Andy尝试执行一些需要特权的命令,比如重启服务器(实际并不建议哦)或访问数据库,以确保他没有遇到权限问题。

场景2:经典的linux警察与土匪的游戏

jack, jerry: 警察
xh, xq: 土匪
(1) 创建组
(2) 创建用户
(3) jack 创建一个文件,自己可以读写,本组人可以读,其它组没人任何权限
(4) jack 修改该文件,让其它组人可以读, 本组人可以读写
(5) xh 投靠 警察,看看是否可以读写.

  1. 创建用户和组
    创建用户组
    警察组:police
    土匪组:bandit
    使用groupadd命令创建这两个组。
sudo groupadd police  
sudo groupadd bandit
  1. 创建用户
    警察: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
  1. 文件权限设置
    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组的成员,可以读写该文件。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中对象obj类型确定最pythonic的方式——isinstance()函数

python中确定对象obj的类型,isinstance函数最是优雅,type、issubclass等函数也可以,但终究“曲折”。 (笔记模板由python脚本于2024年10月07日 19:42:38创建,本篇笔记适合喜欢python的coder翻阅) 【学习的细节是欢悦的历程】 Pyth…

Vue2电商项目(七)、订单与支付

文章目录 一、交易业务Trade1. 获取用户地址2. 获取订单信息 二、提交订单三、支付1. 获取支付信息2. 支付页面--ElementUI(1) 引入Element UI(2) 弹框支付的业务逻辑(这个逻辑其实没那么全)(3) 支付逻辑知识点小总结 四、个人中心1. 搭建二级路由2. 展示动态数据(1). 接口(2).…

【Kubernetes】常见面试题汇总(六十)

目录 131. pod 一直处于 pending 状态? 132. helm 安装组件失败? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于…

企业经营异常怎么解除

经营异常是怎么回事?是什么意思?了解异常原因:我们到所属工商营业执照异常的具体原因。原因可能包括未按时提交年报、未履行即时信息公示义务、公示信息隐瞒真实情况或弄xu作jia、失联等。纠正违规行为:查到了异常原因&#xff0c…

洛谷P5723、P5728、P1428、P1319 Python解析

P5723 完整代码 def is_prime(y):if y < 2:return Falsefor i in range(2, int(y**0.5) 1):if y % i 0:return Falsereturn Truen int(input()) sum_primes 0 x 0if n < 2:print("0") elif n 2:print("2\n1") else:for i in range(2, n 1):i…

计数原理与组合 - 离散数学系列(三)

目录 1. 计数原理的基本概念 加法原理&#xff08;Rule of Sum&#xff09; 乘法原理&#xff08;Rule of Product&#xff09; 2. 排列与组合 排列&#xff08;Permutation&#xff09; 组合&#xff08;Combination&#xff09; 日常生活中的例子 3. 二项式定理 4. 实…

Mysql锁机制解读(敲详细)

目录 锁的概念 全局锁 表级锁 表锁 元数据锁 意向锁 锁的概念 全局锁 表级锁 表锁 元数据锁 主要是对未提交事务&#xff0c;修改表结构造成表结构混乱&#xff0c;进行控制。 在不涉及表结构变化的情况下,元素锁可以忽略。 意向锁 避免有行级锁影响加表级锁&#xff0…

Mysql(六) --- 聚合函数,分组和联合查询

文章目录 前言1.聚合函数1.1.常用的函数1.2.COUNT()1.3.SUM()1.4.AVG()1.5.MIN()、MAX() 2.GROUP BY 分组查询2.1.语法2.2.示例2.3.HAVING 子句 3.联合查询3.1.为什么要进行联合查询3.2.那么是如何进行联合查询的3.3.示例&#xff1a;一个完整的联合查询的过程3.4.内连接3.5.外…

Error:WPF项目中使用oxyplot,错误提示命名空间中不存在“Plot”名称

在OxyPlot中&#xff0c;<oxy:PlotView>和<oxy:Plot>都是用来显示图表的控件&#xff0c;在WPF项目中使用oxyplot之前&#xff0c;先通过NuGet安装依赖包&#xff1a;OxyPlot.Wpf。 <oxy:PlotView>和<oxy:Plot>使用示例&#xff1a; <oxy:PlotVie…

【算法】双指针(续)

一、盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

OJ在线评测系统 微服务 OpenFeign调整后端下 nacos注册中心配置 不给前端调用的代码 全局引入负载均衡器

OpenFeign内部调用二 4.修改各业务服务的调用代码为feignClient 开启nacos注册 把Client变成bean 该服务仅内部调用&#xff0c;不是给前端的 将某个服务标记为“内部调用”的目的主要有以下几个方面&#xff1a; 安全性: 内部API通常不对外部用户公开&#xff0c;这样可以防止…

Nginx05-基础配置案例

零、文章目录 Nginx05-基础配置案例 1、案例需求 &#xff08;1&#xff09;有如下访问 http://192.168.119.161:8081/server1/location1 访问的是&#xff1a;index_sr1_location1.htmlhttp://192.168.119.161:8081/server1/location2 访问的是&#xff1a;index_sr1_loca…

慢接口分析与优化总结

文章目录 1. 慢接口优化的意义2. 接口耗时构成3. 优化技巧3.1. 内部代码逻辑异步执行[异步思想]并行优化拒绝阻塞等待预分配与循环使用[池化思想]线程池合理设计锁粒度避免过粗优化程序结构 3.2. 缓存恰当引入缓存[空间换时间思想]缓存延迟优化提前初始化缓存[预取思想] 3.3. 数…

工具函数(截取文本第一个字为图片)

const subStringToImage (params) > {const { str ,color #FFF,background #4F54FF,size 60,fontSize 20 } paramsif(str.length < 0) return console.error(字符不能为空!)const text str.slice(0, 1)const canvas document.createElement(canvas)const ctx …

github 国内文件加速下载

参看;https://www.cnblogs.com/ting1/p/18356265 在源网址前加上 https://hub.gitmirror.com/ 或https://mirror.ghproxy.com/&#xff0c;例如&#xff1a; https://hub.gitmirror.com/https://github.com/t1m0thyj/WinDynamicDesktop/releases/download/v5.4.1/WinDynamicD…

算法题总结(十)——二叉树上

#二叉树的递归遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer>(); //也可以把result 作为全局变量&#xff0c;只需要一个函数即可。…

公开数据集网站分享

参考链接&#xff1a;常用的医学组织切片细胞图像数据集_细胞分割数据集-CSDN博客文章浏览阅读1.3w次&#xff0c;点赞32次&#xff0c;收藏133次。乳腺癌细胞图像数据集、血细胞图像数据集、HE染色切片、疟疾细胞图像图像识别、分类、分割_细胞分割数据集https://blog.csdn.ne…

Redis list 类型

list类型 类型介绍 列表类型 list 相当于 数组或者顺序表 list内部的编码方式更接近于 双端队列 &#xff0c;支持头插 头删 尾插 尾删。 需要注意的是&#xff0c;Redis的下标支持负数下标。 比如数组大小为5&#xff0c;那么要访问下标为 -2 的值可以理解为访问 5 - 2 3 …

Linux dlsym和直接调用函数地址解析分析

dlsym 函数是 Linux 下动态链接库&#xff08;shared library&#xff09;编程中的一个重要函数。它用于在运行时获取动态链接库中符号的地址&#xff0c;通常用于获取函数指针或变量的地址。 以下是 dlsym 函数的基本用法和示例。 1. 函数原型 void *dlsym(void *handle, c…

【超详细】基于YOLOv11的PCB缺陷检测

主要内容如下&#xff1a; 1、数据集介绍 2、下载PCB数据集 3、不同格式数据集预处理&#xff08;Json/xml&#xff09;&#xff0c;制作YOLO格式训练集 4、模型训练及可视化 5、Onnxruntime推理 运行环境&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff…