在最爱的秋天学习 linux 之 su 和 sudo

文章目录

    • @[toc]
    • 你好,su
    • 你好,sudo
      • 关于 /etc/sudoers 文件
        • 四个 Alias
        • Defaults
        • sudo 授权配置语法
      • 搞一下不就知道了
        • 配置 sudo
        • 免密切换到 root 用户
        • 查看当前 sudo 命令范围
        • sudo 审计日志
        • 使用子配置文件的方式

开开心心享受生活,没事学学 Linux

  • su:是 linux 切换用户的命令
    • linux 在切换用户的时候,不需要像 windows 一样先注销当前用户才可以切换到另一个用户
    • 直接使用 su 命令就可以切换,并且使用 exit 命令就能退出当前用户,返回到登录前的用户
  • sudo:是 linux 普通用户临时提权到 root 用户时需要带上的命令

你好,su

  • 先说一个冷知识:
    • root 用户使用 su 命令切换到其他普通用户不需要输入密码
    • 普通用户使用 su 命令切换到其他普通用户和 root 用户都是需要输入密码的
  • 再说一个冷知识:
    • 如果一个用户被分配了 /sbin/nologin 这种 shell 时,他是不能被登录的,但是这个用户可以启动有自己权限的服务
  • 最后一个冷知识:
    • su - <username>su <username> 是有区别的
    • su - <username> 表示完全登录到指定的用户,会把 env 命令的变量切换成登陆后的用户
    • su <username> 不会把 env 命令的变量切换成登陆后的用户,而是沿用切换前用户的 env 变量
  • 冷知识结束了,su 的使用也就差不多了
  • 下面使用到的用户需要自己提前创建,或者使用自己已有的用户来验证
  • 下面的命令解答:
    • su - azureray 表示使用登录的方式切换到 azureray 这个用户
    • -c "env" 表示不进入到用户的终端来执行命令
    • grep 'PATH' 表示过滤 PATH 这个字段
su - azureray -c "env" | grep 'PATH'

同上,区别在于有没有带 - ,通过 env 命令获取的内容,过滤 PATH 来比较之间的差异

su azureray -c "env" | grep 'PATH'

你好,sudo

  • 使用 visudo 命令的本质是调用 vi 命令去编辑 /etc/sudoers 文件,但是会把 /etc/sudoers 文件变成只读模式
  • 如果再次使用 visudo 命令,会返回:visudo: /etc/sudoers busy, try again later
  • 如果直接使用 vim /etc/sudoers 命令,当编辑文件时,会提示:W10: Warning: Changing a readonly file

关于 /etc/sudoers 文件

四个 Alias

/etc/sudoers 文件里面的三个 alias 可以理解成一个管理组,这样,在给不同用户配置相同权限的时候,可以直接分配给 alias 定义的名字

  • Host_Alias主机别名
  • User_Alias用户名别名和组名别名(组名前面要带上%)
  • Runas_Alias指定以哪个用户或用户组的权限执行命令的别名
  • Cmnd_Alias命令别名
Defaults

sudo 环境的一些默认配置,这块比较复杂,也比较深,有兴趣可以查阅官方的说明书

  • 这里解释一下配置文件自带的 Defaults
    • Defaults !visiblepw阻止 sudo 命令在终端中显示用户输入的密码
    • Defaults always_set_homesudo 命令在以其他用户身份执行命令时总是设置目标用户的家目录(home directory)作为当前工作目录
    • Defaults match_group_by_gidsudo 命令在执行匹配用户组时,将组名替换为组的 GID(组标识符)
    • Defaults always_query_group_pluginsudo 命令始终查询外部组插件来确定用户是否属于特定用户组,而不是仅依赖于本地组信息
    • Defaults env_resetsudo 命令在执行时重置用户的环境变量,以仅允许用户使用特定的环境变量
    • Defaults env_keep =指定要保留的环境变量,这些环境变量将在用户执行 sudo 命令时保持不变
    • Defaults env_keep +=指定要保留的环境变量,并将它们追加到已存在的环境变量列表中
    • Defaults secure_path用于指定安全的 PATH 环境变量,以确保在用户执行 sudo 命令时,只有受信任的目录包含在 PATH 中
  • 一些其他好用的 Defaults
    • Defaults log_inputDefaults log_output:可以用于记录 sudo 命令的输入和输出,以便审计
    • Defaults logfile指定日志文件
      • Defaults log_host, log_year, logfile指定日志文件的同时,将主机名和四位数年份信息记录到日志内
    • Defaults editor:指定用于编辑 sudo 临时文件的文本编辑器,需要写 vim 命令的绝对路径
