visudo精确用户赋权与sudo日志跟踪

简介:

目录

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

2sudo命令用法... 1

3sudo工作流程... 1

4visudo单用户授权... 1

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

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

7visudo与环境变量... 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 这个指令。



2sudo命令用法

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

显示版本信息


3sudo工作流程

1)当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;

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

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

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

100254476.jpg


4visudo单用户授权

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


5visudo利用群组授权


[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即可



6visudo利用别名授权

公司有很多部门,要方便管理,就可使用别名的方式,如:开发部,运维部,技术支持部,每个部门里多个人,部门之间拥有的命令权限也不一样,同一部门权限一样。如果一条一条写的话,写也麻烦,改就更麻烦了。

别名的使用方法:

使用方法可通过 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 #指定用户别名里的成员,拥有命令别名里的权限


7visudo与环境变量

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)查看两个test1rootPATH变量

[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

测试成功!

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


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





     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1289452,如需转载请自行联系原作者






相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Linux 数据安全/隐私保护
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
4627 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
520 9
|
11月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1063 54
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
1529 3
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
1093 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
809 5
图解MySQL【日志】——Redo Log
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1466 13