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

Linux用户权限——sudoers的深入剖析文章详细介绍了 Linux 系统中 sudo 权限的配置方法 包括通过编辑 etc sudoers 文件来管理用户权限 以及如何使用 sudo sudo su 和 sudo s 命令

大家好,欢迎来到IT知识分享网。

一、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.

[root@s142 etc]# visudo -s

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/115693.html

(0)
上一篇 2024-11-17 16:26
下一篇 2024-11-17 16:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信