Linux用户权限——sudoers的深入剖析

这篇具有很好参考价值的文章主要介绍了Linux用户权限——sudoers的深入剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、sudo权限的配置

        root账号登录系统不会记录root账号做了什么操作。

        su虽然不记录以root执行了哪些命令,但会创建一条日志记录谁在什么时候变成了root。而su切换为root身份,仍然有很大的无法受控的权限,因此sudo是一个更好的选择。

        sudo命令的意思是以其他用户身份执行命令,用户是否拥有sudo权限?拥有哪些权限?sudo执行时是否需要输入密码?这些都是通过/etc/sudoers文件进行配置和控制的。普通用户我们可以通过su命令切换到其他用户,但是需要知道其他用户的密码,如果是需要执行管理员命令则需要知道root密码。但是如果普通用户拥有sudo权限则可以只需要输入自己密码或者不输入密码完成管理员命令的执行。既保证了超级管理员的密码的安全性,又满足了普通用户执行特殊命令的需求,这就是/etc/sudoers文件的作用。

1. 编辑 sudo权限 命令

visudo
visudo 命令实际修改的是  /etc/sudoers 文件

2. /etc/sudoers 配置文件说明

[root/etc]# cat /etc/sudoers

[root@s142 etc]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或  
## ## 用户组所使用  
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using 
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
 
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
# User_Alias ADMINS = jsmith, mikem
 
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
 
## Networking
#网络操作相关命令别名  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
 /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
 /sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名  
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
...
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以执行的命令  
##

## Allow root to run any commands anywhere
## 允许root在任何地方运行任何命令
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software, service management apps and more.
## 允许“sys”用户组的成员运行 网络、软件、服务管理应用等命令。
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
## 允许“wheel”用户组的成员运行所有命令
%wheel  ALL=(ALL)       ALL

## Allows people in group wheel to run all commands without a password
## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the cdrom as root
## 允许“users”组的成员运行 挂载、卸载光盘的命令
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 允许“users”组的成员在本机运行 /sbin/shutdown -h now 命令
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 读取 /etc/sudoers.d 目录下所有文件的内容作为配嵌入到此配置文件
## 注意,下面的 # 后面并不是注释
#includedir /etc/sudoers.d

为用户配置sudo权限

[用户名]    [被管理主机的IP]=([可以使用的身份])   [NOPASSWD: ][授权的命令]
[被管理主机的IP][可以使用的身份][授权的命令] 都可以使用  ALL 来表示不限制。
添加  [NOPASSWD: ] 选项可以使用户在使用sudo权限时不需要输入密码。
[授权的命令]要使用绝对路径,多条命令之间可用逗号( ,)分隔。
  • 例:
## Allow root to run any commands anywhere
## 允许root在任何地方运行任何命令
root    ALL=(ALL)       ALL

为用户组配置sudo权限

%[组名]    [被管理主机的IP]=([可以使用的身份])   [NOPASSWD: ][授权的命令]
[被管理主机的IP][可以使用的身份][授权的命令] 都可以使用  ALL 来表示不限制。
添加  [NOPASSWD: ] 选项可以使用户在使用sudo权限时不需要输入密码。
用户组 与 用户 的唯一区别是用户组前有个  %
  • 例:
## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码
%wheel        ALL=(ALL)       NOPASSWD: ALL

3. 注意事项

1) 赋予用户sudo权限时一定要谨慎,够用即可,不要赋予过高的权限

2) [授权的命令] 设置得越具体,用户获得的权限越小。

3) 严禁赋予普通用户 /usr/bin/passwd/usr/bin/vi/usr/bin/su/usr/bin/bash 命令的权限,拥此权限的用户可以修改root用户密码,然后为所欲为。

4) 权力越大,责任越大。

二、sudo 命令介绍

1. sudo [命令]:以 root 身份来执行命令

用户必须有相应命令的sudo权限

例子

  • 普通用户使用 less 命令查看 root 用户的历史命令
[vagrant~]$ sudo less /root/.bash_history
cat report.md | grep -v ID | awk '$4 >= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 <= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 == 100 {print $2}'
sed -n '2p' report.md
sed -n '2,4p' report.md
sed '2,4d' report.md
cat -n report.md
sed '1a Begin' report.md
sed '1i Begin' report.md
sed '1a Begin' report.md
sed '1a End' report.md
sed '1c Hello World' report.md
sed '5c Hello World' report.md
... 省略 ...

2. sudo su:切换到root用户

用户必须有 /usr/bin/su命令的sudo权限
一旦切换成功,用户可以以root身份执行任何命令

