#每日一记#linux 为普通用户配置sudo权限
  

sailyang 4559

{{ttag.title}}
一.关于sudo
​        sudo命令提供了一种机制,它可以在不用分享 root 用户的密码的前提下,为信任的用户提供系统的管理权限。他们可以执行大部分的

管理操作,但又不像 root一样有全部的权限。sudo是一个程序,普通用户可以使用它以超级用户或其他用户的身份执行命令,是由安全

策略指定的。sudo 用户的访问权限是由/etc/sudoers文件控制的。

二.sudo的工作过程
​        当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限

​        确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认

​        若密码输入成功,则开始执行sudo后续的命令

​        root执行sudo时不需要输入密码(sudoers文件中有配置root ALL=(ALL) ALL这样一条规则)

​        若欲切换的身份与执行者的身份相同,也不需要输入密码

三.为普通用户配置sudo权限
​        执行visudo命令等价于执行vim /etc/sudoers命令,但是在保存退出时,visudo会检查内部语法,避免用户输入错误信息,所以推荐使

用visudo。另外执行visudo命令需要root权限。为普通用户配置sudo权限有两种方法,下面逐一介绍。

3.1 方法一:把普通用户的附属组更改为wheel,使其具有sudo权限(推荐)
1.wheel是基于RHEL的系统中的一个特殊用户组,它提供额外的权限,可以授权用户像超级用户一样执行受到限制的命令。

#系统以及默认创建好这个用户组了
[root@node5 ~]# grep wheel /etc/group
wheel:x:10:
2.首先要保证/etc/sudoers文件中的“%wheel        ALL=(ALL)        ALL”这一行不被注释

[root@node5 ~]# cat /etc/sudoers
#确保/etc/sudoers文件中“%wheel        ALL=(ALL)        ALL”这一行不被注释
## Allows people in group wheel to run all commands
%wheel        ALL=(ALL)        ALL
## Same thing without a password
# %wheel        ALL=(ALL)        NOPASSWD: ALL
3.更改nginx用户的附属组为wheel,使nginx用户具有sudo权限

#nginx用户是已经创建好的用户
[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx)

#更改nginx用户的附属组为wheel
[root@node5 ~]# usermod -aG wheel nginx

[root@node5 ~]# id nginx
uid=8000(nginx) gid=8000(nginx) groups=8000(nginx),10(wheel)

[root@node5 ~]# grep wheel /etc/group
wheel:x:10:nginx

[root@node5 ~]# su - nginx
Last login: Wed Oct 28 16:48:36 CST 2020 on pts/0

#使用nginx用户是查看不了/etc/shadow文件的
[nginx@node5 ~]$ tail -f /etc/shadow
tail: cannot open ‘/etc/shadow’ for reading: Permission denied
tail: no files remaining

#使用nginx用户是查看不了/etc/shadow文件的,但是前面加上sudo之后,输入nginx密码就可以查看/etc/shadow文件了
[nginx@node5 ~]$ sudo tail -f /etc/shadow
[sudo] password for nginx:
rpc:!!:18023:0:99999:7:::
rpcuser:!!:18023::::::
nfsnobody:!!:18023::::::
tss:!!:18341::::::
stick6$yKQtTFMB$YszPx1AOZQfV91stJ4NXmR/DoLU2DjluS5uycrFexU4.yMCw7kjkyQYKIF7UcE4PPCAsM.QyKaDIAgOY6zbrn/:18550:0:99999:7:::
www:!!:18557:0:99999:7:::
自此,nginx具有了sudo权限。

3.2 方法二:修改/etc/sudoers文件,使普通用户具有sudo权限
1.在/etc/sudoers文件中,有“root        ALL=(ALL) ALL”这一行,在此行下添加类似的一行即可,把www用户添加进去就具有了sudo权限。对于“root ALL=(ALL) ALL”这一行,现在解释下意思:第一个ALL是指网络中的主机,第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令,最后一个ALL当然就是指命令名了。

[root@node5 ~]# id www
uid=8003(www) gid=8003(www) groups=8003(www)

#把www用户添加到/etc/sudoers文件中
#意思是www这个用户,可以使用所有的命令
#但是如果只想某个用户具有某个命令的sudo权限,可以这样设置:putong  ALL=(ALL)       /usr/bin/systemctl,这样设置的话putong这个用户只有执行systemctl命令的时候才会具有sudo权限
[root@node5 ~]# cat /etc/sudoers
## Allow root to run any commands anywhere
root        ALL=(ALL)         ALL
www     ALL=(ALL)       ALL

[root@node5 ~]# su www

#www不具有查看/etc/shadow的权限
[www@node5 root]$ tail -f /etc/shadow
tail: cannot open ‘/etc/shadow’ for reading: Permission denied
tail: no files remaining

#www不具有查看/etc/shadow的权限,但是加上sudo就可以查看文件内容了
[www@node5 root]$ sudo tail -f /etc/shadow

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for www:
rpc:!!:18023:0:99999:7:::
rpcuser:!!:18023::::::
nfsnobody:!!:18023::::::
tss:!!:18341::::::
www6$EOuaJn9t$Qpm5GszWdDZ.dGP/GVcTzbzyeLpFqi9Zg84UmAGjnUtBb9QGV0KI7pRJGN6NiRnNvBTEKwVxjmu2Spn6l5dH6/:18564:0:99999:7:::


#例如,我们想让Daniel用户在linux主机上以jimmy或rene的身份执行kill命令,可以这样编写配置文件:
Daniel   linux=(jimmy,rene)    /bin/kill
#但这还有个问题,Daniel到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。 Daniel可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID。
四./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 (perhaps 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/bin/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

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
# 一些环境变量的相关配置,具体情况可见man soduers
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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

## 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 用户 登录的主机=(可以变换的身份) 可以执行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项
##
## 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中户组中的用户使用NETWORKING等所有别名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS

## Allows people in group wheel to run all commands
## 允许wheel用户组中的用户执行所有命令
%wheel        ALL=(ALL)        ALL

## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel        ALL=(ALL)        NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 允许users用户组中的用户关闭localhost这台服务器
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 读取放置在/etc/sudoers.d/文件夹中的文件(此处的#不意味着这是一个

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

一一氵 发表于 2020-11-12 10:03
  
感谢分享
小鱼儿 发表于 2023-8-23 10:51
  
每天学习一点点,每天进步一点点
唐三平 发表于 2023-8-23 10:51
  
每天学习一点点,每天进步一点点
鲤鲤 发表于 2023-8-23 10:57
  
每天学习一点点,每天进步一点点
小西北 发表于 2023-8-23 10:58
  
每天学习一点点,每天进步一点点
小德 发表于 2023-8-23 11:05
  
每天学习一点点,每天进步一点点
日出 发表于 2023-8-23 11:05
  
每天学习一点点,每天进步一点点
德德 发表于 2023-8-23 11:21
  
每天学习一点点,每天进步一点点
飞飞侠 发表于 2023-8-23 11:22
  
每天学习一点点,每天进步一点点
发表新帖
热门标签
全部标签>
安全效果
西北区每日一问
技术盲盒
技术笔记
干货满满
【 社区to talk】
每日一问
信服课堂视频
GIF动图学习
新版本体验
技术咨询
2023技术争霸赛专题
功能体验
产品连连看
自助服务平台操作指引
标准化排查
秒懂零信任
技术晨报
安装部署配置
原创分享
排障笔记本
玩转零信任
排障那些事
SDP百科
技术争霸赛
深信服技术支持平台
通用技术
以战代练
升级&主动服务
社区新周刊
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
高频问题集锦
POC测试案例
全能先锋系列
云化安全能力

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人