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,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
6月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
711 87
|
4月前
|
存储 Linux Apache
在CentOS上配置SVN至Web目录的自动同步
通过上述配置,每次当SVN仓库中提交新的更改时,`post-commit`钩子将被触发,SVN仓库的内容会自动同步到指定的Web目录,从而实现代码的连续部署。
181 16
|
4月前
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
459 9
|
6月前
|
Linux
Centos6配置阿里云yum源报错
在CentOS 6配置阿里云Yum源时,可能出现EPEL仓库访问报错(404 Not Found)。解决方法:编辑`/etc/yum.repos.d/epel.repo`文件,将`enabled`和`gpgcheck`参数设为0 ``` 此设置可解决仓库无法访问的问题。
1566 29
|
6月前
|
Ubuntu 安全 Linux
CentOS与Ubuntu中防火墙配置命令集汇
有了这些,你就能遨游在 CentOS 和 Ubuntu 的海洋中,频繁地改变你的防火墙设置,快速地应对各种安全威胁,同时也能保证你的系统可以正常工作。出发吧,勇敢的编程者,随着这些命令集的涌动,扬帆起航,走向安全的网络世界!
208 5
|
7月前
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
1737 26
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
781 1
|
7月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
298 10
|
10月前
|
Java
CentOS7.8配置Adoptium-Java17运行环境
本指南介绍如何设置清华镜像源并安装 Temurin-17-JRE 运行环境。首先,编辑 `/etc/yum.repos.d/adoptium.repo` 文件,配置清华镜像源。接着,使用 `yum install -y temurin-17-jre` 命令安装 Temurin-17-JRE,并通过 `java --version` 验证安装成功。相关配置和操作界面截图附后。
326 8