sudo 授权配置语法

USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS

  • USER/GROUP表示需要被授权的用户名(或者 User_Alias)或者用户组名,如果是组则需要以 % 开头
    • 用户名别名要用 User_Alias 定义的
  • HOST表示允许从哪些主机登录的用户运行 sudo 命令,ALL 表示允许从任何终端、机器访问
  • (USER [:GROUP])表示使用 sudo 可切换的用户或者组,组可以不指定,ALL 表示可以切换到系统的所有用户
    • 用户名别名要用 Runas_Alias 定义的
  • NOPASSWD如果指定,则该用户或组使用 sudo 时不需要输入密码
  • COMMANDS表示指定可以使用 sudo 来提权的命令,ALL 表示所有命令,要使用绝对路径

搞一下不就知道了

配置 sudo

创建普通用户

useradd azureray
useradd wings

配置 sudo 文件

visudo
  • wheel 组是默认自带的,这里就不作修改了
  • root 用户也是默认自带的,这里也不作修改
  • Defaults 也都是遵顼的默认配置,没有修改过
# 定义一个别名叫 DOTA,里面包含了 azureray 和 wings 两个用户
User_Alias DOTA = azureray, wings
# 定义一个别名叫 SYSTEM,里面包含了 systemctl,chown,chmod,yum 这几个命令
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/chown, \/usr/bin/chmod, /usr/bin/yum
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    editor = /usr/bin/vim
root    ALL=(ALL)       ALL
# 用户用别名 DOTA
# 使用的命令用别名 SYSTEM
# NOPASSWD 表示 sudo 命令不需要输入密码
DOTA ALL=(ALL) NOPASSWD: SYSTEM
%wheel  ALL=(ALL)       ALL

如果不生效,可以退出终端,重新连接来生效

免密切换到 root 用户
  • 在没有配置的情况下,如果 sudo 用户使用 sudo -i 切换到 root 用户会报错:Sorry, user xxx is not allowed to execute '/bin/bash' as root on localhost.localdomain.

指定 wings 用户,指定 /bin/bash 命令,随后再切换到 wings 用户,就可以使用 sudo -i 命令来免密切换到 root 用户

wings ALL=(ALL) NOPASSWD: /bin/bash

当然,这是一个比较危险的操作,还是不建议把 /bin/bash 配置到命令里面

查看当前 sudo 命令范围
sudo -l

会返回所有的 Defaults 的配置和可用的命令,因为我没有配置主机名,这里显示的是 localhost

Matching Defaults entries for wings on localhost:!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAYHOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERICLC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",secure_path=/sbin\:/bin\:/usr/sbin\:/usr/binUser wings may run the following commands on localhost:(ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/chown, /usr/bin/chmod, /usr/bin/yum
sudo 审计日志

日志路径和日志文件名称

Defaults    logfile = /root/.sudo.log

wings 用户使用 sudo 操作后的记录,也会记录用户在哪个路径下操作的什么命令

Nov  2 21:39:10 : wings : TTY=pts/0 ; PWD=/home/wings ; USER=root ;COMMAND=/bin/systemctl disable firewalld

指定日志文件的同时,将主机名和四位数年份信息记录到日志内

Defaults    log_host, log_year, logfile = /root/.sudo.log
  • 时间后面多了年份
  • 用户后面多了 HOST
Nov  2 21:40:52 2023 : wings : HOST=localhost : TTY=pts/0 ; PWD=/home/wings ;USER=root ; COMMAND=/bin/systemctl disable firewalld
使用子配置文件的方式
  • 创建一个名字为 system 的文件,配置文件内容和上面的是一致的,也删除了原来配置文件里面的内容了
  • Defaults editor = /usr/bin/vim 写在主配置文件里面,这样,后续的子配置文件都会生效
  • 以后就可以修改 User_AliasCmnd_Alias 就能针对对应的用户生效了
