当前位置: 首页 > ops >正文

【运维实战】Linux 中su和sudo之间的区别以及如何配置sudo!

Linux 系统相比其他操作系统具有更高的安全性,其安全机制的核心之一在于用户管理策略和权限控制--普通用户默认无权执行任何系统级操作。

若普通用户需要进行系统级变更,必须通过susudo命令提权。

1.susudo的本质区别

su 要求直接共享 root 密码,而 sudo 允许用户在不知晓 root 密码的情况下执行系统命令。

sudo 通过验证用户自身密码来委派系统权限。

2.什么是sudo

sudo是一个具有 setuid 位的 root 二进制程序,允许授权用户以 root 身份执行命令,执行时需输入用户自身密码(后接命令)。

3.谁可以执行 sudo

通过/usr/sbin/visudo 可添加/删除可以执行 sudo的用户列表。

$ sudo /usr/sbin/visudo

默认情况下,sudo列表类似以下字符串(需root权限编辑visudo文件):

root ALL=(ALL) ALL
4.授予sudo访问权限

新手系统管理员常误将root ALL=(ALL) ALL作为模板,盲目授予用户无限制权限(如下所示),这将导致严重安全隐患:

root ALL=(ALL) ALL
adam ALL=(ALL) ALL
tom ALL=(ALL) ALL
mark ALL=(ALL) ALL
5.sudo配置参数

合理的sudo配置兼具灵活性与精确性,其语法结构为:

用户名 主机名=(有效用户) 命令

以上语法分为四个部分,解释如一:

  • 用户名:sudo授权用户。

  • 主机名:该sudo权限生效的主机(适用于多主机环境)。

  • 有效用户:允许执行命令的 '有效用户',此列允许用户执行系统命令。

  • 命令:用户可以运行的命令或一组命令。

6.典型场景配置示例
场景1:授予数据库管理员mark仅在数据库服务器(mydb_server.com)的完整权限
mark mydb_server.com=(ALL) ALL
场景2:允许用户tom以非root身份执行命令(在mydb_server.com数据库上)
tom mydb_server.com=(tom) ALL
场景3:限制用户cat 在mydb_server.com数据库上仅能执行特定命令dog
cat mydb_server.com=(cat) dog
场景4:多个命令授权(10条以内)
mark mydb_server.com=(cat) /usr/bin/command1 /usr/sbin/command2...

当需要授权的命令数量过多时(例如多到无法逐一手动输入),就需要使用命令别名(Aliases)机制。

以下是可在sudo配置文件中使用的别名示例:

User_Alias ADMINS=tom,jerry,adam
user_Alias WEBMASTER=henry,mark
WEBMASTERS WEBSERVERS=(www) APACHE
Cmnd_Alias PROC=/bin/kill,/bin/killall, /usr/bin/top

可以通过在组名前添加%前缀来指定系统用户组(而非单独用户),格式如下:

%apacheadmin WEBSERVERS=(www) APACHE
场景5:免密码执行sudo(通过NOPASSWD标记)
adam ALL=(ALL) NOPASSWD: PROCS

在此配置下,用户"adam"无需输入密码即可执行"PROCS"命令别名组中的所有命令。

7.为什么选择sudo

相比susudo提供更安全的权限管控环境且配置简便,现在 Linux 发行版大多默认启用sudo作为安全实践。

添加用户至sudo组(如用户bob):

adduser bob sudo
8.最佳实践示例
8.1典型生产环境配置
# 用户别名组定义
User_Alias SYSADMINS = admin1,admin2
User_Alias DBADMINS = db1,db2
User_Alias WEBADMINS = %nginx# 命令别名组定义
Cmnd_Alias DISK_CMD = /bin/df, /bin/mount, /bin/umount
Cmnd_Alias PROCESS_CMD = /bin/kill, /usr/bin/killall
Cmnd_Alias NETWORK_CMD = /sbin/ifconfig, /usr/sbin/iptables# 权限分配
SYSADMINS ALL=(ALL) ALL
DBADMINS ALL=(DB) /usr/bin/mysql*, /usr/bin/psql
WEBADMINS WEBSERVERS=(www-data) /usr/sbin/nginx
%developers ALL=(ALL) NOPASSWD: /usr/bin/git, /usr/bin/docker
8.2企业级安全配置
# 基础安全策略
Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    logfile="/var/log/sudo.log"
Defaults    log_host, log_year# 角色化权限定义
User_Alias SECURITY_TEAM = sarah,john
Runas_Alias UNPRIVILEGED = nobody,www-dataCmnd_Alias FIREWALL_CMD = /usr/sbin/iptables, /usr/sbin/firewalld
Cmnd_Alias AUDIT_CMD = /usr/bin/ausearch, /usr/sbin/aureport# 精细化授权
SECURITY_TEAM ALL=(root) FIREWALL_CMD, AUDIT_CMD
%backup_operators ALL=(UNPRIVILEGED) /usr/bin/rsync
zabbix ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart zabbix-agent

定期审计:sudo -l 查看用户权限。

http://www.xdnf.cn/news/9927.html

相关文章:

  • NVIDIA英伟达describe-anything软件本地电脑安装部署完整教程
  • windows-cmd 如何查询cpu、内存、磁盘的使用情况
  • 血糖监测仪解决方案推荐芯片-NRF52832/HS6621/OM6626
  • unity入门:同一文本不同颜色显示
  • 长短期记忆(LSTM)网络模型
  • Live Helper Chat 安装部署
  • Science Advances 上海理工大学与美国杜克大学(Duke University)共同开发了一种仿生复眼相机
  • springboot项目下面的单元测试注入的RedisConnectionFactory类redisConnectionFactory值为什么为空呢?
  • JavaScript极致性能优化全攻略
  • 苏州SAP代理公司排名:工业园区企业推荐的服务商
  • LabVIEW输血袋字符智能检测系统
  • 四、关系数据库标准语言SQL_1
  • windows下安装docker、dify、ollama
  • Chainlink:连接 Web2 与 Web3 的去中心化桥梁
  • go的select多路复用
  • ES分词搜索
  • #13 学习反馈
  • 【AI-安装指南】Redis Stack 的安装与使用
  • 二分法算法技巧-思维提升
  • 接口自动化测试用例的编写方法
  • pandas数据分析
  • 简述synchronized和java.util.concurrent.locks.Lock的异同 ?
  • Idea使用springAI搭建MCP项目
  • torch.zeros()用法简介
  • c# 获取电脑 分辨率 及 DPI 设置
  • Root权限:解锁Android的终极力量
  • WSL里执行python深度学习的一些方法记录
  • 如何优化Hive的查询性能?请详细说明查询优化的各个层面(SQL优化、配置优化、资源优化等)和具体方法。
  • onlyoffice docspace 协作空间企业版使用秘籍-1.如何连接外部存储
  • 数据结构之队列:原理与应用