首页 > 其他分享 >服务器运维-sudo权限控制的sudoers配置文件详细说明以及利用sudo对用户账号分组权限控制-运维sudoers配置

服务器运维-sudo权限控制的sudoers配置文件详细说明以及利用sudo对用户账号分组权限控制-运维sudoers配置

时间:2024-09-04 21:51:46浏览次数:13  
标签:bin 运维 ## sudoers sudo 命令 usr root

一、服务器运维-sudo权限控制的sudoers配置文件详细说明

1. sudo权限控制的sudoers配置文件详细说明:

[root@test ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
## 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.
## 该文件必须使用"visudo"命令编辑

## Host Aliases,Groups of machines. You may prefer to use hostnames (perhap using wildcards for entire domains) or IP addresses instead.
## 主机别名,对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符) 或IP地址代替,这时可以配置主机别名
 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

## Command Aliases,These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限, 可以通过sudo调用所有别名包含的命令,下面是一些示例

## 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

## Installation and management of software
#软件安装管理相关命令别名  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
#服务相关命令别名 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
#本地数据库升级命令别名  
Cmnd_Alias LOCATE = /usr/sbin/updatedb

## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
#代理权限相关命令别名 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY"

## Next comes the main part: which users can run what software on which machines (the sudoers file can be shared between multiple systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以执行的命令  

## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项  
## Allow root to run any commands anywhere 
## 允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
 %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
  
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## 允许wheel用户组中的用户执行所有命令  
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
 %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令 
 %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
 %users  localhost=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令

2. sudo 命令语法:

sudo [-bhHpV][-s ][-u <用户>][指令]
#或者使用
sudo [-klv]
#参数意义如下
  -b  在后台执行指令。
  -h  显示帮助。
  -H  将HOME环境变量设为新身份的HOME环境变量。
  -k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
  -l  列出目前用户可执行与无法执行的指令。
  -p  改变询问密码的提示符号。
  -s  执行指定的shell。
  -u  <用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
  -v  延长密码有效期限5分钟。
  -V  显示版本信息。
  -S  从标准输入流替代终端来获取密码

 

二、利用sudo对用户账号分组权限控制-运维sudoers配置

    虽然我的阿里云服务器只有我自己一个人用,但是接下来我还是决定要开启一个普通用户,不再只使用root用户进行登录处理。因为root权限太大,频繁登录使用存在风险。sudo就是一种权限管理机制,linux管理员可以授权于一些普通用户去执行一些root执行的操作,而不需要使用root账号登录服务器(防止暴露root密码),并且会记录详细的日志。

    在Linux中的普通用户默认权限会受到较大的限制,比如yum install安装软件会改变服务器软件环境的操作、比如reboot甚至shutdown直接关机这些命令使用普通用户都不能操作,必需要root用户权限来运行。 而普通用户想要执行这些命令, 要么使用su命令切换为root用户(暴露root密码)很不安全。因此使用sudo命令临时获取root权限(如已配置sudo权限,执行sudo只需要用户自己的密码,甚至可以免密码),就能大大提高安全性。

    安装好sudo后通过修改配置文件:/etc/sudoers 来配置权限,sudo不建议直接使用vim来编辑,有一个方便的编辑命令visudo,其可以提示语法错误。默认有一行root    ALL=(ALL)   ALL

[root@007 ~]# visudo
97 ## Allow root to run any commands anywhere 
98 root    ALL=(ALL)   ALL

上面主要配置权限的这行root    ALL=(ALL)   ALL意义如下:

root    [目标用户,也可以是组%]表示 root 用户,也可以是groupname%
ALL     [目标主机] 表示从任何的主机上都可以执行,也可以是 192.168.100.0/24。
(ALL:ALL)  [目标身份] 是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。如果有多个用户,使用sudo命令时可以加上-u选项来选择用户。
ALL     [命令控制] 表示任何命令。写具体的命令时需写全路径,命令前面加!表示禁止执行此命令。

        整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。上面的用户,主机,身份都可以在命令之前先定义别名(可以认为是一个分组),然后对分组进行权限控制。被控制用户可以使用sudo -l来查看自己的sudo权限控制。

#允许ROOTUSER别名分组用户(包括adminer,dtuser)免密码使用sudo功能,NOPASSWD: 即表示免密码
User_Alias ROOTUSER = adminer,dtuser
ROOTUSER ALL=(ALL)  NOPASSWD: ALL
#允许users组的用户使用sudo,但不能使用passwd命令
%users ALL=(root) !/usr/bin/passwd
%users ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

    sudo 的日志:在 centos中,sudo 的日志默认被记录在/var/log/secure文件中(ubuntu在/var/log/auth.log)。当我们执行 sudo 命令时,相关日志都是会被记录下来的。比如下图中显示的就是一次执行 sudo 命令的日志:

[testuser@474 ~]$ sudo tail /var/log/secure
May 22 18:06:48 localhost sshd[915]: refused connect from 112.93.153.24 (112.93.153.24)
May 22 18:33:24 localhost sshd[1077]: refused connect from 19.24.84.10 (19.24.84.10)
May 22 18:54:41 localhost sudo: onlinedev : TTY=pts/0 ; PWD=/home/testuser ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/secure

    一般小公司运维人员可以考虑给开发人员使用以下用户权限配置: 

#sudoers配置如下:
User_Alias DEVELOPER = developer,jenkins_deploy,others
DEVELOPER      ALL=(ALL)     NOPASSWD: ALL,!/bin/bash,!/bin/su,!/bin/su root,!/bin/su -,!/bin/su - root,!/usr/bin/sudo,!/usr/bin/chattr,!/usr/sbin/useradd,!/usr/sbin/userdel,!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

    另外:上面的配置中有一项配置 !/usr/bin/sudo 即禁止普通用户在sudo中使用sudo命令,什么意思呢?就是禁止普通用户使用sudo sudo passwd来绕过sudo的权限配置,这是我向公司运维人员请教才知道的。而且后来自己亲自尝试了一下,确实通过sudo sudo能绕过控制。而加上这个禁止就可防止这种问题出现。 

标签:bin,运维,##,sudoers,sudo,命令,usr,root
From: https://blog.csdn.net/weixin_47792780/article/details/141683519

相关文章

  • AWK在运维任务中的高级应用
    AWK是一个强大的文本处理工具,在Linux/Unix系统管理和运维工作中扮演着重要角色。本文将深入探讨AWK在系统管理、日志分析、性能监控和安全审计等关键运维任务中的高级应用,帮助运维人员更有效地利用这一工具。1.系统管理在系统管理中,AWK可以帮助我们快速获取和处理系统......
  • Oracle日常运维命令
    一、日常巡检命令1、检查Oracle实例状态SQL>setpages600lines600SQL>selectinstance_name,host_name,startup_time,status,database_statusfromv$instance;说明:“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状......
  • 软件项目管理资料归总(开发#实施#运维#安全#交付)
     前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概......
  • ansible自动化运维项目
    Ansible是一种基于Python开发的开源自动化运维工具,广泛应用于配置管理、批量系统配置、程序部署和运行命令等功能。它通过模块化的方式工作,无需在被管理节点上安装额外的客户端软件,只需在服务器端安装Ansible即可实现对远程节点的管理。Ansible的基本原理和组件Ansible的核心......
  • 计算机运维工程师有哪些无效行为,快看看你中了几个?
    前言随着IT技术和业务的发展及各式各样安全漏洞的涌现,运维与安全这两个专业日渐交融,人们对运维安全的重视程度越来越高,于是逐渐出现了一个新的交叉领域叫“运维安全”。黑客、白帽子忙于挖掘运维安全漏洞,企业忙于构建运维安全体系,一时间无数漏洞纷至沓来,座座堡垒拔地而起......
  • HJ44 Sudoku
    真开心,之前写过华为的数独题,直接提交就OK了=v=1#include<bits/stdc++.h>2usingnamespacestd;3inta[10][10],mp[10][10][10],cnt_mp[10][10],num_sta=0,ans[10][10];4boolb[10],fg[10],fd=0;5structSta{6intx,y;7}sta[100];8structID{9......
  • Linux运维需要掌握哪些技能?
    想要成为一名合格且优秀的Linux运维工程师,其不仅需要掌握各种各样的技能,还需要具备良好的学习能力、沟通能力、表达能力等,这样才能更好地胜任岗位要求,那么Linux运维工程师需要掌握哪些技能?以下是具体内容介绍。Linux运维工程师需要掌握的技能有很多,其中包括Linux基础、系......
  • 运维系列&AI系列&Lenovo-G双系统系列(前传-装之前搜索的):Scrapy爬虫的打包Auto-py-to-ex
    Scrapy爬虫的打包Auto-py-to-exe/PyinstallScrapy爬虫的打包Auto-py-to-exe/Pyinstall前言步骤Scrapy代码部分1.系统调用方案2.API启动方案auto-py-to-exe部分1.安装2.配置1.将基础的目录配置进去,包括`spiders`的上级目录,和对应的库文件2.把对应的python环境库文......
  • 【运维系列】如何为日志开放安全策略
    网络中日志流量的典型组网如【图1】所示。通常,路由器、交换机、服务器等设备向日志主机发送Syslog日志信息使用UDP514端口。如果日志流经防火墙,需要在防火墙上开放安全策略。【图1】日志输出典型组网防火墙支持输出多种类型的日志。在输出日志信息到日志服务器时,部分日志......
  • 【运维系列】如何为HTTP、HTTPS和RESTCONF开放安全策略
    防火墙提供了简单易用的WebUI。用户从浏览器访问承载在防火墙上的HTTPServer,可以完成绝大部分的配置管理工作。缺省情况下,防火墙启用HTTPS服务,服务端口为8443,且不可修改。从浏览器发起的HTTP访问会被重定向到HTTPS。RESTCONF以HTTP协议的方法提供了NETCONF协议的核心功能,编程接......