Linux 著名的sudo、su是什么?怎么用?

news2024/12/26 11:36:23

一、su

什么是su?

su命令(简称是:substitute 或者 switch user )用于切换到另一个用户,没有指定用户名,则默认情况下将以root用户登录。

为了向后兼容,su默认不改变当前目录,只设置环境变量 HOMESHELL (如果目标用户不是根用户,则加上 USERLOGNAME)。

常用选项

  • -c, --command=[command] :指定执行的命令,然后恢复到原来的用户。

  • -, -l, --login :将shell作为登录shell启动,其环境类似于实际登录。

    1. 清除所有的环境变量,除了 `TERM` 和通过 --whitelist-environment选项指定的变量。
    2. 初始化环境变量:HOME, SHELL, USER, LOGNAM, PATH。
    3. 变更目标用户的家目录。
    4. 设置shell的第一个参数,即argv[0]为 - ,使shell成为登录shell。
    
  • -m, -p, --preserve-environment :保留整个环境变量,例如,不会更新 HOME, SHELL, USER, LOGNAME,此选项与 --login 是互斥的,不要同时使用。

  • -s, --shell=[shell] :切换用户后指定 shell 而不是使用默认 shellshell 使用的顺序如下:

    1. 通过 `--shell` 指定的优先级最高。
    2. 如果 `--preserve-environment` 选项指定了,且设置了 `SHELL` 环境变量,则使用此shell。
    3. 目标用户的passwd条目中列出的shell
    4. 以上都没有,则默认使用 `/bin/sh`
    
  • -w, --whitelist-environment=[list] :环境变量白名单,即如果指定了 --login 时,不会重置白名单中指定的环境变量,但忽略 HOMESHELLUSERLOGNAMEPATHlist 格式通过逗号分隔,

  • -h, --help :打印帮助信息。

  • -V, --version :打印版本信息。

使用实例

  • 切换到普通用户
su - phoenix
或
su phoneix
  • 切换到root用户
su -
或
su
  • 切换用户时指定命令
su -c ls

su -c 'ls -l /home/username' phoenix
切换到普通用户并指定命令,命令指定了选项和参数则用引号引上。
  • 切换的时候指定shell
su -s /usr/bin/zsh
  • 保留环境
su -p phoenix
  • 对于像 Ubuntu 没有root密码,可使用如下方式切到root
sudo su -

su源码

在这里插入图片描述

man pages

在这里插入图片描述

二、sudo

什么是sudo?

sudo简称Super User Do,它允许非root用户运行通常需要超级用户权限的其他Linux命令。

获得root权限的方式

  • 直接使用 ssh root登录到主机
ssh root@[server_domain_or_ip]
  • 使用 su 切换到root用户
su -
  • 使用 sudo 临时获取root权限来执行需要root权限的命令,此时不会产出一个新的shell。
sudo [command]

什么是sudoers?

sudo 的配置文件即为:sudoers,位置在:/etc/sudoers

sudoers 文件指示系统如何处理 sudo 命令(每个 sudo 用户可以做什么)。

什么是/etc/sudoers.d?

/etc/sudoers.d/etc/sudoers 同级配置文件目录,一般情况不建议直接修改 /etc/sudoers 而是在 /etc/sudoers.d 目录下面新建自定义配置文件,配置规则与 /etc/sudoers 相同,此中任何没有以 ~ 结尾的,且不包含 . 的文件会视作正确的配置文件,sudo 会读取所有配置文件追加到 sudo 配置中。

什么是Visudo?

由于 /etc/sudoers 任何语法错误将可能会引起系统崩溃的风险,而使用 visudo 会对配置文件作语法检查,防止配置错误阻塞 sudo 操作。

visudo 默认会使用 vi 作为文本编辑器,也可以配置 visudo 使用的编辑器。

在Ubuntu上配置

sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

通过编号来选择合适的编辑器

在CentOS上配置

export EDITOR=`which [编辑器名称]`
. ~/.zshrc
或 source ~/.zshrc

加载生效

怎么修改sudoers文件?

使用 sudo visudo 会打开 /etc/sudoers 文件

