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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
258 1
|
4月前
|
消息中间件 Linux API
centos7 安装rabbitmq自定义版本及配置
centos7 安装rabbitmq自定义版本及配置
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
102 2
|
2月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
125 1
|
2月前
|
存储 监控 Linux
在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践
本文详细介绍了在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践,包括使用 `fdisk` 创建分区、`mkfs` 格式化分区、创建挂载点、编辑 `/etc/fstab` 实现永久挂载等步骤,旨在有效管理服务器磁盘空间,提高系统稳定性和可维护性。
207 1
|
2月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
52 1
|
4月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
525 8
centos7 mysql安装及配置
|
3月前
|
Linux
CentOS 7.x时间同步服务chrony配置详解
文章详细介绍了在CentOS 7.x系统中如何安装和配置chrony服务,以及它与ntpd服务的对比,强调了chrony在时间同步方面的高效性和准确性。
222 2
CentOS 7.x时间同步服务chrony配置详解
|
2月前
|
安全 Linux 数据库连接
CentOS 7环境下DM8数据库的安装与配置
【10月更文挑战第16天】本文介绍了在 CentOS 7 环境下安装与配置达梦数据库(DM8)的详细步骤,包括安装前准备、创建安装用户、上传安装文件、解压并运行安装程序、初始化数据库实例、配置环境变量、启动数据库服务、配置数据库连接和参数、备份与恢复、以及安装后的安全设置、性能优化和定期维护等内容。通过这些步骤,可以顺利完成 DM8 的安装与配置。
285 0
|
2月前
|
Linux
CentOS-Stream-9配置chfs
通过上述步骤,您就可以在CentOS Stream 9上配置并运行CHFS,为用户提供基于HTTP的文件分享服务。请注意,实际操作时应根据CHFS的具体版本和文档进行适当调整。
58 0