转自:https://blog.51cto.com/yangrong/1289452

目录

1、为什么需要sudo?... 1

2、sudo命令用法... 1

3、sudo工作流程... 1

4、visudo单用户授权... 1

5、visudo利用群组授权... 2

6、visudo利用别名授权... 2

7、visudo与环境变量... 2

8、配置sudo日志文件跟踪... 3

sudo配置参考文档:

http://linux.vbird.org/linux_basic/0410accountmanager.php#userswitch

http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2650103.html

http://www.cnitblog.com/xijia0524/archive/2008/06/30/46168.aspx

sudo日志记录跟踪参考文档:

http://firerat.blog.51cto.com/2371183/455524/

1、为什么需要sudo?
当我的主机是多人共管的环境时,如果大家都使用 su 来切换成为 root 的身份,那么就得每个人知道 root 的密码,这样密码太多人知道可能会流出去,很不安全!怎办?透过 sudo 来处理即可!

sudo的执行则仅需要自己的密码 ,sudo 可以让你以其他用户的身份执行指令 (通常是使用 root 的身份来执行指令),因此并非所有人都能够执行 sudo ,而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令。

2、sudo命令用法
sudo可让用户以其他的身份来执行指定的指令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入当前用户密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

语法:

sudo [-bhHpV][-s ][-u <用户>][指令] 或 sudo [-klv]

参数:

参数

描述

-b

在后台执行指令

-H

将HOME环境变量设为新身份的HOME环境变量

-k

结束密码的有效期限,也就是下次再执行sudo时便需要输入密码

-K

同-k

-l

列出目前用户可执行与无法执行的指令

-p

改变询问密码的提示符号

-s

执行指定的shell

-u

以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份

-v

延长密码有效期限5分钟

-V

显示版本信息

3、sudo工作流程
1)当用户执行 sudo 时,×××于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;

2)若使用者具有可执行 sudo 的权限后,便让使用者输入用户自己的密码来确认;

3)若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);

4)若欲切换的身份与执行者身份相同,那也不需要输入密码。

100254476.jpg

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的密码

5、visudo利用群组授权

[root@www ~]# visudo

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

%test ALL=(ALL) ALL

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

[root@www ~]# usermod -a -G testtest #<==将test 加入root 的组中

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

不需要密码即可使用 sudo

[root@www ~]# visudo

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

%wheel ALL=(ALL) NOPASSWD: ALL

#在指令处加入NOPASSWD:ALL即可

6、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 #指定用户别名里的成员,拥有命令别名里的权限

7、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没有此问题

8、配置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

测试成功!

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

每一次总结文档,对自己也是一次煅炼,若有错误,欢迎指出。

转载于:https://blog.51cto.com/sandshell/2112013

visudo精确用户赋权与sudo日志跟踪相关推荐

  1. visudo精确用户赋权(sudo)

    原文BLOG:http://iminmin.blog.51cto.com/689308/455992 sudo" 是 Unix/Linux 平台上的一个非常有用的工具,允许为非根用户赋予一些 ...

  2. oracle数据库赋权_Oracle角色权限创建用户赋权

    1.权限&用户 角色权限: Sysdba:可以改变字符集.创建删除数据库.登录之后用户是SYS(可以启动和关闭数据库) Sysoper:不可改变字符集.不能创.删数据库.登陆之后用户是PUBL ...

  3. linux创建新用户赋权

    1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy   //修改密码 Changing pa ...

  4. mysql删除赋权_mysql 添加用户 删除用户 赋权

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...

  5. Mysql8创建用户以及赋权操作

    Mysql8创建用户以及赋权操作 1.进入mysql mysql -uroot -p 2.创建用户 create user 'testuser1'@'%' identified by '123456' ...

  6. MySQL—赋权(grant)和回收权限(revoke)

    查看权限 mysql> SHOW GRANGTS FOR userA; 查看具体的用户权限 mysql> SHOW GRANGTS FOR userA@10.1.1.2; 赋权 grant ...

  7. mysql赋权与收回权限(grantrevoke)

    为一个用户赋权 收回权限 #给用户cacti赋予所有库的所有权限 GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti' WI ...

  8. MySQL学习笔记(8) 创建用户和赋权,备份与恢复,日志

    1. 背景 一般在开发中,我们需要新建一个账户,并赋予某个数据库的访问权限.本文说下操作方法. 2.创建用户和赋权 创建用户 CREATE USER 'zyf'@'%' identified by ' ...

  9. sudo,普通用户的提权操作,越权跟踪

    一.用户切换-su Substitute User su - [账户名称] su - [账户名称] -c '命令' 1.切换用户 [root@proxy ~]#useradd jjh [root@pr ...

最新文章

  1. Spring Boot 多模块项目实践(附打包方法)
  2. python自动化—web页面操作之窗口切换
  3. 程序设计方法的发展历程
  4. mysql ddl crash,MySQL5.6 crash-safe replication一个坑
  5. UE3客户端服务器GamePlay框架
  6. oracle约束的相关总结
  7. VMWare学习总结(1)——Centos7安装完毕后无法联网的解决方法
  8. 2021年广东新高考学业水平考试成绩查询,2021年1月广东高中学业水平考试成绩查询时间及入口...
  9. netty权威指南学习笔记一——NIO入门(4)AIO
  10. DBLinq (MySQL exactly) Linq To MySql(转)
  11. cmder的下载安装
  12. 【Pix4d精品教程】Pix4Dmapper完整航测内业操作流程手把手图文教程
  13. office下载哪个版本比较好
  14. Html5 postmessage 子父窗口传值
  15. 伯努利-欧拉装错信封问题
  16. 美国最受欢迎的婴儿名字:女孩Sophia和男孩Liam
  17. Python图形用户界面和游戏开发
  18. 体验说 | 快速谷歌浏览器翻译插件的菜单栏工具
  19. oracle 多字段条件查询,Oracle 多字段查询
  20. 二进制炸弹实验bomb-whu 拆弹

热门文章

  1. 市盈率指标详解及相关文献概述
  2. 包收录外链平台都有哪些
  3. 【问题解决方案】电脑关闭搜狐微门户的弹窗
  4. SONiC Warm Reboot
  5. Exception in thread main java.lang.NoClassDefFoundError: goetl/etl/Ip2Plac
  6. 虚拟机san存储服务器,VMware SAN介绍
  7. 金海佳学C++primer 练习9.14
  8. 考研数学之线性代数知识点
  9. 无心剑中译狄兰·托马斯《不要温顺地走进那个良夜》
  10. 浅析B树、B+树插入删除操作(附代码实现)