一.关于sudo

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

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

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

二.sudo的工作过程

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

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

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

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

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

三.为普通用户配置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::::::
stick:$6$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::::::
www:$6$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/文件夹中的文件(此处的#不意味着这是一个声明)
#includedir /etc/sudoers.d

参考链接:

https://blog.csdn.net/a19881029/article/details/18730671

linux 为普通用户配置sudo权限的更多相关文章

  1. Linux中普通用户配置sudo权限(带密或免密)

    配置步骤如下: 1.登陆或切换到root用户下: 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件:vi /etc/sudoers 找到这 ...

  2. Linux用户配置sudo权限

    Linux用户配置sudo权限 创建sudo权限用户 #useradd supope #passwd supope #visudo #supope         ALL=(ALL)       AL ...

  3. Linux设置普通用户无密码sudo权限

    配置普通用户无密码sudo权限: root用户进入到Linux系统的/etc目录下 cd /etc 将sudoers文件赋予写的权限 chmod u+w /etc/sudoers 编辑sudoers文 ...

  4. blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...

  5. blfs(systemv版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/8.3/ ...

  6. Linux用户配置sudo权限(visudo)

    sudo的工作过程如下: 1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认 ...

  7. 数据仓库003 - 复习Linux shell命令 - 用户用户组 sudo 权限 du-sh find 

    一.用户用户组 [root@localhost ~]# ll /usr/sbin/user* -rwxr-x--- root root -- /usr/sbin/useradd -rwxr-x--- ...

  8. Linux给用户添加sudo权限

    一.linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file.  This incident will be ...

  9. Linux系统下给非root用户添加sudo权限

    Linux系统下给非root用户添加sudo权限 有时,在linux系统中非root用户运行sudo命令,会提示类似信息:  xxx is not in the sudoers file. This ...

  10. Linux中给普通用户添加sudo权限

    使用Linux系统时,经常会被要求使用超级权限,但是root的权限太过大了,一般慎用!!!因此可以通过给普通用户添加sudo权限,平常用普通用户进行操作,当需要root权限的时候进行sudo操作.以下 ...

随机推荐

  1. Numpy广播功能

    广播(Broadcast)是对不同形状(shape)的数组进行数值计算的方式. 广播规则: 如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1: 如果两个数组的形状在任何一个维度都不匹配 ...

  2. 【译】如何在 Visual Studio 中安装 GitHub Copilot

    GitHub Copilot 简介 GitHub Copilot 是一个新工具,可以帮助您在人工智能的帮助下更快,更智能地编写代码.它可以建议代码补全,生成代码片段,甚至为您编写整个函数.GitHub ...

  3. 一种新的姿势:程序try/catch抛出异常之绕过canary pwn121

    一种新的姿势:程序try/catch抛出异常之绕过canary 我前面发了不少关于绕过canary的姿势,先总结一下,现在绕过canary的姿势有泄露,爆破,格式化字符串绕过,多线程劫持TLS绕过, ...

  4. CentOS6.4中yum命令安装php5.2.17[转载未亲测]

    最近给公司部署服务器的时候发现他们提供的服务器是centos6.4系统的,装好系统和相关服务httpd,mysql,php,一跑代码,发现php5.3中的zend加密不能用,安装Zend Guard ...

  5. Launching Teamviewer remotely through SSH

    Launching Teamviewer remotely through SSH When you need to manage your Server remotely, but you can ...

  6. 免费报表工具零代码零基础轻松搞定 web 报表

    话说,能制作清单式报表的方式有千千万: 骨灰级的 Excel 控,如果能轻车熟路驾驭 VBA,也能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选手: 传说中的编程控,只要需求明确没什么做不了的 ...

  7. kkfileview搭建实战

    kkfileview可以与nginx搭建的文件服务器配合实现预览工作,也可以通过自身的文件系统机制免搭建nginx文件服务器来实现预览工作. nginx 创建nginx # 创建初始容器,获得容器内部 ...

  8. 【笔记】报错:numeric or value error: character to number conversion error

    报错:numeric or value error: character to number conversion error 报错如下: 数据库操作错误."2327,13619/v1:65 ...

  9. KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力

    简介: 在这篇博文中,我们将简要解释需要考虑的领域,KEDA 如何使应用自动伸缩变得简单,以及为什么阿里云企业分布式应用服务(EDAS)在 KEDA 上完全标准化. 联合作者 | Yan Xun,阿里 ...

  10. dotnet C# 使用 Vortice 支持 Direct2D1 离屏渲染

    本文告诉大家如何使用 Vortice 进行 D2D 的离屏渲染功能,本文将在一个纯控制台无窗口的应用下,使用 Direct2D1 进行离屏绘制,将绘制结果保存为本地图片文件 本文属于使用 Vortic ...