我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux使用Sudo委派权限

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux使用Sudo委派权限

sudo权限委派介绍

  • su 切换身份:su –l username –c ‘command'
  • sudo
  • 来自sudo包
  • man 5 sudoers
  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使  用 sudo,会提示联系管理员
  • sudo可以提供日志,记录每个用户使用sudo操作
  • sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
  • sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
  • 通过visudo命令编辑配置文件,具有语法检查功能 :
  •               visudo –c 检查语法
                  visudo -f /etc/sudoers.d/test

sudo

  • 配置文件:/etc/sudoers, /etc/sudoers.d/
  • 时间戳文件:/var/db/sudo
  • 日志文件:/var/log/secure
  • 配置文件支持使用通配符glob: 
  • ?:任意单一字符
    *:匹配任意长度字符
    [wxc ] 匹配其中一个字符
    [!wxc] 除了这三个字符的其它字符
    \x : 转义
    [[alpha]] :字母 示例: /bin/ls [[alpha]]*
  • 配置文件规则有两类: 
  • 1、别名定义:不是必须的 
      2、授权规则:必须的

sudoers

  • 授权规则格式: 
  • 用户 登入主机=(代表用户) 命令
  • 示例:
  • root ALL=(ALL) ALL
  • 格式说明:
  • user: 运行命令者的身份 
  •  host: 通过哪些主机 
      (runas):以哪个用户的身份  
      command: 运行哪些命令

别名

  • Users和runas:
  • username 
         #uid 
        %group_name 
        %#gid 
        user_alias|runas_alias
  • host: 
  • ip或hostname 
  • network(/netmask)
        host_alias
  • command: 
  • command name 
      directory 
      sudoedit 
      Cmnd_Alias

最近,我编写了一个简短的Bash程序,将MP3文件从一个网络主机上的USB拇指驱动器复制到另一个网络主机上。这些文件被复制到我为志愿者组织运行的服务器上的一个特定目录,从那里可以下载和播放这些文件。

我的程序还做了一些其他的事情,比如在文件被复制之前更改它们的名称,以便它们在网页上按日期自动排序。它还删除USB驱动器上的所有文件,验证传输是否正确完成。这个不错的小程序有几个选项,例如-h为了展示帮助,-t用于测试模式,以及其他几个。

尽管我的程序非常出色,但它必须作为root运行才能执行其主要功能。不幸的是,这个组织只有少数人对管理我们的音频和计算机系统有兴趣,这使我能够找到半技术人员,并训练他们登录到用于执行传输和运行这个小程序的计算机中。

这并不是说我不能亲自运行这个项目,而是由于各种原因,包括旅行和生病,我并不总是在那里。即使在我在场的时候,作为“懒惰的系统管理员”,我也喜欢让别人为我做我的工作。因此,我编写脚本来自动化这些任务,并使用sudo来指定几个用户来运行这些脚本。许多linux命令要求用户是root用户才能运行。这可以保护系统免受意外损坏,比如我自己的愚蠢和恶意用户的故意破坏。

做你做得很好的事

sudo程序是一个方便的工具,它允许我作为一个具有根访问权限的系统管理员,将所有或几个管理任务的责任委托给计算机的其他用户。它允许我在不损害根密码的情况下执行该委托,从而在主机上保持高度的安全性。

例如,让我们假设我给了常规用户“ruser”对我的Bash程序“myprog”的访问权限,它必须作为root运行才能执行其部分功能。首先,用户使用自己的密码以ruser身份登录,然后使用以下命令运行myprog。

 myprog  

sudo程序检查/etc/sudoers文件并验证ruser是否允许运行myprog。如果是这样的话,sudo请求用户输入他们的密码-而不是根密码。在ruser输入密码后,程序将运行。此外,sudo用程序运行的日期和时间、完整的命令以及运行它的用户记录对myprog的访问事实。此数据已登录。/var/log/security.

我发现让sudo运行每个命令的日志来进行培训是很有帮助的。我能看出谁做了什么,他们是否正确地输入了命令。

我这样做是为了授权我自己和另一个用户运行一个程序;然而,sudo可以用来做更多的事情。它允许sysadmin将管理网络功能或特定服务的权限委托给一个人或一组受信任的用户。它允许在保护根密码安全性的同时委派这些函数。

配置sudoers文件

作为一个系统管理员,我可以使用/etc/sudoers文件以允许用户或用户组访问单个命令、定义的命令组或所有命令。这种灵活性是使用sudo进行委托的力量和简单性的关键。

一开始我发现sudoers文件非常混乱,所以下面我从我使用它的主机复制并解构了整个sudoers文件。希望当你通过这个分析的时候,它对你来说不会很模糊。顺便说一句,我发现基于RedHat的发行版中的默认配置文件往往有大量的注释和示例来提供指导,这使事情变得更简单,减少了在线搜索的需求。

不要使用标准编辑器修改sudoers文件。使用visudo命令,因为它的设计目的是在保存文件并退出编辑器后立即启用任何更改。除了Vi之外,还可以使用与visudo.

