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语法是否正确。

[[email protected] ~]# visudo

....(前面省略)....

root ALL=(ALL) ALL #<==找到这一行,大约在80 行左右

yang1 ALL=(ALL) ALL #<==新增这行!则yang1用户通过sudo拥有所有权限

....(前面省略)....

语法解释:

 root
ALL=(ALL)


ALL


使用者账号


登入者的来源主机名=(可切换的身份)


可下达的指令


详细解释:


使用者帐号


代表哪个用户使用sudo的权限


来源主机名称


指定信任用户,即根据w查看[使用者帐号]的来源主机


可切换的身份


代表可切换的用户角色,和sudo -u结合使用,默认是切换为root.


可下达的指令


用于权限设置,也可使用!来表示不可执行的命令

举例:

[[email protected] ~]# visudo

yang2 ALL=(root) !/usr/bin/passwd,!/usr/bin/passwd root

#允许yang2用户通过sudo来修改所有其它用户的密码,但不能修改root的密码

4. visudo利用群组授权

[[email protected] ~]# visudo

....(前面省略)....

%test ALL=(ALL) ALL

# 在最左边加上 % ,代表后面接的是一个群组,格式和单用户授权一样

[[email protected] ~]# usermod -a -G test test #<==将test 加入root 的组中

任何加入test这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令

不需要密码即可使用 sudo

[[email protected] ~]# 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

例:

[[email protected] ~]# 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命令已经有所有的权限,但不能查看网卡信息。

[[email protected] ~]$ sudo -l

…省略…

User test1 may run thefollowing commands on this host:

(ALL) ALL

sudo权限已经全部有了

[[email protected] ~]$ sudo ifconfig eth0

sudo: ifconfig: command notfound

不可以查看!提示这个命令找不到?为什么?这是因为系统环境变量导致的。

2) root环境变量与普通用户环境变量比较

test1用户找不到which命令在哪里,而root用户可以。

[[email protected] ~]$ which ifconfig

/usr/bin/which: no ifconfig in(/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin)

[[email protected] ~]$ su - root

Password:

[root@test ~]# which ifconfig

/sbin/ifconfig

这是为什么呢?

3)查看两个test1和root的PATH变量

[[email protected] ~]# 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

[[email protected] ~]# su - test1

[[email protected] ~]$ 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

[[email protected] ~]$ cat .bash_profile |grep PATH

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/usr/local/sbin

[[email protected] ~]$ source .bash_profile #使修改的变量文件生效

#修改变量后,接下来继续查看网卡信息

[[email protected] ~]$ 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文件位置

[[email protected] ~]# 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日志配置笔记

[[email protected] ~]# cat /usr/share/doc/sudo-1.7.2p1/sample.sudoers | grep "log"

Defaults syslog=auth

Defaults> root !set_logname

[email protected] 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)测试

[[email protected] ~]# cat/var/log/sudo.log #测试前sudo.log为空

[[email protected] ~]# su - yang1 #进入普通用户(事先已授权)

[[email protected] ~]$ 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 #发现不能创建删除用户,能创建文件。

[[email protected] ~]$ sudo touchyangrong #使用sudo创建一个文件

[[email protected] ~]$ 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

测试成功!

上述为简单的审计,复杂点的可以把日志集中存储,更复杂点的可以对用户行为做录像回放,过滤分析等。

时间: 2024-10-19 16:17:09

sudo简单命令语法及配置的相关文章

Kafka学习(一)配置及简单命令使用

一. Kafka中的相关概念的介绍 Kafka是一个scala实现的分布式消息中间件,其中涉及到的相关概念如下: Kafka中传递的内容称为message(消息),message 是通过topic(话题)进行分组的 topic 和message 的关系是一对多的关系 我们称发布message的进程为producer ,就是说producer生成<topic->message>对然后 丢进kafka集群 相对应的称订阅topic处理对应message的进程为consumer Kafka集群

Apache 的搭建及vim的简单命令

一. vim 简单命令 pwd     当前路径 ls    当前路径所有目录 cd  目录地址   跳转到指定目录 /xxx  查找xxx x 删除当前字符 n 执行上一次查找 二.为什么使用apache 服务器 能够有一个测试的服务器,不是所有的特殊网络服务都能找到免费的!,有些特殊的服务器功能,Apache都能很好的支持 三.安装配置apache 服务器 1.给自己的电脑设置成服务器 2.电脑设置密码,要不别人也可以访问我的电脑. 3.显示mac隐藏文件  defaults write c

Google搜索命令语法大全

以下是目前所有的Google搜索命令语法,它不同于Google的帮助文档,因为这里介绍 了几个Google不推荐使用的命令语法.大多数的Google搜索命令语法有它特有的使用格式,希望大家能正确使用.我用不同颜色标注了不同的语法命 令,绿色的较为常用的命令,黄色的是不常用但却非常有用的命令,蓝色是Google不推荐使用的命令. allinanchor: anchor是一处说明性的文字,它标注说明了这个链接可能跳转到其它的网页或跳转到当前网页的不同地方.当我们用allinanchor提交查询的时

linux中sudo的用法和sudoers配置详解

摘自:http://zxf261.blog.51cto.com/701797/748756 sudo 是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等.这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性.Sudo不是对shell的一个代替,它是面向每个命令的.它的特性主要有这样几点:1.sudo能够限制用户只在某台主机上运行某些命令.2.sudo提供了丰富的日志,详细地记录了每个用户干了

Juniper SRX 简单命令一

Juniper为人所熟悉的一定是从netscreen开始的,作为一线防火墙品牌,还是有很高的地位.但是以前玩netscreen,都是用的网页版去配置,而且网页版做得很不错.但是现在netscreen要开始淘汰,取而代之的是SRX系列防火墙,这个家伙的网页版就是个渣,没事卡一下已经算是客气的了,很有可能卡完以后,他就再也进不去了,必须去重启这个进程,而且页面逻辑性极差,所以我也开始了SRX命令配置的学习. 这里我提几点学习中遇到的问题(我现在还在学习中...) 1.资料极其少 我搜索了一下百度,发

GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载

GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 内容提要: 1.远程连接linux执行sftp文件下载 2.window下文件解压缩(tar.gz.zip) 3.window下文件解压缩及带密码解压(zip) 4.window下调用阿里雲RDS api查询备份并下载 5.GO语言命令行工具技巧 首先,写这篇博文的一个出发点是:我无法在window的cmd命

BATCH(BAT批处理命令语法)

bat语法备忘扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件[@[email protected]] bat语法备忘扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件. ==== 注 ======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从 更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外

Laravel4常用命令语法大全汇总

从去年开始,晚上没事时,使用Laravel4的写了一个简单的CMS框架,其中还是积累了不少经验,在这里分享给大家. 在simplahub社区发了一篇帖子,就叫"Laravel4常用命令语法大全汇总". 连接地址: http://www.simplahub.com/forum.php?mod=viewthread&tid=38&extra=page%3D1

oracle linux下oracle 10g启动EM、isqlplus及相关命令语法

转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOME/bin/isqlplusctl start emctl常用命令语法: emctl start dbconsole启动EM console服务,使用前需要先设置ORACLE_SID环境变量 emctl stop dbconsole停止EM console服务,使用前需要先设置ORACLE_SID环