CentOS下的sudo相关配置的总结归纳

简介:

1 基础部分

1.1 常用的命令行

1
2
3
4
5
6
man  sudoers  #参阅帮助
visudo  #编辑sudoers的命令
sudo  -l  #查看可执行或禁止执行的命令
sudo  -u user1  /bin/ls  #指定user1用户的身份执行命令
sudo  -g gp1  /bin/ls  #指以gp1组的身份执行
sudo  -u user1 -g gp1  /bin/ls  #指定用户和组的身份执行

1.2 配置文件路径

1
/etc/sudoers

1.3 sudoers的规则分类

sudoers的规则分为以下两类:

1)别名定义(可选)

2)授权规则(必选)

1.4 特殊符号的用法

1
2
3
4
5
6
7
"#"  用于注释
"\x"  转义字符
"\" 使用到物理行行尾则把下行的物理行连接成一个逻辑行
"*"  匹配零个或多个字符
"?"  匹配单个字符
"[...]"  匹配指定范围的字符
"[!...]"  匹配非指定范围的字符

2 Alias(别名)

2.1 别名的类型

包含以下四种别名:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias

注:以上别名类型的书写大小写敏感

1
2
3
4
Alias ::=  'User_Alias'   User_Alias ( ':'  User_Alias)* |
           'Runas_Alias'  Runas_Alias ( ':'  Runas_Alias)* |
           'Host_Alias'   Host_Alias ( ':'  Host_Alias)* |
           'Cmnd_Alias'   Cmnd_Alias ( ':'  Cmnd_Alias)*

2.2 别名的定义格式

2.2.1 单个别名的书写方式

1
Alias_Type NAME = item1, item2, ...

注:别名成员以“,”号分隔

2.2.2 多个别名的书写方式

1
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

注:以“:”号分隔

2.2.3 四种书写简式

1
2
3
4
5
6
7
User_Alias ::= NAME  '='  User_List
 
Runas_Alias ::= NAME  '='  Runas_List
 
Host_Alias ::= NAME  '='  Host_List
 
Cmnd_Alias ::= NAME  '='  Cmnd_List

2.3 别名定义NAME的有效字符

1
NAME ::= [A-Z]([A-Z][0-9]_)*

2.4 常见的定义范例

2.4.1 命令行别名的定义范例

作用:定义用户别名和别名中包含能否运行的命令

范例:

1
2
## Networking
Cmnd_Alias NETWORKING =  /sbin/route /sbin/ifconfig /bin/ping /sbin/dhclient /usr/bin/net /sbin/iptables /usr/bin/rfcomm /usr/bin/wvdial /sbin/iwconfig /sbin/mii-tool

2.4.2 用户别名的定义范例

作用:定义用户别名和别名中包含的用户或组

1
2
## User Aliases
User_Alias NETWORKINGADMINS = user1, user2, %gp1

注:

1)组前面加“%”号

2)用户名必须是系统有效的用户

2.4.3 主机别名的定义范例

作用:定义主机别名和别名中包含的主机

范例:

1
2
## Host Aliases
Host_Alias     FILESERVERS = fs1, fs2

注:

1)服务器fs1和fs2属于FILESERVERS组

2)主机可以是主机名称、IP(192.168.0.8)、或网段(192.168.0.0/24)、子网掩码(255.255.255.0)


3 授权规则

3.1 授权规则的格式

1
2
3
4
5
6
7
8
9
10
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere

其实就这个意思:

1
用户名或%组名 可管理的主机名称=能否运行的命令

注:以上都可以使用别名代替

3.2 授权规则的范例

3.2.1 不使用别名的定义方式

基于系统用户名的定义

1
user1 fs1= /sbin/mount  /mnt/cdrom /sbin/umount  /mnt/cdrom

基于系统组的定义

1
%gp1 fs1= /sbin/mount  /mnt/cdrom /sbin/umount  /mnt/cdrom

使用ALL关键字的定义

1
root    ALL=(ALL)       ALL