cat << EOF > /etc/sudoers.d/system
# 定义一个别名叫 DOTA,里面包含了 azureray 和 wings 两个用户
User_Alias DOTA = azureray, wings
# 定义一个别名叫 SYSTEM,里面包含了 systemctl,chown,chmod,yum 这几个命令
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/chown, \/usr/bin/chmod, /usr/bin/yum
# 不同的 sudo 子配置文件,可以配置不同的日志路径和日志文件名称,方便审计
Defaults    log_host, log_year, logfile = /root/.sudo_system.log
# 用户用别名 DOTA
# 使用的命令用别名 SYSTEM
# NOPASSWD 表示 sudo 命令不需要输入密码
DOTA ALL=(ALL) NOPASSWD: SYSTEM
EOF

sudo 要求配置文件的权限必须是 0440,不修改的话,校验配置文件会返回:/etc/sudoers.d/system: bad permissions, should be mode 0440

chmod 0440 /etc/sudoers.d/system

校验配置文件

visudo -c

返回都是 ok 就可以了

/etc/sudoers: parsed OK
/etc/sudoers.d/system: parsed OK

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

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

相关文章

腾讯云轻量级服务器哪个镜像比较好?

腾讯云轻量应用服务器镜像是什么&#xff1f;镜像就是操作系统&#xff0c;轻量服务器镜像系统怎么选择&#xff1f;如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科来详细说下腾讯…

使用shardingJDBC中的雪花算法生成id

常用ID解决方案 数据库自增id 依靠数据库系统的功能实现&#xff0c;但是未来扩容麻烦主从切换时的不⼀致可能会导致重复发号性能瓶颈存在单台sql上 UUID 性能非常高&#xff0c;没有网络消耗无序的字符串&#xff0c;不具备趋势自增特性UUID太长&#xff0c;不易于存储&am…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程&#xff08;4.2.6&#xff09; 实例一&#xff1a;Hello world 实例二&#xff1a;访问一个自定义主页 实例三&#xff1a;通过登录跳转到主页 实例四&#xff1a;主页添加静态文件&#xff0c;包含js、css、…

Android开发笔记(三)—Activity篇

活动组件Activity 启动和结束生命周期启动模式信息传递Intent显式Intent隐式Intent 向下一个Activity发送数据向上一个Activity返回数据 附加信息利用资源文件配置字符串利用元数据传递配置信息给应用页面注册快捷方式 启动和结束 &#xff08;1&#xff09;从当前页面跳到新页…

0032Java程序设计-基于JavaEE的智能化酒店点餐收款系统的设计与实现论文

文章目录 摘 要目录系统设计开发环境 摘 要 酒店点餐收款系统是为了实现酒店餐饮自动化管理而设计的&#xff0c;它完全取代了原来酒店餐饮管理一直使用的人工处理的工作方式&#xff0c;并且避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误&#xff0c;为及时…

C++并发与多线程(14) | condition_varible、wait、notify_one、notify_all

概念 当谈到并发编程,特别是在多线程或多进程的上下文中,条件变量(Condition Variables)、等待(wait)、通知一个(notify_one)和通知所有(notify_all)是常见的概念。它们用于协调线程的执行,以实现同步并避免竞争条件。以下是对每个术语的解释: 条件变量: 条件变量…

cudnn too short

原因是libcudnn.so为软链接&#xff0c;相当于快捷键&#xff0c;但是没有映射到真正的libcudnn.so.8.9.5上 cd /usr/local/cuda-11.6/lib64 ln -s libcudnn.so.8.9.5 libcudnn.so.8 ln -s libcudnn.so.8.9.5 libcudnn.so

亚马逊云科技为奇点云打造全面、安全、可扩展的数据分析解决方案

刘莹奇点云联合创始人、COO&#xff1a;伴随云计算的发展&#xff0c;数据技术也在快速迭代&#xff0c;成为客户迈入DT时代、实现高质量发展的关键引擎。我们很高兴能和云计算领域的领跑者亚马逊云科技一同&#xff0c;不断为客户提供安全可靠的产品与专业的服务。 超过1500家…

Object转List<>,转List<Map<>>

