Linux中的sudoer详解

目录

  • Linux中的sudo详解

    • 一、引言
    • 二、格式
    • 三、/etc/sudoers文件
    • 四、sudoers文件讲解
    • 五、其他

Linux中的sudo详解

一、引言

Liunx用户只有两类:

  • 管理员用户---root
  • 普通用户--其他

我们在学习sudo命令之前,肯定学习过su(switch user)命令,su命令是用来切换用户身份的命令,而sudo命令是一种切换用户来执行某种操作的命令

su和sudo的区别:

  • su命令的主要作用是让你可以在已经登录的会话中切换到另外一个用户,换句话说,这个工具可以让你在不登出当前用户的情况下,登录另外一个用户。
  • sudo命令的主要作用是允许特定的用户以root用户或其他用户的身份执行命令。

二、格式

sudo的作用刚才已经讲了,就是允许去以的身份去执行命令

所以这里加粗的三个部分是关键,这里的配置首先需要我们以root用户去修改/etc/sudoers文件,修改该文件我们使用visudo命令(命令行直接写visudo,回车即可),它使用一个vi编辑器去打开sudoers文件,并且会帮我们检查语法错误。非常有用。

user1 ALL=(ALL)  ALL

#我们来说一下这一行的配置的意思
#user1 表示该用户user1可以使用sudo命令,第一个ALL指的是网络中的主机(可以是主机名也可以是ip地址),它指明user1用户可以在此主机上执行后面命令;第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL是指命令路径。

user1 localhost=(root)  /bin/kill
#表示user1用户可以在本地以root的身份去执行kill命令

#注意: 命令必须是完整的路径

三、/etc/sudoers文件

[[email protected] ~]# 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
#环境变量的相关配置
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR                         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME                         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION                         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC                         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS                         _XKB_CHARSET XAUTHORITY"
## 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 ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## 允许wheel用户组中的用户执行所有命令
## 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=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令

四、sudoers文件讲解

1、sudoers文件主要有三部分组成:

  • sudoers的默认配置(default),主要设置sudo的一些缺省值
  • alias(别名),主要有Host_Alias|Runas_Alias|User_Alias|Cmnd_Alias。
  • 安全策略(规则定义)——重点