3.2.2 使用别名的定义方式

1
NETWORKINGADMINS FILESERVERS=(NETWORKADMINS)

注:

1)NETWORKINGADMINS代表定义过的用户或组:user1, user2, %gp1

2)FILESERVERS代表定义过的服务器:fs1, fs2

3)NETWORKADMINS代表定义过的命令:/sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

3.2.3 关闭密码验证提示

在命令列前加入关键字“NOPASSWD: ”,详细如下:

1
%wheel        ALL=(ALL)       NOPASSWD: ALL

1
%wheel        ALL=(ALL)       NOPASSWD:  /sbin/route

4 其他指令

4.1 导入子规则

1
includedir  /etc/sudoers .d

使定义于/etc/sudoers.d目录下的子规则生效

4.2 关闭sudo命令的提示

此选项适用于使用shell中调用sudo执行命令时候屏蔽以下提示:

1
sudo : sorry, you must have a  tty  to run  sudo

4.2.1 方法一

注释掉以下行:

1
#Defaults    requiretty

4.2.2 方法二

添加以下行:

1
Defaults:user1 !requiretty

4.3 指定安全的执行路径

1
Defaults    secure_path =  /sbin : /bin : /usr/sbin : /usr/bin

5 开启监视日志

5.1 创建日志文件

1
touch  /var/log/sudo .log

5.2 开启sudo的日志功能

1
visudo

加入如下行:

1
2
3
Defaults logfile= /var/log/sudo .log
Defaults loglinelen=0
Defaults !syslog

5.3 配置系统日志

5.3.1 修改日志配置文件

1
vim  /etc/rsyslog .conf

“local7.*”行后加入如下行:

1
local2.debug                                             /var/log/sudo .log

5.3.2 重启系统日志服务

1
service rsyslog restart

5.4 测试日志

5.4.1 命令行监视日志

1
tail  -f  /var/log/sudo .log

5.4.2 执行指令测试

1
sudo  /usr/bin/ssh  root@127.0.0.1

6 应用场景

6.1 排除部分使用的情景

6.1.2 配置要求

1
2
禁止某用户使用: su 命令
允许某用户使用: su 除外命令

注:禁止的原因是因为用户可以使用此命令提权

1
sudo  su  - root

6.1.2 解决方案

1) 查询用户的所属组

1
  id  mail

显示如下:

1
uid=8(mail) gid=12(mail)  groups =12(mail)

2) 定义方法

1
2
%mail ALL=(root) NOPASSWD: ALL
mail ALL=(root) NOPASSWD: ! /bin/su

注:定义所属组允许执行所有命令,但拒绝用户执行su命令

3) 相对好的定义方法

1
2
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: ! /bin/su

可防止用户使用如下方法破解:

1
2
sudo  cp  /bin/su  assu
sudo  . /assu  - root

4) 相对更好的定义方法

1
2
3
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: !/*/*  /sbin/ *,!/*/*  /bin/ *,!/*/*  /usr/sbin/ *,!/*/*  /usr/bin/ *,\
                              ! /bin/su

注:禁止用户使用允许的命令操作运行命令的目录的文件

可防止用户使用如下方法破解:

1
2
3
4
5
  sudo  mv  /bin/su  /bin/assu
  #或者
  sudo  cp  /bin/su  /bin/assu
  #然后
  sudo  assu - root

5)实际上,我建议做如下配置

