iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux命令学习之用户切换su,sudo命令详解
  • 186
分享到

Linux命令学习之用户切换su,sudo命令详解

Linux用户切换susudoLinuxsusudo切换用户 2023-02-08 12:02:09 186人浏览 安东尼
摘要

目录用户切换相关命令1. su命令2. sudo命令赋予用户sudo操作的权限用公式讲解/etc/sudoers的内容公式还要扩充通配符和取消命令开始编辑其他小知识用户切换相关命令 为什么要进行用户切换? 在操作过程中需

目录
  • 用户切换相关命令
  • 1. su命令
  • 2. sudo命令
  • 赋予用户sudo操作的权限
  • 用公式讲解/etc/sudoers的内容
  • 公式还要扩充
  • 通配符和取消命令
  • 开始编辑
  • 其他小知识

用户切换相关命令

为什么要进行用户切换?

在操作过程中需要使用特定的用户进行特定的操作,多数情况下是因为权限,比如要修改一个文件,只有root用户有权限修改,那么就要切换到root用户下进行操作。切换用户一般有两个命令:

1. su命令

su命令不加参数,默认切到root用户,需要输入root用户密码进行验证,

Linux命令学习之用户切换su,sudo命令详解

                                            

Linux命令学习之用户切换su,sudo命令详解

exit命令可退出root用户。

su命令可以加一个“-”再加上用户名,此时,不但身份变化了,同时也拥有了此用户的“用户环境”,比如用户家目录以及此用户的其它个性化设置。

Linux命令学习之用户切换su,sudo命令详解

                                                         

普通用户切换其它用户需要知道其它用户的密码,root用户使用su命令切换其它用户,不需要知道用户密码

Linux命令学习之用户切换su,sudo命令详解

2. sudo命令

linux是多用户多任务的操作系统, 共享该系统的用户往往不只一个。
出于安全性考虑, 有必要通过useradd创建一些非root用户, 只让它们拥有不完全的权限; 如有必要,再来提升权限执行。

sudo就是来解决这个需求的: 这些非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令。

执行sudo -u <用户名> <命令>, 将允许当前用户,提权到<用户名>的身份,再执行后面的<命令>, 即使<命令>原本需要root权限。
提权到<用户名>身份时,是以<用户名>的身份来执行命令的,因此创建的文件默认属于<用户名>用户。

因此,当userB执行如下命令时:

sudo -u userA touch /tmp/belong-to-who.tmp

创建的/tmp/belong-to-who.tmp 文件属于用户userA。

如果不带-u, 则默认使用root用户,而大多数时候sudo都是要提权到root的,所以-u <用户名>可以省略为:

sudo <命令>

需要注意的是: 执行sudo时输入的密码是当前用户的密码, 并非<用户名>的密码。
sudo -u <用户名>su - <用户名>相比:
前者需要输入当前用户的密码,提权到<用户名>身份执行命令后返回当前用户;
后者则是输入目标用户的密码,切换到目标用户。

赋予用户sudo操作的权限

通过useradd添加的用户,并不具备sudo权限。在ubuntu/Centos等系统下, 需要将用户加入admin组或者wheel组或者sudo组。

以root用户身份执行如下命令, 将用户加入wheel/admin/sudo组:

usermod -a -G wheel <用户名>

如果提示wheel组不存在, 则还需要先创建该组:

groupadd wheel

用公式讲解/etc/sudoers的内容

sudo的权限控制可以在/etc/sudoers文件中查看到。

如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时不需要输入密码,就需要对该文件有所了解。

一般来说,通过cat /etc/sudoers指令来查看该文件, 会看到如下几行代码:

root   ALL=(ALL:ALL) ALL
%wheel ALL=(ALL) ALL
%sudo  ALL=(ALL:ALL) ALL

/etc/sudoers文件进行编辑的代码公式可以概括为:

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...

凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔;

为了方便说明, 将公式的各个部分称呼为字段1 - 字段5:

授权用户/组 主机  =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1      字段2  =[(字段3)] [字段4] 字段5

字段3、字段4,是可以省略的。

在上面的默认例子中, "字段1"不以%号开头的表示"将要授权的用户", 比如例子中的root
%号开头的表示"将要授权的组", 比如例子中的%wheel组 和 %sudo组。

"字段2"表示允许登录的主机, ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令. 比如:

jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown

表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令。"字段3"和"字段4"省略。

"字段3"如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)

请注意,"字段3"如果没省略,必须使用( )双括号包含起来。这样才能区分是省略了"字段3"还是省略了"字段4"。

"字段4"的可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码。比如:

lucy ALL=(ALL) NOPASSWD: /bin/useradd

表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码.

又比如:

peter ALL=(ALL) NOPASSWD: ALL

表示: 普通用户peter可以在任何主机上, 通过sudo执行任何命令, 并且不需要输入密码。