让我们从一开始就用几种别名来分析这个文件。

宿主别名

主机别名部分用于创建可用于提供访问的命令或命令别名的主机组。其基本思想是为组织中的所有主机维护这个单一文件,并将其复制到/etc每一个主人。因此,可以将某些主机(如服务器)配置为一个组,使某些用户能够访问特定的命令,例如启动和停止httpd、DNS和网络等服务的能力;挂载文件系统的能力等等。

可以在主机别名中使用IP地址而不是主机名。


## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 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.
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# 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
User_Alias AUDIO = dboth, ruser
## Command Aliases
## These are groups of related commands...
## 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
# Refuse to run if unable to disable echo on the tty.
Defaults  visiblepw
Defaults  env_reset
Defaults  env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE 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:usrsbin:usrbin:usrlocalbin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##   user  MACHINE=COMMANDS
## The COMMANDS section may have other options added to it.
## Allow root to run any commands anywhere
root  =ALL    ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
wheel =ALL    ALL
## Same thing without a password
# %wheel    ALL=(ALL)    NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
############################################################
# Added by David Both to provide limited access to myprog #
############################################################
AUDIO  guest1=usrlocalbinmyprog

默认sudoers文件,修改为粗体。

用户别名

用户别名配置允许根将用户排序为别名组,以便整个组能够访问特定的根功能。这是我添加了一行的部分。User_Alias AUDIO = dboth, ruser,它定义了别名音频,并为该别名分配了两个用户。

如sudoers文件中所述,可以简单地使用/etc/groups文件而不是别名。如果您已经在其中定义了一个满足您需要的组,如“audio”,请使用该组名,前面是%这样的标志:%audio在为sudoers文件后面的组分配将可用的命令时。

命令别名

在sudoers文件的下面是一个命令别名部分。这些别名是相关命令的列表,例如安装更新或新的RPM包所需的网络命令或命令。这些别名允许sysadmin轻松地允许访问命令组。

本节中已经设置了许多别名,这些别名可以方便地将访问委托给特定类型的命令。

环境缺省

下一节将设置一些默认环境变量。本节中最有趣的项目是!visiblepw行,如果用户环境设置为显示密码,则阻止sudo运行。这是一种不应被推翻的安全防范措施。

指挥部分

命令部分是sudoers文件的主要部分。通过在这里添加足够的条目,您需要做的每一件事都可以在没有所有别名的情况下完成。化名只会让事情变得简单多了。

本节使用您已经定义的别名告诉sudo谁可以在哪个主机上做什么。当您理解本节中的语法时,这些示例是不言自明的。让我们看看我们在命令部分中找到的语法。

ruser =ALL ALL

这意味着ruser可以像任何用户一样在任何主机上运行任何程序。

这是我们的用户,ruser的通用条目。第一ALL在行中,指示此规则适用于所有主机。第二ALL允许ruser像其他用户一样运行命令。默认情况下,命令以根用户的身份运行,但ruser可以在sudo命令行上指定程序以其他用户的身份运行。最后一次ALL意味着ruser可以不受限制地运行所有命令。这将有效地使ruser根。

注意,根有一个条目,如下所示。这使得根用户可以对所有主机上的所有命令进行全方位的访问。

root =ALL ALL

这意味着root可以任何用户的身份在任何主机上运行任何程序。

为了尝试这一点,我注释掉了行,并作为根用户,尝试在没有sudo的情况下运行chown。那确实奏效了-真让我吃惊。然后我用sudo chown这个消息失败了,“根不在sudoers文件中,这个事件将被报告。”这意味着root可以root的身份运行所有东西,但在使用sudo命令时则不能运行。这将防止root用户以其他用户的身份通过sudo命令,但是root有很多方法可以绕过这个限制。

下面的代码是我为控制对myprog的访问而添加的代码。它指定在音频组中列出的用户,如在sudoers文件顶部定义的那样,只能访问一个主机上的一个程序myprog,即guest 1。

AUDIO guest1=usrlocalbinmyprog

允许音频组中的用户访问主机用户1上的myprog。

请注意,上述行的语法仅指定允许此访问的主机和程序。它没有指定用户可以像其他用户一样运行程序。

绕过密码

您也可以使用NOPASSWORD允许组音频中指定的用户运行myprog,而不需要输入他们的密码。以下是如何:

AUDIO guest1=NOPASSWORD : usrlocalbinmyprog

允许音频组中的用户访问主机用户1上的myprog。

我没有为我的程序这么做,因为我认为拥有sudo访问权限的用户必须停下来思考他们正在做什么,这可能会对此有所帮助。我以我的小程序的条目为例。

wheel

sudoers文件的命令部分中的轮规范(如下图所示)允许“wheel”组中的所有用户在任何主机上运行所有命令。wheel组定义在/etc/group文件,并且必须将用户添加到组中才能工作。%组名称前面的签名意味着sudo应该在/etc/group档案。