sudoers 权限行解释:

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

#includedir /etc/sudoers.d
  • root表示此规则是给root用户使用的。

  • 第一个 ALL 表示此规则可应用所有的主机。

  • 第二个 ALL 表示root用户可以以所有用户身份执行命令。

  • 第三个 ALL 表示root用户可以以所有用户组身份执行命令。

  • 第四个 ALL 表示root用户可以执行所有命令。

  • %admin,以 % 开头是组名,表示只要用户属于admin组,则可以有以上指定的所有权限。

  • 正常情况以 # 号开头的被视作注释,但此处 #includedir 被解析为引入文件的指令。

怎么授予普通用户sudo权限?

最简单的方式是把用户加入超级权限组

  • 例如在 Ubuntu 上,使用 sudo 组作为超级权限组,则可以把普通用户加入 sudo 组。
sudo usermod -aG sudo [username]

或使用 `gpasswd` 命令

sudo gpasswd -a [username] sudo
  • CentOS 上,通常是使用 wheel 组作为超级权限组。
%wheel ALL=(ALL) ALL

怎么自定义sudoers的规则?

除了使用单个用户或用户组指定一行规则,还可以使用一种称之为别名的方式来分组指定。

  • 用户别名
User_Alias FULLTIMERS = albert, ronald, ann

此处指定了一个用户别名 FULLTIMERS,里面包括三个用户名,分别用逗号隔开,表示里面每一个用户都应用此规则。应用示例如下:

FULLTIMERS ALL=(ALL) ALL
  • 所有者身份别名
Runas_Alias OP = root, operator

此处指定了一个所有者身份别名,OP,里面包括三个用户身份,分别用逗号隔开,表示运行命令后能用OP里面任一身份。应用示例如下:

[username/group] ALL=(OP) ALL
  • 主机别名
Host_Alias PRODSERVERS = master, mail, www, ns

此处指定了一个主机别名 PRODSERVERS,里面包含四个主机名,分别用逗号隔开,表示运行命令能应用与任一主机。应用示例如下:

[username/group] PRODSERVERS=(ALL) ALL
  • 执行的命令别名
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt

此处指定的命令组别名,多个命令用逗号隔开,表示能应用命令组中的任一命令。应用示例如下:

[username/group] ALL=(ALL) POWER
  • 希望允许用户以root权限执行命令而无需输入密码
[username/group] ALL = NOPASSWD: [command] 

如:GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
  • 同时指定无需密码的命令和需要密码的命令
[username/group] ALL = NOPASSWD: [command1], PASSWD: [command2]

如:GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
  • 通过 NOEXEC 限制用户不能执行指定的命令
[username/group] ALL = NOEXEC: /usr/bin/less
  • 取反操作,即除某某之外的意思

示例一

jane ALL = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

以上表示jane可以修改除root之外的任何人的密码

示例二

jen	ALL, !PRODSERVERS = VIEWSHADOW

以上表示jen可以在除PRODSERVERS之外的所有机器上运行VIEWSHADOW命令

sudo常用的选项

  • 指定用户的身份执行命令,需要在配置文件设定好的
sudo -u [username] [command]

sudo -g [groupname] [command]
  • 修改 sudo 密码有效期

sudo 密码有效期默认是5分钟,通过以下配置可设置有效期

Timeout_Spec = [time]

时间格式:超时可以以天、小时、分钟和秒的组合形式指定,并以不区分大小写的单字母后缀表示时间单位。例如,7天8小时30分10秒的超时将写入'7d8h30m10s'。如果指定的数字没有单位,则假定为秒。天、分、小时或秒中的任何一个都可以省略。顺序必须从最大单位到最小单位,一个单位不能指定多次。
  • 延长(验证、刷新有效期) sudo 密码有效期
sudo -v
  • 立即让 sudo 密码过期,终止当前用户的特权
sudo -k
  • 列出当前用户 sudo 配置的权限
sudo -l
  • 重复上一条命令
应用场景:当执行需要 `sudo` 的命令时,忘记输入了 `sudo` 前缀,此处只需 sudo !! 即可
  • 指定重复之前的第几条命令