这样就不会局限在转换到List<Map<String,Object>>这一种类型上了.可以转换成List<Map<String,V>>上等,进行泛型转换虽然多了一个参数,但是可以重载啊注: 感觉field.get(key) 这里处理的不是很好,如果有更好的办法可以留言 public static <K, V> …

SpringMVC 和 RESTful 入门

前言 SpringMVC 是一个流行的 Java Web 框架&#xff0c;它使得编写 RESTful Web 服务变得容易。RESTful 是一种架构风格&#xff0c;允许客户端通过 HTTP 请求访问 Web 服务&#xff0c;而不需要维护服务器端代码。SpringMVC 使用 Spring Boot 框架&#xff0c;这是一个专门用…

0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)

大纲 Tumbling Count WindowsmapreduceWindow Size为2Window Size为3Window Size为4Window Size为5Window Size为6 完整代码参考资料 之前的案例中&#xff0c;我们的Source都是确定内容的数据。而Flink是可以处理流式&#xff08;Streaming&#xff09;数据的&#xff0c;就是…

【C++】set和multiset

文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元…

【JAVA学习笔记】58 - 泛型

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter15/src/com/yinhai/generic_ https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter15/src/com/yinhai/customgeneric_ 一、泛型的入门和好处 1)请编写程序&#xff0c;…

Scala 数组(Array)、列表(List)、集合(Set)、映射(Map)和元组(Tuple)

1. 数组(Array) 1.1 定长数组 在 Scala 中&#xff0c;如果你需要一个长度不变的数组&#xff0c;可以使用 Array。但需要注意以下两点&#xff1a; - 在 Scala 中使用 (index) 而不是 [index] 来访问数组中的元素&#xff0c;因为访问元素&#xff0c;对于 Scala 来说是方法调…

人工智能基础_机器学习016_BGD批量梯度下降求解多元一次方程_使用SGD随机梯度下降计算一元一次方程---人工智能工作笔记0056

然后上面我们用BGD计算了一元一次方程,那么现在我们使用BGD来进行计算多元一次方程 对多元一次方程进行批量梯度下降. import numpy as np X = np.random.rand(100,8) 首先因为是8元一次方程,我们要生成100行8列的X的数据对应x1到x8 w = np.random.randint(1,10,size = (8…

B端企业形象设计的正确姿势,你学会了吗?

如今&#xff0c;企业形象设计在B端市场中变得越来越重要。它是企业与客户之间建立联系的桥梁&#xff0c;也是吸引目标客户的重要方式。为了帮助您打造一个独特而专业的企业形象设计&#xff0c;我将为您提供十个步骤。 步骤1&#xff1a;了解企业定位和目标 在设计B端企业形…

完美解决:Nginx安装后,/etc/nginx/conf.d下面没有default.conf文件

目录 1 问题&#xff1a; 2 解决方法 方法一&#xff1a; 方法二&#xff1a; 3 查看 1 问题&#xff1a; /etc/nginx/conf.d下面没有default.conf文件。 2 解决方法 方法一&#xff1a; 自己创建default.conf文件。 vi /etc/nginx/conf.d/default.conf 添加如下内容&…

恒驰服务 | 华为云数据使能专家服务offering之大数据建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中&#xff0c;存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题&#xff0c;通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容&#xff0c;支撑客户实现快速稳定上云&#xff0c;有效降低时间成本…

js字符串支持多个分隔符分割

js字符串支持多个分隔符分割 场景代码 场景 用户输入内容后&#xff0c;支持多个分隔符&#xff08;比如&#xff1a;中英文逗号&#xff0c;分号以及换号&#xff09;对字符串进行分割&#xff0c;之后提交给后台同学解析。 代码 function splitString(inputString, separat…

「专题速递」数据驱动赋能、赛事直播优化、RTC技术、低延时传输引擎、多媒体处理框架、GPU加速...

点击文末阅读原文&#xff0c; 免费报名【抖音背后的体验增长实战揭秘】专场 随着全行业视频化的演进&#xff0c;营销、知识、商业和空间的交互体验正在被重塑。这种变化不仅仅是一种抽象的趋势&#xff0c;更是关系到用户留存和业务增长的关键因素。面对这样的挑战&#xff0…