博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sudo
阅读量:4944 次
发布时间:2019-06-11

本文共 3839 字,大约阅读时间需要 12 分钟。

 

sudo

 


 

sudo的使用

  • sudo命令可以用来使用其他的用户身份执行指定的命令。如果未授权用户尝试使用 sudo,会提示联系管理员。
  • sudo还有日志功能,无论谁使用sudo命令操作什么命令,都会被记录在日志当中/var/log/secure
  • sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
  • sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”,关于时间戳文件在/var/db/sudo
  • 通过visudo命令编辑配置文件,具有语法检查功能visudo –c检查语法

命令sudo [-u user] COMMAND

参数

  • -V 显示版本信息等配置信息
  • -u user 默认为root
  • -l,ll 列出用户在主机上可用的和被禁止的命令
  • -v 再延长密码有效期限5分钟,更新时间戳
  • -k 清除时间戳(1970-01-01),下次需要重新输密码
  • -K 与-k类似,还要删除时间戳文件
  • -b 在后台执行指令
  • -p 改变询问密码的提示符号
    示例: -p ”password on %h for user %p:"

上面就是命令的使用介绍和一些参数,并没有具体的示例,那是因为,我们真正的要使用这个命令,需要配合针对于该命令的配置,配置文件在/etc/sudoers, /etc/sudoers.d/中,其中第一个数主配置文件,第二个是次配置文件,但在实际上,我们最好是将我们的规则写在此配置文件目录中,这样便于管理还以免损坏主配置文件,接下来,我们先对主配置文件进行了解:

 
我们在上面显示的东西,第一个 root ALL=(ALL) ALL , 其实是 user host=(runas) command ,其中user代表是运行命令者的身份,host是指通过哪些主机运行,runas是以哪个用户的身份运行,command运行哪些命令。
第二个配置 %wheel ALL=(ALL) ALL 则是让哪些组中的成员以某些身份在哪些机器上运行哪些命令。

然后我们做一些示例,当然,我们需要写配置文件的,我们把配置写到/etc/sudoers.d/下面去,保证主配置文件不变。我们使用创建文件test(文件名可自己取,没问题)

tom ALL=(root)/usr/bin/cat /etc/shadow

 

我们使用tom用户去使用root的身份在所有机器上查看shasow文件,在一般情况下,作为普通用户tom是没有权限查看该文件的,但是,我们给他一个临时执行的权限,他就能使用sudo命令查看到该文件。

 

我们可以看到,他可以查看该文件,但是需要输入自己的密码,并且在5分钟之内使用该命令,不需要再次输入密码,关于此的时间戳文件在/var/db/sudo,一点五分钟的时间过了,我们需要重新输入密码。并且时间戳文件会自动更新。

 
刚刚我们是使用vim写的那个配置文件,但是文件有没有什么问题呢?我们使用命令 visudo –c 来检查一下该文件是否有问题。

[root@CT73 sudoers.d]$ visudo -c/etc/sudoers: parsed OK/etc/sudoers.d/test: bad permissions, should be mode 0440

我们看到test语法是没有问题的,但是权限有点问题,它说权限应该是440,我们需要把它改改,我们可以使用手动修改,或者在写这个文件的时候使用visudo -f  test来写就没问题了。

我们的配置文件还是支持通配符的,例如:

  • ? :任意单一字符
  • * :匹配任意长度字符
  • [wxc]:匹配其中一个字符
  • [!wxc]:除了这三个字符的其它字符
  • \x : 转义
  • [[alpha]] :字母 示例: /bin/ls [[alpha]]*

以上这些都可以使用在通配符里面,如:

