2019独角兽企业重金招聘Python工程师标准>>>

文件的组成

sudoers文件由三部分组成:

  • sudoers的默认配置,主要设置sudo的一些缺省值(本文不会对这些默认配置进行介绍,若有兴趣可以自己man 5 sudoers然后搜defaults)
  • alias(别名),可以看作是变量的定义啦,本文也会全面的说说别名的定义。
  • 规则定义,sudoers文件的重点啦,本文会着重说明规则的定义。

Alias(别名)

一共有四种类型的别名,这些类型可以看作它们是数据类型啦哈。

  • User_Alias
  • Runas_Alias
  • Host_Alias
  • Cmnd_Alias

那么要如何定义这些Alias呢?语法如下:

User_Alias NAME=User_ListRunas_Alias NAME=Runas_ListHost_Alias NAME=Host_ListCmnd_Alias NAME=Cmnd_List

这里的NAME就可以看作是变量名咯。注意,NAME必须是要以大写字母开头,而且只能包含有大写字母,数字,下划线呢。那么User_List,Runas_List,Host_List,Cmnd_List又是什么呢?其实就是以“,"分隔的一个数组啦,只不过这四个别名表示的数组内容都会不同啦。

现在分别看看User_List,Runas_List,Host_List,Cmnd_List的每个数组元素可以是些什么值吧!