1
2
3
%mail ALL=(root) NOPASSWD:  /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ *
mail ALL=(root) NOPASSWD: !/*/*  /sbin/ *,!/*/*  /bin/ *,!/*/*  /usr/sbin/ *,!/*/*  /usr/bin/ *,\
                              ! /bin/su ,! /usr/bin/passwd  *root*,!/*/* * /root/ *

可防止用户使用passwd命令操作root用户:

1
2
3
  sudo  passwd  root
  sudo  passwd  -l root
  sudo  passwd  -u root

或使用其他命令去操作root的家目录

1
2
  sudo  ls  /root/
  sudo  ls  -l  /root/

怎样?脑洞大开吧?sudo是相对安全的对吧?O(∩_∩)O哈哈~

注:以上个人总结,如有错漏欢迎指正,在下感激不尽。










本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1791234,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
Linux 开发工具 数据安全/隐私保护
Centos7:自动化配置vim | suoders信任列表添加普通用户
Centos7:自动化配置vim | suoders信任列表添加普通用户
25 0
|
28天前
|
Java Linux
为centos7配置jdk
为centos7配置jdk
28 3
|
1月前
|
网络协议 安全 Linux
linux配置防火墙 Centos7下 添加 端口白名单
linux配置防火墙 Centos7下 添加 端口白名单
87 0
|
21天前
|
Linux 网络安全 开发工具
Centos6.5安装并配置Telnet服务
该内容是一个关于如何安装配置Telnet服务的教程。首先,通过yum安装vim、xinetd、telnet和telnet-server。接着,修改/etc/xinetd.d/telnet配置文件,将disable改为no,并设置访问限制(如限定特定网段和时间)。关闭防火墙,重启服务。创建测试用户后,分别使用CentOS和Windows的Telnet客户端进行连接测试,显示成功,实验完成。
26 1
|
8天前
|
Linux
CentOS 7 配置yum阿里源 (三步即可)
CentOS 7 配置yum阿里源 (三步即可)
114 1
|
19天前
|
网络协议 Java 应用服务中间件
记录_centos7离线环境和虚拟机共享文件安装jdk和tomcat(配置环境变量)
记录_centos7离线环境和虚拟机共享文件安装jdk和tomcat(配置环境变量)
11 0
|
21天前
|
Linux 网络安全 开发工具
Centos7 sendmail服务安装与配置
该文本描述了在Linux系统中设置邮件服务的步骤。首先,启用httpd的邮件发送功能,然后安装sendmail、sendmail-cf和dovecot。接着配置/sendmail.mc,设定IP和邮件域名。在dovecot配置文件中启用imap、pop3和lmtp协议,取消明文认证限制,设定mail_location,并开启SSL。创建用户mail3和mail4,给予相应权限。停止postfix服务,编辑访问控制、提交配置、本地主机名等文件。最后,重置sendmail、dovecot和saslauthd服务。
47 0
|
21天前
|
运维 网络协议 Linux
【运维系列】Centos7安装并配置PXE服务
PXE是Intel开发的预启动执行环境,允许工作站通过网络从远程服务器启动操作系统。它依赖DHCP分配IP,DNS服务分配主机名,TFTP提供引导程序,HTTP/FTP/NFS提供安装源。要部署PXE服务器,需关闭selinux和防火墙,安装dhcpd、httpd、tftp、xinetd及相关服务,配置引导文件和Centos7安装源。最后,通过syslinux安装引导文件,并创建pxelinux.cfg/default配置文件来定义启动参数。
57 0
|
21天前
|
运维 网络协议 Linux
【运维系列】Centos7安装并配置postfix服务
安装CentOS7的Postfix和Dovecot,配置Postfix的`main.cf`文件,包括修改完全域名、允许所有IP、启用邮箱等。然后,配置Dovecot的多个配置文件以启用auth服务和调整相关设置。重启Postfix和Dovecot,设置开机自启,并关闭防火墙进行测试。最后,创建邮箱账户并在Windows邮箱客户端中添加账户设置。
19 0
|
21天前
|
网络协议 Linux 网络安全
Centos7 配置DNS服务
该教程指导配置DNS服务器:首先通过yum安装bind和cach件,然后修改IP设置。接着,编辑/etc/named.conf,将第13行和21行的参数改为"any"。在/etc/named.rfc1912中更新正向和反向域名。创建正向解析文件/var/named.localhost和反向解析文件/var/named.loopback,按指定格式添加解析记录。最后,重启服务,确保防火墙关闭,通过nslookup检查DNS配置效果。
28 1