sudo分权管理

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)若欲切换的身份与执行者身份相同,那也不需要输入密码。

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

测试成功!

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

 

本文转自:http://blog.51cto.com/yangrong/1289452

Linux学习之十八-sudo分权管理的更多相关文章

  1. Linux学习笔记(八)权限管理命令

    权限管理命令 权限位含义 chmod chown chgrp umask默认权限 权限位含义 第1位代表文件类型 "-":普通文件 "b":块设备文件 &quo ...

  2. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  3. Linux学习之十四、管线命令

    Linux学习之十四.管线命令 地址:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_6.php

  4. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  5. Linux学习之十九-Linux磁盘管理

    Linux磁盘管理 1.相关知识 磁盘,是计算机硬件中不可或缺的部分磁盘,是计算机的外部存储器中类似磁带的装置,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失 ...

  6. linux基础-第十六单元 yum管理RPM包

    第十六单元 yum管理RPM包 yum的功能 本地yum配置 光盘挂载和镜像挂载 本地yum配置 网络yum配置 网络yum配置 Yum命令的使用 使用yum安装软件 使用yum删除软件 安装组件 删 ...

  7. Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全

    一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...

  8. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  9. Linux学习之十六-Linux用户管理

    Linux用户管理 Linux系统跟Windows系统一样,可以创建不同的用户,不同的用户组.在不同用户下使用系统具有相应的权限 创建一个普通用户时,会修改几个文件,拷贝一些初始文件到用户家目录中 修 ...

随机推荐

  1. 处理python字符串中的中文字符

    # -*- coding:utf-8 -*- import sys,os txta = open('a.txt','r') str = '' for line in txta: str += line ...

  2. PAT——乙级1026and1046

    1026 程序运行时间 (15 point(s)) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() ...

  3. javascript计算两个时间的差

    function GetDateDiff(startTime, endTime, diffType) { //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime ...

  4. eslint规范项目代码

    安装一系列eslint插件后,填写eslint配置,配置如下 .editorconfig root = true [*] charset = utf-8 indent_style = space in ...

  5. 关于JavaWeb开发的一些感悟

    从事JavaWeb的开发已经三年了,从最开始的啥都不会,到慢慢的能够独立做项目,从一开始的一片茫然,到现在的心中有数.对于技术.业务也有了自己的看法. JavaWeb开发所涉及到的知识点非常多,涉及到 ...

  6. [JSOI2012][bzoj4332] 分零食 [FFT]

    题面 传送门 思路 首先,这个数据如果没有这么大,我们还是可以做朋友的...... 设$dp\left[i\right]\left[j\right]$代表前j个零食分给了前i个人的方案数 那么dp方程 ...

  7. 优化Angularjs的$watch方法

    Angularjs的$watch相信大家都知道,而且也经常使用,甚至,你还在为它的某些行为感到恼火.比如,一进入页面,它就会调用一次,我明明希望它在我初始化之后,值再次变动才调用.这种行为给我们带来许 ...

  8. Window下安装使用RabbitMQ

    RabbitMQ官网 http://www.rabbitmq.com 下载地址 http://www.rabbitmq.com/download.html 一 Windows下安装RabbitMq 1 ...

  9. cf 512D - Fox And Travelling

    题目大意 给定一颗\(n\le 100\)个点的图,可以进行随机游走,求游走\(k=0...n\)个点的方案数 游走的规则是:每次只能访问一个度数\(\le 1\)的点,并将其删除 分析 看完傻眼 问 ...

  10. 洛谷P1965 转圈游戏 [NOIP2013]

    题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此 ...