sudo !6

6是第几条命令
  • 一个有趣的配置
在配置文件中添加如下行
Defaults insults

当密码输错之后,会输出如下信息:

Output
[sudo] password for demo:    # enter an incorrect password here to see the results
Your mind just hasn't been the same since the electro-shock, has it?
[sudo] password for demo:
My mind is going. I can feel it.

sudo 会侮辱用户(假笑):电击之后你的思维就不一样了,是吗?
  • 打印版本号
sudo -V
  • 打印帮助信息
sudo -h-help
  • 在后台运行命令
sudo -b [command]
  • 非交互式运行 sudo,不询问密码
sudo -n [command]
  • 指定运行的shell
sudo -s [command]

如果设置了shell环境变量,-s选项将运行shell指定的shell,或者运行文件passwd中指定的shell。
  • 设置家目录
sudo -H [command]

-H选项将HOME环境变量设置为目标用户的主目录(默认为root),如passwd中指定的。默认情况下,sudo不修改HOME
  • 停止解析命令行参数
sudo -- [command]
  • 在一行运行多个命令
sudo ls; whoami; hostname

多个命令用分号隔开

sudo官网

在这里插入图片描述

看 Sudo Manual、Sudoers Manual、Visudo Manual即可
在这里插入图片描述

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

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

相关文章

记录Ubuntu安装yum报错解决方法

安装问题分析 首先&#xff1a;分析一下&#xff0c;你按照别的博客安装yum出现的的大部分问题&#xff0c;都是说是在软件包里面无法定位yum&#xff0c;如下图一样&#xff0c;想必应该是这样的&#xff01;&#xff01;如果不是这个问题&#xff0c;放心这篇博客也可以帮你解…

可视化场景(9):智慧看板,可能是最直观的数据展示

10年经验的大数据可视化和数字孪生老司机&#xff0c;该领域的专家&#xff0c;是您可信赖的技术合伙人&#xff0c;分享该领域的项目和作品&#xff0c;欢迎互动交流。 hello&#xff0c;我是贝格前端工场&#xff0c;本期分享可视化大屏在安全生产与设备运维场景的应用&#…

【Web】纯萌新的BUUCTF刷题日记Day1

目录 [RoarCTF 2019]Easy Java [网鼎杯 2018]Fakebook [CISCN2019 华北赛区 Day2 Web1]Hack World [BJDCTF2020]The mystery of ip [网鼎杯 2020 朱雀组]phpweb [BSidesCF 2020]Had a bad day [BJDCTF2020]ZJCTF&#xff0c;不过如此 [BUUCTF 2018]Online Tool [GXYCTF…

pringboot2集成swagger2出现guava的FluentIterable方法不存在

错误信息 Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:117) The following method did not ex…

解决Idea导入项目:Unable to import maven project: See logs for details

2019.1版本idea&#xff0c;使用3.9.4版本maven&#xff0c;导入项目出现如下问题&#xff1a; 1.尝试修改配置参数 2.参数修改没有效果&#xff0c;查看具体日志 可以看到如下报错信息 3.解决办法 猜想Maven与IDEA版本不一致导致 由高版本&#xff1a;apache-maven-3.9.4 降…

C++11: 右值引用,移动语义,万能引用,完美转发,新的默认成员函数

C11: 右值引用,移动语义,万能引用,完美转发,新的默认成员函数 一.左值和右值1.左值2.右值3.左值,右值和能否被修改的关系 二.左值引用的好处和局限1.完全解决了传值传参时的深拷贝问题2.传引用返回时需要注意的点1.坑点:传引用返回用值接收2.传引用返回用引用接收3.应该怎么办?…

智慧工厂EMS能效管理解决方案

安科瑞电气股份有限公司 祁洁 15000363176 一、传统工厂现状 1、缺乏顶层设计&#xff0c;智慧化建设碎片化&#xff0c;不成体系&#xff0c;建成即落后。 2、弱电系统、网络、数据中心等基础设施老化&#xff0c;服务感知差。 3、缺乏设备在线监视&#xff0c;无法及时…