"字段5"是使用逗号分开一系列命令,这些命令就是授权给用户的操作; ALL表示允许所有操作。

你可能已经注意到了, 命令都是使用绝对路径, 这是为了避免目录下有同名命令被执行,从而造成安全隐患。

如果你将授权写成如下安全性欠妥的格式:

lucy ALL=(ALL) chown,chmod,useradd

那么用户就有可能创建一个他自己的程序, 也命名为userad, 然后放在它的本地路径中, 如此一来他就能够使用root来执行这个"名为useradd的程序"。这是相当危险的!

命令的绝对路径可通过which指令查看到: 比如which useradd可以查看到命令useradd的绝对路径: /usr/sbin/useradd

公式还要扩充

例子1:

papi ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd

表示: 用户papi能在所有可能出现的主机上, 提权到root下执行/bin/chown, 不必输入密码; 但运行/usr/sbin/useradd 命令时需要密码.

这是因为NOPASSWD:只影响了其后的第一个命令: 命令1.

上面给出的公式只是简化版,完整的公式如下:

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1, [(字段3)] [字段4] 命令2, ...

在具有sudo操作的用户下, 执行sudo -l可以查看到该用户被允许和被禁止运行的命令.

通配符和取消命令

例子2:

papi ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk

用例子2来说明通配符*的用法, 以及命令前面加上!号表示取消该命令。

该例子的意思是: 用户papi在所有可能出现的主机上, 能够运行目录/usr/sbin和/sbin下所有的程序, 但fdisk除外.

开始编辑

“你讲了这么多,但是在实践中,我去编辑/etc/sudoers文件,系统提示我没权限啊,怎么办?”

这是因为/etc/sudoers的内容如此敏感,以至于该文件是只读的。所以,编辑该文件前,请确认清楚你知道自己正在做什么。

强烈建议通过visudo命令来修改该文件,通过visudo修改,如果配置出错,会有提示。

不过,系统文档推荐的做法,不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目录下的文件中。

如果使用这种方式修改sudoers,需要在/etc/sudoers文件的最后行,加上#includedir /etc/sudoers.d一行(默认已有):

#includedir /etc/sudoers.d

注意了,这里的指令#includedir是一个整体, 前面的#号不能丢,并非注释,也不能在#号后有空格。

任何在/etc/sudoers.d/目录下,不以~号结尾的文件和不包含.号的文件,都会被解析成/etc/sudoers的内容。

文档中是这么说的:

# This will cause sudo to read and parse any files in the /etc/sudoers.d
# directory that do not end in '~' or contain a '.' character.
# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.
# Note also, that because sudoers contents can vary widely, no attempt is
# made to add this directive to existing sudoers files on upgrade.
# Finally, please note that using the visudo command is the recommended way
# to update sudoers content, since it protects against many failure modes.

其他小知识

输入密码时有反馈

当使用sudo后输入密码,并不会显示任何东西 —— 甚至连常规的星号都没有。有个办法可以解决该问题。

打开/etc/sudoers文件找到下述一行:

Defaults env_reset

修改成:

Defaults        env_reset,pwfeedback

修改sudo会话时间

如果你经常使用sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用再输入密码就可以运行几次sudo命令。
但是一段时间后,sudo 命令会再次要求你输入密码。默认是15分钟,该时间可以调整。添加timestamp_timeout=分钟数即可。
时间以分钟为单位,-1表示永不过期,但强烈不推荐。

比如我希望将时间延长到1小时,还是打开/etc/sudoers文件找到下述一行:

Defaults env_reset

修改成:

Defaults        env_reset,pwfeedback,timestamp_timeout=60

到此这篇关于Linux命令学习之用户切换su,sudo的文章就介绍到这了,更多相关Linux用户切换su,sudo内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

--结束END--

本文标题: Linux命令学习之用户切换su,sudo命令详解