User:[!][username |#uid |%groupname | +netgroup |%:nonunix_group | User_Alias]Runas:[!][username|#uid | %groupname | +netgroup |Runas_Alias]Host:[!][hostname | ip_addr | network(/netmask)? |  netgroup | Host_Alias]Cmnd:[!][commandname| directory| "sudoedit" | Cmnd_Alias]

看看上面的元素名就可以知道大概什么意思了吧?这里着重拿些可能有疑问的出来说说。

叹号'!'表示取反的意思啦。

每个元素都可以是之前定义过的别名变量啦,所以会有User_List,Runas_List,Host_List,Cmnd_List这些元素啦。

directory表示有可以进入该目录并执行命令的权限啦

"sudoedit"表示允许用户使用sudo -e选项。

如果还没搞懂的话,可以看下面的别名定义的例子:

User_Alias USER_TEST=tim,#501,%svn,+webgroup,%:nonunix,!nouserRunas_Alias RUNAS_TEST=tim,#501,%svn,!+webgroupHost_Alias HOST_TEST=!www.baidu.com,localhost,127.0.0.1Cmnd_Alias CMND_TEST=Cmnd_Alias CMDS=/bin/passwd,/bin/ls,/home/svn

User Specification(用户规则)

用户规则定义的语法如下:

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的一些选项啦,可选值有下面这些,具体自己man一下吧,这里就不啰嗦了。

'NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:'

...(可选项):表示可以有多个(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List段的意思了。

Notice:如果Runas_List1和Runas_List2都没填的话,默认是以root用户执行

如果不是很理解的话,可以对比着文章后面举的例子来看下,应该难不倒聪明的我们!

sudoers文件下的通配符

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

*:匹配任意数量的字符

?:匹配一个任意字符

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

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

\x:用于转义特殊字符

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

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

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

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

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

man sudoers下的例子解析

 # 用户别名定义User_Alias     FULLTIMERS = millert, mikef, dowdyUser_Alias     PARTTIMERS = bostley, jwfox, crawlUser_Alias     WEBMASTERS = will, wendy, wim#用户切换别名定义Runas_Alias    OP = root, operatorRunas_Alias    DB = oracle, sybaseRunas_Alias    ADMINGRP = adm, oper#主机别名定义Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\SGI = grolsch, dandelion, black :\ALPHA = widget, thalamus, foobar :\HPPA = boa, nag, PythonHost_Alias     CUNETS = 128.138.0.0/255.255.0.0Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0Host_Alias     SERVERS = master, mail, www, nsHost_Alias     CDROM = orion, perseus, hercules#指令别名定义Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\/usr/sbin/restore, /usr/sbin/rrestoreCmnd_Alias     KILL = /usr/bin/killCmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprmCmnd_Alias     SHUTDOWN = /usr/sbin/shutdownCmnd_Alias     HALT = /usr/sbin/haltCmnd_Alias     REBOOT = /usr/sbin/rebootCmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \/usr/local/bin/tcsh, /usr/bin/rsh, \/usr/local/bin/zshCmnd_Alias     SU = /usr/bin/suCmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

#开始定义规则

#root用户及wheel用户组下的所有用户都可以从任何主机连接进来以任意身份执行任意命令

root           ALL = (ALL) ALL
%wheel         ALL = (ALL) ALL

#FULLTIMERS这个用户别名中定义的用户可以从任何主机连接进来以任意身份执行任意命令,而且在切换用户或用户组时不需要输入密码

 FULLTIMERS     ALL = NOPASSWD: ALL

#PARTTIMERS这个用户别名中定义的用户可以从任何主机连接进来以root身份执行任意命令。

PARTTIMERS     ALL = ALL

#The user jack may run any command on the machines in the CSNETS alias (the networks 128.138.243.0, 128.138.204.0, and 128.138.242.0).  Of those
       #networks, only 128.138.204.0 has an explicit netmask (in CIDR notation) indicating it is a class C network.  For the other networks in CSNETS,
      # the local machine’s netmask will be used during matching.

jack           CSNETS = ALL

#lisa这个用户可以从CUNETS中定义的主机连接进来以root身份执行任意指令。

 lisa           CUNETS = ALL

#oprator这个用户可以从任何主机连接进来以root身份执行DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,sudoedit /etc/printcap, /usr/oper/bin/定义的指令

 operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\sudoedit /etc/printcap, /usr/oper/bin/

#joe这个用户可以从任何主机连接进来,并且只能执行su operator指令

joe            ALL = /usr/bin/su operator

#pete这个用户可以从HPPA定义的主机中连接进来并以root身份执行passwd的所有命令,除了passwd root

pete           HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

#opers这个用户组下的所有用户可以从任何主机连接进来,并可以切换至ADMINGRP中定义的用户组进入/usr/sbin并执行命令

 %opers         ALL = (: ADMINGRP) /usr/sbin

#bob这个用户可以从SPARC和SGI中定义的主机连接进来,并可以OP定义的用户执行任意指令

 bob            SPARC = (OP) ALL : SGI = (OP) ALL

#jim这个用户可以从biglab这个netgroup中连接进来,并执行任意指令

jim            +biglab = ALL

#secretaries这个netgroup下的所有用户可以从任意主机连接进来,并以root身份执行PRINTING,/usr/bin/adduser, /usr/bin/rmuser中定义的指令

 %secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

#fred这个用户可以从任何主机连接进来并以DB别名定义的用户来执行所有指令,并且不需要输入密码

fred           ALL = (DB) NOPASSWD: ALL

#john这个用户可以从ALPHA定义的主机中连接进来,并可以以root身份执行su指令,但不能执行su root和使用任何su选项

john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

#jen这个用户可以从任何主机(除了SERVERS中定义的主机)连接进来,并以root身份执行任意指令

#jill这个用户可以从SERVERS定义的主机连接进来,并以root身份进入/usr/bin/执行指令,但不能执行SU和SHELLS中定义的命令

jill           SERVERS = /usr/bin/, !SU, !SHELLS

#steve这个用户可以从CSNETS中定义的主机连接进来,并以operator这个用户可以进入/usr/local/op_commands/执行指令

 steve          CSNETS = (operator) /usr/local/op_commands/

转载于:https://my.oschina.net/ososchina/blog/867400

Linux sudoers文件的写法相关推荐

  1. linux sudoers文件损坏修复

    sudoers文件损坏修复--失败 教训:不要轻易修改这个文件 要有visudo不成功 pkexec visudo -f /etc/sudoers 使用su能进入root 重启ubuntu,随即长按s ...

  2. [Linux] - xxx 不在 sudoers 文件中。此事将被报告。

    redhat系统: linux中创建用户命令为:useradd 用户名, eg: useradd test 指定密码:passwd test 但是有时候我们需要使用test运行执行一些root用户才有 ...

  3. linux篇---解决 Linux 系统,出现“不在sudoers文件中,此事将被报告”的问题

    解决 Linux 系统,出现"不在sudoers文件中,此事将被报告"的问题 我在使用个人用户(非root用户)时,在添加用户,使用sudo命令来执行的时候,需要验证当前用户的密码 ...

  4. 解决Linux 系统,出现不在sudoers 文件中,此事将被报告的问题

    出现原因 注:只是其中一个原因 Linux 在其他用户下,使用sudo 命令创建文件,sudo touch 1.txt [go_test@localhost ~]$ sudo touch 1.txt ...

  5. Linux sudo命令报错:用户不在sudoers文件中

    Linux普通用户如果需要使用sudo以暂时获取root权限,需要在/etc/sudoers文件中添加用户的权限配置,具体步骤如下(以CentOS 7.2示例): 例如:以test用户获取sudo权限 ...

  6. 【Linux】(用户不在sudoers文件中……) 添加用户到sudoers

    [Linux](用户不在sudoers文件中--) 处理这个问题应该先理解其原理再操作 首先要明白root的密码一般用户是不应改知道的,但一般用户有时可能要用到root的一些权限. 这里就有了一个 / ...

  7. Linux sudo命令和sudoers文件

    一.sudo命令的作用 sudo命令的作用是临时提升当前用户的权限,以使用只有目标用户才能使用的命令,并在命令使用结束后恢复到当前用户权限.最常见的是用来临时使用root才能执行的命令. su的作用是 ...

  8. Linux之用户不在 sudoers 文件中。此事将被报告。

    这个问题是我在用普通用户安装软件包时遇到的.这里分享一下. 问题场景 [fenghx@localhost ~]$ sudo yum install freetds我们信任您已经从系统管理员那里了解了日 ...

  9. linux显示不在sudoers文件中,Ubuntu无法使用sudo提权提示当前用户不在sudoers文件中...

    Ubuntu安装后默认root不能登陆系统,密码也是随机生成,其他用户使用root权限,可以使用sudo提权,前提是该用户在/etc/sudoers配置列表中. 但是有时用户名从/etc/sudoer ...

最新文章

  1. Python基础学习笔记--字符串、列表
  2. 带卷积核二分类网络的输出是不是有方向的?
  3. python中点的作用_一分钟了解Python中“*”的作用
  4. c++11中的智能指针
  5. java csf_WebService CSF使用详解 | 学步园
  6. 解决margin塌陷的问题_解决margin塌陷与margin合并(margin)清除浮动问题
  7. C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)
  8. UVA - 213 Message Decoding
  9. jPList – 实现灵活排序和分页功能的 jQuery 插件
  10. open cv+C++错误及经验总结(十四)
  11. .Net Remoting与Web Service
  12. 获取全国所有省份,市区县的中文名和英文名
  13. 笑着学Spring - (3) - Spring事务管理
  14. 拾叶集 文/江湖一剑客
  15. API的理解和使用——全局命令
  16. font-spider压缩web font字体
  17. 西瓜书习题4.3 决策树
  18. 端口碰撞Port Knocking和单数据包授权SPA
  19. python 会计应用软件_下列关于会计核算软件记账功能的说法中,正确的有(  )。...
  20. MAP一个KEY多个value处理方法

热门文章

  1. asp php 用户登录,一个简单的asp.net 单点登录实现
  2. vm客户机隔离不能选_开汽车美容店,这些位置绝对不能选,会让你门可罗雀,生意惨淡...
  3. 继续教育计算机组成原理a试卷,计算机组成原理模拟试题及答案西工大.doc
  4. 转码java,java转码
  5. python36中文手册_python36中文手册_python_36_文件操作4
  6. 鸿蒙唯独没有手机,想用鸿蒙OS,却没有华为手机?华为高层:还有1亿台设备可体验...
  7. php 鼠标点击图片放大,css3如何实现鼠标放上图片放大?(附代码)
  8. python 个人所得税问题_Python实现的个人所得税计算器
  9. 用户计算机可以通过电话拨号,用户计算机可以通过大型局域网、小型局域网、无线连接、电话拨号和()等方式接入Internet。...
  10. java set泛型_Java 集合二 泛型、Set相关