例子

  • 普通用户使用 sudo su 命令切换到 root 用户,然后修改root用户的密码
[vagrant/tmp]$ sudo su

[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

3. sudo -s <shell>:切换到root用户的shell

可以不加  <shell>,会使用默认 shell
用户必须有相应shell命令的sudo权限,例如  /usr/bin/bash
一旦切换成功,用户可以以root身份执行任何命令

例子

  • 普通用户使用 sudo -s /usr/bin/bash 命令切换到 root 的shell,然后修改root用户的密码
[vagrant/tmp]$ sudo -s /usr/bin/bash

[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
  • 可以不加 <shell>,会使用默认 shell
[vagrant/tmp]$ sudo -s

[root/tmp]# exit

4. sudo -l:列出目前用户可用的sudo权限的指令

例子

[vagrant~]$ sudo -l
...省略部分内容...
用户 vagrant 可以在本机上运行以下命令:
    (ALL) /usr/bin/bash, /usr/bin/su, /usr/bin/less

三、sudo权限的应用

1. 授权普通用户可以重启服务器

  • 执行 visudo,然后添加如下内容
user1 ALL=(ALL) /sbin/shutdown -r now
  • 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
    (ALL) /sbin/shutdown -r now

2. 授权普通用户可以添加其他用户

功能分析

要想添加其他用户,必须拥有添加用户和设置密码的权限,即 /usr/sbin/useradd 和 /usr/bin/passwd 两个命令的sudo权限

若用户完全拥有 /usr/bin/passwd 的sudo权限,则可以通过 sudo passwd 命令或者 sudo passwd root 命令修改 root 密码,这样就会变得非常不安全。

因此,需要严格限制用户对 /usr/bin/passwd 的权限:

user ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root

/usr/bin/passwd [A-Za-z]* 表示 passwd 命令后附加的第一个字符只能是大小写字母。 
!/usr/bin/passwd "" 表示 passwd 命令后不能什么都不加。 
!/usr/bin/passwd root 表示 passwd 命令后不能加 root。

三条语句的缺一不可,且顺序不能颠倒。

实例

  • 执行 visudo,然后添加如下内容
user1   ALL=(ALL)    /usr/sbin/useradd
user1   ALL=(ALL)    /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
  • 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
    (ALL) /usr/sbin/useradd
    (ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
  • 添加用户user2,并为其设置密码
[user1@10 ~]$ sudo useradd user2

[user1@10 ~]$ sudo passwd user2
更改用户 user2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[user1@10 ~]$ grep user2 /etc/passwd
user2:x:1006:1007::/home/user2:/bin/bash
  • 尝试以 passwd 和 passwd root 两种方式修改 root 用户的密码,全部失败
[user1@10 ~]$ sudo passwd
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd。

[user1@10 ~]$ sudo passwd root
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd root。
  • 添加用户2_user,尝试为其设置密码,失败。因为 /usr/bin/passwd [A-Za-z]* 决定 passwd 命令后附加的第一个字符只能是大小写字母。
[user1@10 ~]$ sudo useradd 2_user

[user1@10 ~]$ sudo passwd 2_user
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd 2_user。

四、visudo命令简介

1、使用语法
用法:
#visudo [-chqsV] [-f sudoers]

2、参数说明
参数    参数说明
-c, --check    检查sudoers配置文件
-f, --file=sudoers    修改sudoers配置文件
-h, --help    获取命令帮助
-q, --quiet    静默输出
-s, --strict    严格语法检查
-V, --version    查看命令版本
四、visudo命令使用示例
1、查看命令版本
[root@s142 ~]# visudo -V
visudo version 1.8.23
visudo grammar version 46

2、获取命令帮助
[root@s142 ~]# visudo -h
visudo - safely edit the sudoers file

3、检查sudoers文件
[root@s142 ~]# visudo -c
/etc/sudoers: parsed OK

4、修改sudoers文件
[root@s142 ~]# cd /etc/
[root@s142 etc]# visudo -f sudoers

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.

5、严格执行语法检查编辑
  实际上我们可以直接编辑/etc/sudoers文件,直接编辑不会进行语法检查。使用visudo -s可以执行sudoers文件的编辑,编辑国产中实际编辑的是/etc/sudoers.tmp文件,编辑完成后必须wr保存后才会存入sudoers文件。保存前会进行语法检查,如果语法检查失败,会进程错误提示,告知是哪一行有语法错误。如果强制保存会有危险。这就是visudo方式编辑sudo文件的好处。

[root@s142 etc]# visudo -s

Linux用户权限——sudoers的深入剖析文章来源地址https://www.toymoban.com/news/detail-418534.html

到了这里,关于Linux用户权限——sudoers的深入剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux添加root权限:is not in the sudoers file解决方法

    Linux添加root权限:is not in the sudoers file解决方法 当我们使用sudo命令切换用户的时候可能会遇到提示以下错误:用户名 is not in the sudoers file. 原因 当前的用户没有加入到sudo的配置文件里 解决方案 文件保存报错 使用:wq保存/etc/sudoers文件报错(不能保存只读文件):Linux:reado

    2024年02月13日
    浏览(49)
  • Linux中配置sudo用户访问权限

    一、如何在 Linux 中配置 sudo 的访问权限 1.1、添加一个Linux普通用户有 sudo 权限 1.2、测试普通用户的 sudo 权限 1.3、添加多个Linux普通用户有 sudo 权限 1.4、验证sudo 权限

    2024年02月13日
    浏览(47)
  • linux 为普通用户配置sudo权限

    目录 一.关于sudo 二.sudo的工作过程 三.为普通用户配置sudo权限 3.1 方法一:把普通用户的附属组更改为wheel,使其具有sudo权限(推荐) 3.2 方法二:修改/etc/sudoers文件,使普通用户具有sudo权限 四./etc/sudoers配置文件详解 sudo命令提供了一种机制,它可以在不用分享 root 用户的密

    2024年02月04日
    浏览(47)
  • Linux-系统中用户不在sudoers文件中--is not in the sudoers file. This incident will be reported

    报错提示:“is not in the sudoers file. This incident will be reported” 这里涉及到了系统中普通用户提权的一个过程,有时候当前用户会利用 sudo su 命令来进行提权,但是究竟有哪些用户可以来进行提权呢?这里涉及到了一个 /etc/sudoers路径下的 文件,这里面保存了一些用户,这些用户

    2024年02月16日
    浏览(45)
  • Linux 从入门到精通: “用户不在 sudoers 文件中,此事将被报告“ 问题处理

    Linux 系统操作作为后端开发必须掌握的技术之一,已经越来越多的成为我们工作的一部分。初入职场、首次接触 Linux,面对满屏的操作命令,谁又不会怀念 windows 的界面呢。不过慢慢的就会发现用命令行敲击起来还是蛮爽的,毕竟我们可以\\\"咔咔咔咔\\\"的敲击键盘来证明我们那

    2024年02月07日
    浏览(53)
  • [Linux 应用笔记] sudoers文件配置

    Linux的/etc/sudoers文件主要用来配置用户是否可以使用sudo权限以及是否需要输入密码,一般不会直接修改/etc/sudoers文件而是在/etc/sudoers.d目录下创建一个单独的配置文件 1. 配置用户(jack)可以使用sudo权限     sudoers文件的配置必须使用root权限,可以从普通用户切换至root用户、也

    2024年02月16日
    浏览(37)
  • Deepin/UOS Linux 配置普通用户 sudo 权限 的两种方式

    Deepin/UOS Linux 配置普通用户 sudo 权限 的两种方式 root 用户下 配置 普通用户 sudo 权限 echo \\\"zhangsan ALL=(ALL:ALL) NOPASSWD: ALL\\\" /etc/sudoers root 用户下 配置 普通用户 到 sudo 组下 vim /etc/sudoers 修改下面这一行 改为 然后修改 /etc/group 改为 也是阔以的 我们下期见,拜拜!

    2024年02月16日
    浏览(46)
  • Linux下的sudo及其配置文件/etc/sudoers详细配置

    这篇文章主要介绍了详解Linux下的sudo及其配置文件/etc/sudoers的详细配置的相关资料,需要的朋友可以参考下。 1.sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了

    2024年02月06日
    浏览(88)
  • Linux中普通用户使用sudo命令提示lin is not in the sudoers file. This incident will be reported.

    在使用Linux的过程中我们 普通用户使用sudo 可能遇到这样的提示 pp is not in the sudoers file. This incident will be reported. 这一问题原因是因为 etc 文件中的 sudoers 这个文件中没有这个用户 我们可以按照下面操作进行修改【 以下操作都用英文模式下操作,切记 】 使用root用户登录进来

    2024年01月23日
    浏览(48)
  • 深入剖析Linux——进程信号

    致前行的人:                 要努力,但不着急,繁花锦簇,硕果累累都需要过程! 目录 1.信号概念 1.1生活角度的信号 2. 技术应用角度的信号 3.Linux操作系统中查看信号 4.常用信号发送 4.1通过键盘发送信号 4.2调用系统函数发送信号 4.3硬件异常产生信号 4.4软件条件产生信

    2024年02月01日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包