Linux服务器权限管理之sudo高级应用
Linux服务器权限管理之sudo高级应用
前面提到Linux系统修改权限与默认权限,它都是征对用户对于目录或文件的一些权限控制,那么其实真正从安全性角度上来考虑的话,是要控制用户一定执行命令的权限,也就是哪些用户可以执行哪些命令,不可以执行哪些命令,因此也就有了sudo这个应用
对于sudo提权,也就是修改/etc/sudoers的配置文件
[root@Centos ~]# ls -ll /etc/sudoers
-r--r-----. 1 root root 5870 Aug 19 16:53 /etc/sudoers
可以看出/etc/sudoers默认的权限是440(也是系统比较安全的权限设置),当然了超级管理员肯定是有权限修改其文件内容的,不然还不哦哦了...........。
一:直接修改/etc/sudoers文件的注意事项
1、操作时最好用echo >>追加,不过cat sed同样也可以实现(不常用)
2、修改完成后一定记得检查语法visudo -c
3、确保/etc/sudoers默认的权限是440(防止权限误用)
4、及时验证修改的配置是否正确
5、确保知道root密码,以便普通用户可以通过sudo su -命令切换
二:sudo的配置文件/etc/sudoers
[root@Centos ~]# cat /etc/sudoers
# Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
修改时尽量复制系统的格式进行相关修改,防止配置错误,难以改正 修改授权某用户权限成功后,切换到用户下面,用sudo -l 来查看自己拥有哪些权限
[yuw001@Centos ~]$ sudo -l
[sudo] password for yuw001:
Matching Defaults entries for yuw001 on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL
PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin:/bin:/usr/sbin:/usr/bin, logfile=/var/log/sudo.log
User yuw001 may run the following commands on this host:
(root) /bin/ping, /bin/hostname, /usr/bin/free, /sbin/route,
/bin/netstat
使用命令时记得加上sudo
[yuw001@Centos ~]$ hostname linux
hostname: you must be root to change the host name
[yuw001@Centos ~]$ /bin/hostname linux
hostname: you must be root to change the host name
[yuw001@Centos ~]$ sudo hostname linux
[root@linux ~]# 退出重新登陆后发现主机名修改成功
配置文件一行是一个规则,前面都会用#进行注释,用‘’续行(换行)
三:配置文件中规则的分类
1、别名类型
别名类型分为以下几类
a、Host_Alias(主机别名)
生产环境中一般不会设置主机别名,一般主机别名不太常用
root ALL=(ALL) ALL 第一个ALL就是主机别名的应用位置
b、User_Alias(用户别名)
如果是表示用户组那么前面要加%
root ALL=(ALL) ALL root就是用户别名的应用位置
User_Alias ADMINS = jsmith, mikem
c、Runas_Alias别名
此别名是指定“用户身份”,即 sudo允许切换到的用户
root ALL=(ALL) ALL 第二个(ALL)就是用户别名的应用位置
Runas_Alias OP = root
d、Cmnd_Alias(命令别名)
就是定义一个别名,它可以包含一堆命令的内容(一组相关命令的集合)
root ALL=(ALL) ALL 第三个ALL就是用户别名的应用位置
Cmnd_Alias DRIVERS = /sbin/modprobe
说明
- 用户别名中的用户必须是系统真实存在的,书写时注意空格,用户别名具有特殊意义,用户别名必须使用大写
- 命令别下的成员必须使用绝对路径,可以用‘’换行
2、授权规则
授权规则就是执行的规则,授权中的所有ALL必须大写
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yumw ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
###user group sa allow to run commands anywhere
yuw ALL=/usr/sbin*,/sbin*
sa ALL= /usr/sbin*,/sbin*,!/sbin/fdisk
!表示禁止执行这个命令
[sa@linux ~]$ sudo -l
User sa may run the following commands on this host:
(root) /usr/bin*, (root) /sbin*, (root) !/sbin/fdisk
[sa@linux ~]$ sudo fdisk
Sorry, user sa is not allowed to execute '/sbin/fdisk' as root on linux.
如果将配置做下修改
###user group sa allow to run commands anywhere
yuw ALL=/usr/sbin*,/sbin*
sa ALL= !/sbin/fdisk ,/usr/sbin*,/sbin*
[sa@linux ~]$ sudo -l
User sa may run the following commands on this host:
(root) /usr/bin*, (root) /sbin*, (root) !/sbin/fdisk
[root@linux ~]# su - sa
[sa@linux ~]$ sudo fdisk
[sudo] password for sa:
Usage:
fdisk [options] <disk> change partition table
fdisk [options] -l <disk> list partition table(s)
fdisk -s <partition> give partition size(s) in blocks
Options:
-b <size> sector size (512, 1024, 2048 or 4096)
-c switch off DOS-compatible mode
-h print help
-u <size> give sizes in sectors instead of cylinders
-v print version
-C <number> specify the number of cylinders
-H <number> specify the number of heads
-S <number> specify the number of sectors per track
所以经测试结果表明,sa ALL= !/sbin/fdisk ,/usr/sbin*,/sbin*命令执行的匹配规则是从后到前的,所以后面执行sudo fdisk不会提示权限不足的现像
- 使用CNN(LSTM架构)进行序列预测基于TensorFlow
- 【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌
- 如何利用SOTER,1个版本内完成指纹支付开发?
- Rafy 框架 - 大批量导入实体
- Rafy 框架 - 执行SQL或存储过程
- 关于activitygroup过时,用frament替换操作
- Rafy 框架 - 为数据库生成注释
- CNN预测股票走势基于Tensorflow(思路+程序)
- 路径查找器AI
- android推荐使用dialogFrament而不是alertDialog
- 自定义圆角和园边的实现
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
- 应用潜在语义分析技术将文档进行3D可视化
- 利用神经网络算法的C#手写数字识别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基础知识 | R语言数据分析之控制流
- 基础知识 | R语言数据处理之日期值的转换
- 云开发 CloudBase CMS 内容管理系统正式开源啦!
- 高维数据 | R语言数据可视化之热力图
- 高维数据 | R语言数据可视化之日历图
- 打卡群刷题总结0804——二叉树的中序遍历
- 基础知识 | R语言数据管理之SQL语句
- 文本挖掘| 某作者文章的词频统计排序
- spring注解配置之@Configuration
- TS核心知识点总结及项目实战案例分析
- 用Python开发 写个消消乐小游戏
- 原理+代码|Python实战多元线性回归模型
- nestjs+vue+ts打造一个酷炫的星空聊天室(含完整数据库设计)
- JUnit 5基础指南
- 记录一则expdp任务异常处理案例