本文链接: https://www.lsjlt.com/news/195122.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux命令学习之用户切换su,sudo命令详解
    目录用户切换相关命令1. su命令2. sudo命令赋予用户sudo操作的权限用公式讲解/etc/sudoers的内容公式还要扩充通配符和取消命令开始编辑其他小知识用户切换相关命令 为什么要进行用户切换? 在操作过程中需...
    99+
    2023-02-08
    Linux用户切换su sudo Linuxsu sudo切换用户
  • Linux基础命令---切换用户su
    su临时切换身份到另外一个用户,使用su切换用户之后,不会改变当前的工作目录,但是会改变一些环境变量。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 1、语法su&...
    99+
    2023-06-05
  • Linux的su、sudo、sudo su、sudo -i命令怎么用
    这篇文章主要介绍了Linux的su、sudo、sudo su、sudo -i命令怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的su、sudo、sudo su、sudo -i命令怎么用文章都会有...
    99+
    2023-06-27
  • 【Linux学习】Linux必备命令之cp命令详解
    cp命令是Linux中的一个常用命令,用于将文件或目录复制到指定位置。下面是关于cp命令的一些详细解释和用法:1. 命令格式:cp ...
    99+
    2023-09-09
    Linux
  • Linux系统中su和sudo命令的用法
    这篇文章主要介绍“Linux系统中su和sudo命令的用法”,在日常操作中,相信很多人在Linux系统中su和sudo命令的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统中su和sudo命令...
    99+
    2023-06-12
  • 学习Linux命令之history
    这篇文章将为大家详细讲解有关学习Linux命令之history,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言你们有没有在使用linux开发时执行了很长的一条命令,然后过了一会要想在执行这条命令就需要重...
    99+
    2023-06-06
  • linux切换用户用什么命令
    这篇文章主要讲解了“linux切换用户用什么命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux切换用户用什么命令”吧!linux切换用户的命令是“su”,该命令可以实现任何身份的切...
    99+
    2023-06-20
  • 面试必问Linux 命令su和sudo的区别解析
    目录1. 准备工作2. su 命令介绍及主要用法2.1 - 参数2.2 切换到指定用户2.3 -c 参数3. s...
    99+
    2024-04-02
  • linux系统怎么用命令切换用户
    这篇文章主要讲解了“linux系统怎么用命令切换用户”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux系统怎么用命令切换用户”吧!我装的是虚拟机,首先打开虚拟机在桌面上右击,选择打开终...
    99+
    2023-06-13
  • su命令切换用户输入密码后,提示:鉴定故障
    在终端通过su命令切换用户输入密码后,提示:鉴定故障。这是因为在安装linux系统时未设置root用户密码造成的,需要重新设置密码后再切换用户。具体操作命令如下: 设置root用户密码 sudo passwd root 切换用户 su - ...
    99+
    2023-09-02
    linux 服务器
  • linux命令之crontab详解
    crontab 提交和管理用户的需要周期性执行的任务 更多linux命令详解:linux命令在线工具 Linux 教程:VitePress编写的Linux教程 补充说明 crontab命令 被用来提交和管理用户的需要周期性执行的任务,与wi...
    99+
    2023-08-18
    linux 服务器 运维 调度 crontab
  • Linux系统中的切换用户命令总结
    这篇文章主要讲解了“Linux系统中的切换用户命令总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中的切换用户命令总结”吧!#1:runuser命令runuser命令使用一个...
    99+
    2023-06-12
  • Linux最狠命令sudo rm -rf /* 详细解释
    sudo rm -rf /*是使用管理员(root)权限删除电脑中的一切东西(包括可移动设备中的文件) 接下来,我们把这条命令拆分开解释一下 sudo是使用管理员(root)权限执行命令,在命令前加sudo会要求输入root密码,由于Lin...
    99+
    2023-09-01
    linux 运维 服务器
  • 【linux命令讲解大全】156. Linux用户组管理命令详解
    文章目录 groupdel补充说明语法参数示例 groupmod补充说明语法选项参数 从零学 `python` groupdel 用于删除指定的工作组。 补充说明 grou...
    99+
    2023-10-08
    linux 网络 运维
  • 怎么免sudo使用docker命令详解
    这篇文章主要介绍怎么免sudo使用docker命令详解,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景docker是paas供应商dotcloud开源的一个基于lxc 的高级容器引擎,源代码托管在 github 上...
    99+
    2023-06-07
  • 如何学习和理解Linux命令
    这篇文章主要为大家展示了“如何学习和理解Linux命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何学习和理解Linux命令”这篇文章吧。1. ls命令首先ls命令,指列出目录内容(List...
    99+
    2023-06-16
  • Apifox Echo学习curl httpie 命令使用详解
    目录正文 curlcurl --requestcurl --headcurl --includecurl --verbosecurl --locationhttpie &a...
    99+
    2024-04-02
  • Linux命令之mkdir 和 touch详解
    目录mkdir什么是 mkdir 命令?如何使用 mkdir 命令?举例说明常用选项参数例子touch什么是 touch 命令?如何使用 touch 命令?举例说明常用选项参数总结mkdir 什么是 mkdir 命令? ...
    99+
    2023-06-07
    Linux命令 mkdir touch Linux mkdir Linux touch
  • Linux系统之dd命令详解
    Linux系统之dd命令详解 一、dd命令介绍1.dd介绍2.dd的相关解释 二、创建指定大小的文件三、给磁盘的分区做备份1.磁盘分区备份2.磁盘分区还原 四、清空磁盘五、给磁盘备份1...
    99+
    2023-09-25
    linux 运维 服务器
  • Linux常用命令详解
    系列文章目录 Linux 环境搭建以及xshell远程连接_crazy_xieyi的博客-CSDN博客   ls       该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目...
    99+
    2023-09-01
    python 开发语言 linux java 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作