tom ALL=(root)/usr/bin/cat /etc/*

此时tom就可以使用cat命令查看/etc/下面的所有文件内容。或者我们还可以这样写:

tom ALL=(root)/usr/sbin/useradd

这个配置使得tom用户具有创建用户的权限。

在配置文件中,我们可以使用以下的命名方式:

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

示例如下

让tom可以在192.168.111.120主机下删除用户

tom 192.168.111.120=(#0)/usr/sbin/userdel

让tom可以修改sudoers文件,这是一个可怕的命令,tom可以修改任何他想得到的权限。

tom 192.168.111.120=(#0) sudoedit

 

命令别名

很多的时候,需要使用sudo的用户很多,我们要对他们处理,如果将一个配置写的很长,会看起来很多,这时候,我们就可以使用命令别名:

别名有四种类型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias

示例1

让student用户可以使用pidof和ifconfig命令,让在wheel组里面的用户可以无密码执行任何操作

student ALL=(root)/sbin/pidof,/sbin/ifconfig%wheel ALL=(ALL) NOPASSWD: ALL

实例2

定义用户别名,包含两个用户,定义命令别名,让这两个用户可以执行该操作。

User_Alias NETADMIN= netuser1,netuser2Cmnd_Alias NETCMD =/usr/sbin/ipNETADMIN ALL=(root) NETCMD

示例3

SYSADER SERS= SYDCMD,DSKCMD没有带(),它就代表 ALL 任何人

User_Alias SYSADER=wang,mage,%adminsUser_Alias DISKADER=tomHost_Alias SERS=www.fire.com,172.16.0.0/24Runas_Alias OP=rootCmnd_Alias SYDCMD=/bin/chown,/bin/chmodCmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk SYSADER SERS= SYDCMD,DSKCMDDISKADER ALL=(OP) DSKCMD

示例4

定义两个用户,在使用useradd,usermod,和passwd使用的时候不需要输入密码(设置无法改变root的密码),在userdel的时候需要输入密码(防止误操作,删除用户)

User_Alias ADMINUSER = adminuser1,adminuser2Cmnd_Alias ADMINCMD =/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel

示例5

默认设置,在授权普通用户使用sudo命令时,如果没有-u username的话,默认使用wang用户,在()不写tom,或者没有(),默认就是以tom的执行命令

Defaults:wang runas_default=tomwang ALL=(tom,jerry) ALL

示例6

wang 192.168.175.136,192.168.175.138=(root)/usr/sbin/,!/usr/sbin/useradd

示例7

让tom可以查看message*的日志文件,但是这里有一个安全问题

tom ALL=(ALL) NOPASSWD:/bin/cat /var/log/messages*

我们在使用tom用户cat/var/log/messages时候,还可以:

sudo cat /var/log/messages /etc/shadow

并且在man帮助文档中有说明:

Note that mail will not be sent if an unauthorized user tries to run sudo with...skipping...%operator ALL =/bin/cat /var/log/messages*will allow command like:$ sudo cat /var/log/messages.1It will also allow:$ sudo cat /var/log/messages /etc/shadowwhich is probably not what was intended.

 

转载于:https://www.cnblogs.com/duzhaoqi/p/7605667.html

你可能感兴趣的文章
graphviz入门
查看>>
CSS可以和不可以继承的属性
查看>>
Python基础(三)
查看>>
Continuous integration
查看>>
hl7 V2中Message Control ID的含义及应用
查看>>
IOS 4个容易混淆的属性(textAligment contentVerticalAlignment contentHorizontalAlignment contentMode)...
查看>>
C#HttpHelper类1.3正式版教程与升级报告
查看>>
Quartz和TopShelf Windows服务作业调度
查看>>
让ie9之前的版本支持canvas
查看>>
排序规则
查看>>
percent的用法
查看>>
Hibernate三种状态详解
查看>>
判断一个数是否是2^N次方
查看>>
js中几种实用的跨域方法原理详解
查看>>
打印图形
查看>>
《第一行代码》学习笔记7-活动Activity(5)
查看>>
ngx_http_core_module 模块
查看>>
两个常见的oracle索引
查看>>
一位有着工匠精神的博主写的关于IEnumerable接口的详细解析
查看>>
MySQL中特有的函数If函数
查看>>