sudo简单命令语法及配置
参考:http://yangrong.blog.51cto.com/6945369/1289452, https://wiki.archlinux.org/index.php/Sudo_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
sudo : 以他人身份执行命令,默认为root。可在文件/etc/sudoers中配置。
若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入当前用户密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
1. sudo命令语法
语法:
sudo [-bhHpV][-s ][-u <用户>][指令] 或 sudo [-klv] 或
sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value]
[-i|-s] [<command>]
参数:
参数 | 参数别名 |
描述 |
-A |
--askpass |
密码提示使用辅助程序 |
-b |
--background |
在后台执行指令 |
-C |
--close-from=num |
关闭所有文件描述符 >=num |
-E |
--preserve-env |
运行命令时保存用户环境 |
-e |
--edit |
编辑文件,代替执行命令 |
-g |
--group=group |
以指定的用户组名或ID执行命令 |
-H |
--set-home |
将HOME环境变量设为新身份的HOME环境变量 |
-h |
--help |
显示帮助信息和文本 |
-h |
--hoe=host |
在主机上运行命令(如果插件支持) |
-k |
--reset-timestamp |
无效的时间戳文件 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码 |
-K |
--remove-timestamp |
同-k, 彻底删除文件的时间戳 |
-l |
--list |
列出目前用户可执行与无法执行的指令;列出用户的权限或检查一个特定的命令;使用两次更长的格式 |
-n |
--non-interactive |
非交互模式,无提示使用 |
-P |
--preserve-groups |
保存组向量,而不是设置为目标的 |
-p |
--prompt=prompt |
改变询问密码的提示符号 |
-S |
--stdin |
从标准输入读取密码 |
-s |
--shell |
执行指定的shell |
-t |
-type=type |
创建指定类型的SELinux的安全上下文 |
-U |
--other-user=user |
在列表模式下,显示用户的权限 |
-u |
--user=user |
以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份 |
-v |
--version |
延长密码有效期限5分钟 |
-V |
--validate |
显示版本信息 |
-- |
停止处理命令行参数 |
2. sudo工作流程
1)当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;
2)若使用者具有可执行 sudo 的权限后,便让使用者输入用户自己的密码来确认(是否需要输入密码,可配置);
3)若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
4)若欲切换的身份与执行者身份相同,那也不需要输入密码。
4. visudo单用户授权
visudo是直接操作/etc/sudoers文件,我们也可以直接 vi /etc/sudoers,但是visudo命令的好处在于,退出/etc/sudoers文件时,系统会检查/etc/sudoers语法是否正确。
[root@www ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL #<==找到这一行,大约在80 行左右
yang1 ALL=(ALL) ALL #<==新增这行!则yang1用户通过sudo拥有所有权限
....(前面省略)....
语法解释:
root |
ALL=(ALL) |
ALL |
使用者账号 |
登入者的来源主机名=(可切换的身份) |
可下达的指令 |
详细解释: |
||
使用者帐号 |
代表哪个用户使用sudo的权限 |
|
来源主机名称 |
指定信任用户,即根据w查看[使用者帐号]的来源主机 |
|
可切换的身份 |
代表可切换的用户角色,和sudo -u结合使用,默认是切换为root. |
|
可下达的指令 |
用于权限设置,也可使用!来表示不可执行的命令 |
举例:
[root@www ~]# visudo
yang2 ALL=(root) !/usr/bin/passwd,!/usr/bin/passwd root
#允许yang2用户通过sudo来修改所有其它用户的密码,但不能修改root的密码
4. visudo利用群组授权
[root@www ~]# visudo
....(前面省略)....
%test ALL=(ALL) ALL
# 在最左边加上 % ,代表后面接的是一个群组,格式和单用户授权一样
[root@www ~]# usermod -a -G test test #<==将test 加入root 的组中
任何加入test这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令
不需要密码即可使用 sudo
[root@www ~]# visudo
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL
#在指令处加入NOPASSWD:ALL即可
5. visudo利用别名授权
公司有很多部门,要方便管理,就可使用别名的方式,如:开发部,运维部,技术支持部,每个部门里多个人,部门之间拥有的命令权限也不一样,同一部门权限一样。如果一条一条写的话,写也麻烦,改就更麻烦了。
别名的使用方法:
使用方法可通过 man sudoers后面的举例找到
root |
ALL= |
(ALL) |
ALL |
使用者账号 |
登入者的来源主机名 |
可切换的身份 |
可下达的指令 |
User_Alias FULLTIMERS = millert, mikef, dowdy |
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0 |
Runas_Alias OP = root, operator |
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm |
例:
[root@www ~]# visudo
User_Alias ADMPW = pro1,pro2, pro3, myuser1, myuser2 #配置用户别名ADMPW
Cmnd_Alias ADMPWCOM =!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
#配置命令别名ADMPWCOM
ADMPW ALL=(root) ADMPWCOM #指定用户别名里的成员,拥有命令别名里的权限
6. visudo与环境变量
1)现象描述:test1用户sudo命令已经有所有的权限,但不能查看网卡信息。
[test1@test ~]$ sudo -l
…省略…
User test1 may run thefollowing commands on this host:
(ALL) ALL
sudo权限已经全部有了
[test1@test ~]$ sudo ifconfig eth0
sudo: ifconfig: command notfound
不可以查看!提示这个命令找不到?为什么?这是因为系统环境变量导致的。
2) root环境变量与普通用户环境变量比较
test1用户找不到which命令在哪里,而root用户可以。
[test1@test ~]$ which ifconfig
/usr/bin/which: no ifconfig in(/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin)
[test1@test ~]$ su - root
Password:
[root@test ~]# which ifconfig
/sbin/ifconfig
这是为什么呢?
3)查看两个test1和root的PATH变量
[root@test ~]# echo $PATH
/application/mysql/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@test ~]# su - test1
[test1@test ~]$ echo $PATH
/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin
发现普通用户都没有sbin的路径,而很多命令都放在这些路径下。
4)在普通用户变量文件添加上述路径,cd ~ && vi ~.profile
在PATH后加入:/sbin:/usr/sbin:/usr/local/sbin
[test1@test ~]$ cat .bash_profile |grep PATH
PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/usr/local/sbin
[test1@test ~]$ source .bash_profile #使修改的变量文件生效
#修改变量后,接下来继续查看网卡信息
[test1@test ~]$ sudo ifconfigeth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:3B:DA:97
inet addr:10.0.0.239 Bcast:10.0.0.255 Mask:255.255.255.0
可以正常执行了!
5) 为防止不出现用户找不到的命令,有两个方法
5.1)把上述路径添加到环境变量中,~/.bash_profile文件(普通用户可编辑),或/etc/profile全局文件(需root用户编辑)
5.2)执行命令用绝对路径,如: /sbin/ifconfig eth0
注:centos6.4没有此问题
7. 配置sudo日志文件跟踪
操作步骤:
1)查询sample.sudoers文件位置
[root@yang1 ~]# rpm -ql sudo
/usr/share/doc/sudo-1.7.2p1/sample.sudoers
/usr/share/doc/sudo-1.7.2p1/sample.syslog.conf
2)查看sample.sudoers中的日志相关配置
sample.syslog.conf这个文件为官方配置sudo日志配置笔记
[root@yang1 ~]# cat /usr/share/doc/sudo-1.7.2p1/sample.sudoers | grep "log"
Defaults syslog=auth
Defaults> root !set_logname
Defaults@SERVERS log_year, logfile=/var/log/sudo.log
3)创建日志文件
touch /var/log/sudo.log
4)把sudo日志文件加入系统日志
把下面命令添加到/etc/syslog.conf末尾
local2.debug /var/log/sudo.log
注:空白处不能用空格,必须用tab
centos6.4的日志服务为rsyslog
5)在/etc/sudoers中添加日志路径(也可用visudo编辑)
加在/etc/sudoers末尾:
echo 'Defaults logfile=/var/log/sudo.log' >> /etc/sudoers
6)测试
[root@yang1 ~]# cat/var/log/sudo.log #测试前sudo.log为空
[root@yang1 ~]# su - yang1 #进入普通用户(事先已授权)
[yang1@yang1 ~]$ sudo -l #查看当前用户sudo可执行的命令
[sudo] password for yang1:
Matching Defaults entries foryang1 on this host:
requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAYHOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY", logfile=/var/log/sudo.log
Runas and Command-specificdefaults for yang1:
User yang1 may run the followingcommands on this host:
(ALL)!/usr/sbin/useradd, (ALL) !/usr/sbin/userdel, (ALL) /bin/touch #发现不能创建删除用户,能创建文件。
[yang1@yang1 ~]$ sudo touchyangrong #使用sudo创建一个文件
[yang1@yang1 ~]$ cat/var/log/sudo.log #查看sudo.log文件,已有记录,测试成功
9月 5 12:37:46 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ; COMMAND=list
9月 5 12:38:05 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ;
COMMAND=/bin/touch yangrong
测试成功!
上述为简单的审计,复杂点的可以把日志集中存储,更复杂点的可以对用户行为做录像回放,过滤分析等。
sudo简单命令语法及配置的更多相关文章
- Kafka学习(一)配置及简单命令使用
一. Kafka中的相关概念的介绍 Kafka是一个scala实现的分布式消息中间件,当中涉及到的相关概念例如以下: Kafka中传递的内容称为message(消息),message 是通过topic ...
- Kafka配置及简单命令使用
一. Kafka中的相关概念的介绍 Kafka是一个scala实现的分布式消息中间件,其中涉及到的相关概念如下: Kafka中传递的内容称为message(消息),message 是通过topic(话 ...
- sudo dpkg-reconfigure phpmyadmin命令,重新配置一遍phpmyadmin
sudo dpkg-reconfigure phpmyadmin命令,重新配置一遍phpmyadmin
- Linux 的简单命令以及在idea中配置码云
Linux 的简单命令: ls(list)功能:列出目录内容 cd(change directory)功能:切换目录 touch 1.txt 在当前目录创建一个文件1.txt clear:清除屏幕 p ...
- 手动编写的几个简单的puppet管理配置
puppet在自动化配置管理方面有很强大的优势,这里就不做过多介绍了,下面记录下几个简单的puppet管理配置: 一.首先在服务端和客户端安装puppet和facter 1)服务端 安装Puppet ...
- Apache 的搭建及vim的简单命令
一. vim 简单命令 pwd 当前路径 ls 当前路径所有目录 cd 目录地址 跳转到指定目录 /xxx 查找xxx x 删除当前字符 n 执行上一次查找 二.为什么使用apa ...
- Google搜索命令语法大全
以下是目前所有的Google搜索命令语法,它不同于Google的帮助文档,因为这里介绍 了几个Google不推荐使用的命令语法.大多数的Google搜索命令语法有它特有的使用格式,希望大家能正确使用. ...
- zabbix通过简单命令监控elasticsearch集群状态
简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...
- Juniper SRX 简单命令一
Juniper为人所熟悉的一定是从netscreen开始的,作为一线防火墙品牌,还是有很高的地位.但是以前玩netscreen,都是用的网页版去配置,而且网页版做得很不错.但是现在netscreen要 ...
随机推荐
- 当我们安装使用时,会出现eclipse启动不了,出现“Java was started but returned exit code=13......”的问题
安装win8.1后,启动eclipse,也会提示 "java was started but returned exit code=13" 可能是eclipse.ini配置文件错误 ...
- Entity FrameWork 延迟加载的本质(一)
1.集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法 2.EF上下文里的DBSet<T>里的标准查询运算符方法,来 ...
- windbg sos加载相关
使用windbg 加载sos.dll时,经常碰到报The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.d ...
- [转]微信公众平台WeChat PHP SDK
地址:https://github.com/dodgepudding/wechat-php-sdk 微信公众平台php开发包,细化各项接口操作,支持链式调用 微信支付接入文档: https://mp. ...
- iostat命令
http://www.orczhou.com/index.php/2010/03/iostat-detail/ Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmsta ...
- mvc设计模式和mvc框架的区别
Spring中的新名称也太多了吧!IOC/DI/MVC/AOP/DAO/ORM... 对于刚刚接触spring的我来说确实晕了头!可是一但你完全掌握了一个概念,那么它就会死心塌地的为你服务了.这可比女 ...
- parseInt第二个参数详解
前阵子在stackOverflow上看到两个这样的问题: 为什么parseInt(8,3) == NaN,parseInt(16,3) == 1? 为什么parseInt('dsff66',16) = ...
- GetStartedWithWin10Develop
GetStartedWithWin10Develop 首先要确保已经配置好win10开发环境,开始第一个win10开发的HelloWorld 1.首先创建你的win10项目(示例的项目名称为 Hell ...
- 如何利用ArcGIS Engine接口实现打开Raster Catalog中的某一幅指定的影像?
将IRasterCatalog转化为ITable,然后通过ITable.GetRow返回指定索引的IRow,将IRow转为IRasterCatalogItem,进而获取IRasterCatalogIt ...
- [Microsoft Dynamics CRM 2016]Invalid Action – The selected action was not valid 错误的诱因及解决方法
详细问题描述: 由于解决windows server 评估版过期\SQL server 评估版过期的问题后而导致的Invalid Action – The selected action was no ...