Vue+OpenLayers7入门到实战:OpenLayers如何销毁已经创建好的地图容器

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上如何销毁已经创建好的地图容器。 在某些场景下,可能会需要销毁之前的地图,重新创建新的地图的需要,因此本章介绍一下在开始创建地图前如何先销毁之前的地图的功能。…

大数据采集平台-数据采集和集成技术和工具整理|电商实时数据API接口

今天谈下大数据平台构建中的数据采集和集成。在最早谈BI或MDM系统的时候&#xff0c;也涉及到数据集成交换的事情&#xff0c;但是一般通过ETL工具或技术就能够完全解决。而在大数据平台构建中&#xff0c;对于数据采集的实时性要求出现变化&#xff0c;对于数据采集集成的类型…

Unity类银河恶魔城学习记录12-6.5 p128.5 Create item by Craft源代码

此章节在原视频缺失&#xff0c;此过程为根据源代码推断而来&#xff0c;并非原视频步骤 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩…

大创项目推荐 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

HarmonyOS NEXT应用开发之@Observed装饰器和\@ObjectLink装饰器:嵌套类对象属性变化

上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二…

对于Redis,如何根据业务需求配置是否允许远程访问?

1、centos8 Redis安装的配置文件目录在哪里&#xff1f; 在 CentOS 8 中&#xff0c;默认情况下 Redis 的配置文件 redis.conf 通常位于 /etc/ 目录下。确切的完整路径是 /etc/redis.conf。 2、redis如何设置允许远程登录 修改redis.conf文件 # 继承默认注释掉的bind配置 # …

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据&#xff1b; HashMap 是线程不安全的&#xff0c;ConcurrentHashMap 是JUC 下的线程安全的&#xff1b; HashMap 底层…

【前端】CSS(引入方式+选择器+常用元素属性+盒模型+弹性布局)

文章目录 CSS一、什么是CSS二、语法规范三、引入方式1.内部样式表2.行内样式表3.外部样式 四、选择器1.选择器的种类1.基础选择器&#xff1a;单个选择器构成的1.标签选择器2.类选择器3.id 选择器4.通配符选择器 2.复合选择器1.后代选择器2.子选择器3.并集选择器4.伪类选择器 五…

RobotFramework测试框架(12)--第三方库

Library 关于射频指南 |机器人框架 (robotframework.org) 使用RF需要使用Library&#xff0c;常用的第三方库如下&#xff1a; 在web浏览器中进行web应用程序测试可以使用的库是 Selenium Library 在内部使用流行的 Selenium 工具的 Web 测试库Browser Library 由 Playwri…

【vite】-【vite介绍】-【vite的基础应用】-【vite的高级应用】-【

目录 vite介绍vite的基础应用vite创建项目vite创建vue3项目vite创建vue2项目vite创建react项目 vite中使用css的各种功能vite中使用tsvite中处理静态资源的方法vite集成eslint和prettiervite中的env环境变量 vite的高级应用 vite介绍 一、特点&#xff1a; 开发时效率极高开箱…

华为ICT七力助推文化产业新质生产力发展

创新起主导作用的新质生产力由新劳动者、新劳动对象、新劳动工具、新基础设施等四大要素共同构成&#xff0c;符合新发展理念的先进生产力质态&#xff1b;具有高科技、高能效、高质量等三大突出特征。而通过壮大新产业、打造新模式、激发新动能&#xff0c;新质生产力能够摆脱…

QT 使用QMediaPlayer实现的简易视频播放器

文章目录 效果图功能点类介绍代码介绍总结 QT 使用QMediaPlayer实现的简易视频播放器 效果图 功能点 播放指定视频全屏/退出全屏开始/暂停/重置视频拖拽到指定位置播放 类介绍 需要在配置文件中加入Multimedia, MultimediaWidgets这俩个库。Multimedia&#xff1a;提供了一套…

【Qt 学习笔记】Qt 中出现乱码的解释及讨论

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt 中出现乱码的解释及讨论 文章编号&#xff1a;Qt 学习笔记 / 06 文…