wheel ALL = ALL ALL

允许作为“wheel”组成员的所有用户,如/etc/group文件,可以在任何主机上运行所有命令。

这是一种将完全根访问委托给多个用户的好方法,而无需提供根密码。只需将用户添加到wheel组中,就可以让他们访问完全的根权限。它还提供了一种通过sudo创建的日志条目监视其活动的方法。某些发行版(如Ubuntu)将用户ID添加到/etc/group,它允许他们使用sudo命令,用于所有特权命令。

最后思想

我在这里使用sudo是为了一个非常有限的目标-为一两个用户提供访问单个命令的权限。我用两行(如果您忽略我自己的评论)来完成这一任务。将执行某些任务的权限委托给没有根访问权限的用户是很简单的,并且可以节省您作为系统管理员的大量时间。它还生成可以帮助检测问题的日志条目。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux使用Sudo委派权限

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

下载Word文档

猜你喜欢

Linux使用Sudo委派权限

sudo权限委派介绍su 切换身份:su –l username –c ‘command'sudo来自sudo包man 5 sudoerssudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使 用 sudo,会提示联系管理
2022-06-04

Centos下用户权限委派配置的示例分析

这篇文章主要介绍Centos下用户权限委派配置的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Centos(Linux)下用户权限委派配置介绍说到权限委派,对于一个服务的正常运行至关重要,对于企业中经常说到的
2023-06-10

Linux用户如何配置sudo权限

这篇文章将为大家详细讲解有关Linux用户如何配置sudo权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。sudo的工作过程如下:1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判
2023-06-09

Linux 下sudo网络权限详解

Linux 下sudo网络权限详解 对于设置了网络代理的服务器,在当前用户下执行网络访问没有问题,但通过sudo执行命令时,就会出现“无网络连接”的错误。背景对于设置了网络代理的服务器,在当前用户下执行网络访问没有问题,但通过sudo执行命
2022-06-04

Linux用户配置sudo权限(visudo)的方法

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

如何进行linux sudo权限配置

本篇文章给大家分享的是有关如何进行linux sudo权限配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 这里记录一下linux的sudo简单配置过程,备后查。
2023-06-06

Linux中如何对用户授权和移除sudo权限

小编给大家分享一下Linux中如何对用户授权和移除sudo权限,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如你所知,用户可以在 Ubuntu 系统上使用 sud
2023-06-27

windows中怎么让活动目录域加入域权限委派

windows中怎么让活动目录域加入域权限委派,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。加入域的时候打算用委派的方式, 可是没有 找到 "将计算机加入域"这
2023-06-14

如何在Linux环境为用户添加sudo权限

sudo的配置文件sudo默认配置文件是**/etc/sudoers** ,一般使用Linux指定编辑工具visudo ,此工具的好处是可以进行错误检查。在添加规则不符合语法规则时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授
2022-06-03

怎么查看Linux哪些用户拥有sudo权限

本篇内容主要讲解“怎么查看Linux哪些用户拥有sudo权限”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么查看Linux哪些用户拥有sudo权限”吧!1. 前言本教程将讲解如何查看Linux
2023-06-16

怎么在Linux中配置sudo访问权限

这篇文章将为大家详细讲解有关怎么在Linux中配置sudo访问权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是 sudo?sudo 是一个程序,普通用户可以使用它以超级用户或其他用户的身份执行命令
2023-06-16

Linux 下sudo网络权限的示例分析

这篇文章主要介绍了Linux 下sudo网络权限的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linux 下sudo网络权限详解对于设置了网络代理的服务器,在当前用
2023-06-09

linux中Sudo授权命令的使用方法

linux中Sudo授权命令的使用方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一种方案:su root -c "你要执行的命令"其实是切换用户,由当前用户切换至root
2023-06-12

Linux下普通用户用sudo su给自己加root权限的方法

首先: sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令是switch user,切换用户,你sudo su这个命令的意思是用root的权限来切换到()用户。你根本没有指定用户,当然切换
2022-06-04

如何分析Linux服务器权限管理中的sudo高级应用

这篇文章的内容主要围绕如何分析Linux服务器权限管理中的sudo高级应用进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!在Linux系统中普通用户要
2023-06-28

Linux 用户权限

用户权限 1、访问权限2、chmod 命令3、chown 命令4、chgrp命令5、权限掩码6、lsattr 命令7、chattr命令8、文件的特别权限suid权限set位权限粘滞位权限(Sticky) 9、ACL访问控制列表s
2023-08-24

Linux中如何使用sudo

小编给大家分享一下Linux中如何使用sudo,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!sudo 机制可以让你轻松以普通用户偶尔执行管理任务。你可能一直想了解
2023-06-16

Linux的UMASK权限怎么使用

本篇内容主要讲解“Linux的UMASK权限怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux的UMASK权限怎么使用”吧!在linux系统中,我们创建一个新的文件或者目录的时候,
2023-06-27

编程热搜

目录