2、各部分详细解析

  • Default部分

    Defaults   !visiblepw
    
    #
    # Preserving HOME has security implications since many programs
    # use it when searching for configuration files. Note that HOME
    # is already set when the the env_reset option is enabled, so
    # this option is only effective for configurations where either
    # env_reset is disabled or HOME is present in the env_keep list.
    #
    Defaults    always_set_home
    Defaults    match_group_by_gid
    
    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"
    
  • 主机别名

    主机别名主要是用来创建主机分组,授予该组主机可以访问哪些命令或命令别名,它的基本思想是,该文件由组织中的所有主机共同维护,然后拷贝到每台主机中的/etc中,其中有些主机,例如各种服务器,可以配置一个组来赋予用户访问特定命令的权限。比如可以启停类似HTTPD、DNS以及网络服务;可以挂载系统等等。

    ## 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   HOST1 = host1, host2
    Host_Alias   HOST2 = host3,host4
    Host_Alias   HOST1 = host1,host2  HOST2=host3,host4
    ##其中第7行等价于第5、6行的写法。
  • 用户别名

    用户别名允许root将多个用户整理成一组中,并按组来分配目标用户的权限。这部分是可选的,定义的时候是User_Alias group1=user1,user2使用的时候是%group1。我们也可以直接使用/etc/groups中定义的组而不用自己设置的别名。

    ## 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 group1 = user1, user2
  • 目标别名
    Runas_Alias ex1=item_list
  • 命令别名

    就是将一部分命令进行归类,方便系统管理员有效分配权限。

    ## 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, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
    
    ## Updating the locate database
    # Cmnd_Alias LOCATE = /usr/bin/updatedb
    
    #Command Aliases
    ## These are groups of related commands...
    ## Command Aliases
    ## These are groups of related commands...
    SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
    # 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
    
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
  • 安全策略(用户规则)

    语法规则:

    User_List Host_List=(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List
    #User_List(必填项):指的是该规则是针对哪些用户的
    #Host_List(必填项):指的是该规则针对来自哪些主机的用户
    #Runas_List1(可选项):表示可以用sudo -u来切换的用户
    #Runas_List2(可选项):表示可以用sudo -g来切换的用户组
    #SELinux_Spec(可选项):表示SELinux相关的选项,可选值为ROLE=role或TYPE=type。本人对SELinux不太熟,以后再补充这里吧
    #Tag_Spec(可选项):用于控制后面Cmnd_List的一些选项,可选值有下面这些
    'NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:'|'MAIL:'|'NOMAIL:'|
    
    ###注意####
    ##如果Runas_Alias和Runas_Alias都没填的话,默认是以root用户执行

    案例1:

    user01  localhost=(root)  NOPASSWD:/bin/more
    #user1用户可以在本机上无密码执行/usr/local/bin/python

    案例2:

    user01  localhost=(root)  NOPASSWD:/bin/more PASSWD:/bin/less
    #user1用户可以在本机上无密码执行/usr/local/bin/python,有密码执行kill命令

    案例3:

    user01 localhost=(root) NOPASSWD:/usr/bin/passwd,!/usr/bin/passwd root
    #user01用户可以执行passwd程序,但是不能修改root密码,在命令前面加上叹号表示不能执行该程序。

    **尝试修改root的用户密码,失败,然后尝试修改user02的密码,成功。

五、其他

通配符只可以用在主机名、文件路径、命令行的参数列表中。下面是可用的通配符:

*:匹配任意数量的字符

?:匹配一个任意字符

[...]:匹配在范围内的一个字符

[!...]:匹配不在范围内的一个字符

\x:用于转义特殊字符

在使用通配符时有以下的注意点:

1.使用[:alpha:]等通配符时,要转义冒号‘:‘,如:[:alpha:]

2.当通配符用于文件路径时,不能跨‘/‘匹配,如:/usr/bin/*能匹配/usr/bin/who但不能匹配/usr/bin/X11/xterm

3.如果指令的参数列表是""时,匹配不包含任何参数的指令。

4.ALL这个关键字表示匹配所有情况。

原文地址:https://www.cnblogs.com/yanling-coder/p/10947157.html

时间: 2024-08-03 21:36:24

Linux中的sudoer详解的相关文章

Linux中pam认证详解(下)

Linux中pam认证详解(下) 在上一篇中详细的介绍了pam的介绍.pam认证原理.pam认证构成以及pam验证控制类型,下面向大家详细介绍一下常用的pam服务模块,以及pam认证的应用. 一.常用的pam服务模块 下面是Linux提供的PAM模块列表(只是其中一部分),这其中包含模块文件.模块功能描述和相关配置文件,具体如下: pam_access 提供logdaemon风格登录控制 /etc/security/access.conf pam_chroot 提供类似chroot命令的功能 p

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

linux中ls命令详解

s 命令可以说是linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节点的修改时间,并以此排序.-d 将目录象文件一样显示,而不是显示其下的文件.-e 输出时间的全部信息,而不是输出简略信息.-f -U 对输出的文件不排序.-g 无用.-i 输出文件的 i 节点的索引信息.-k 以 k 字节的形式表示文件的大小.-l 列出文件的详细信息.-m 横向输出文件名

【转】linux中inittab文件详解

原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. init程序需要读取配置文件/etc/inittab.inittab是一个不可执行的文本文件,它有若干行指令所组成. 理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬

Linux中rm命令详解

linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是断开了链接,原文件保持不变. rm命令的一般形式为:rm [选项]... 目录... 删除指定的<文件>(即解除链接). -d      --directory    删除可能仍有数据的目录 (只限超级用户) -f      --force          略过不存在的文件,

Linux中用户管理详解

一.原理了解 在Linux系统中,所有的用户和组像一个国家.如果国家要繁荣昌盛的话,需要治理得当,需要有主席或者总统,以及地方官员和老百姓组成.在linux中如果你对安全需求比较苛刻,完全可以限制用户的各种行为,不同用户的权限是不同的. 在linux中系统中,它并不认识帐号名称.它认识的是我们的帐号ID,帐号ID保存在/etc/passwd文件中.我们在登录linux主机时,在输入完帐号和密码时,linux会先查找/etc/passwd文件中是否有这个帐号,如果没有则跳出,如果有的话,他会读取该

linux中find命令详解

http://blog.csdn.net/pipisorry/article/details/39831419 问题: linux中find命令查找时不包含某些目录 find 命令忽略某个或多个子目录的方法 在linux中用find 进行查找的时候,有时候需要忽略某些目录不查找,可以使用 -prune 参数来进行过滤,要忽略的路径参数必须紧跟着搜索的路径之后,否则该参数无法起作用. eg: [email protected]:/tmp1#find ./ -type f    #/tmp1目录下所

Linux中的sed详解

Sed简介 Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行.Sed工作是在"模式空间"中进行的并不操作源文件.对源文件无危害. Sed使用格式 sed [-nefri] 'command' 输入文本 sed使用参数 -n 使用安静(silent)模式.在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e 直接在命令列模式上进行 sed

linux中inittab文件详解

init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. init程序需要读取配置文件/etc/inittab.inittab是一个不可执行的文本文件,它有若干行指令所组成. 理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没有固定的信息来表示runlevel,它纯粹是一种软件结构.init和inittab是runlevel影响系统状态的唯一原因