sudo配置使用详悉

【前 言】

在日常的系统管理中,如何分配权限是其中重要一环,本着权限越小安全性越好的原则,我们通常不能随意的使用root用户来登录管理系统,而应该使用普通用户。那么问题来了,普通用户对某些文件或某些命令是没有权限执行操作的,只有管理员才有权限,我们可以使用su命令切换到管理员账户去执行操作,但是这使得每个人都需要知道管理员的密码且切换成管理员用户后用户就可以在系统上任意驰骋,这就没有什么安全性可言了。sudo就是我们的救星,其能很好的满足我们的管理需求,下面就让我们一块来学习下sudo的相关知识。

【何为sudo】

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。

【sudo的功能特性】

1、限制指定用户在指定主机上运行指定的管理命令;

2、详细记录每个用户基于sudo执行的命令的相关日志信息;

3、sudo使用时间戳文件来执行类似的“检票”系统。“检票系统”:用户第一次执行sudo会要求输入自身密码,验证通过用户会获得一个有固定存活时长的“入场券”;默认为5分钟;

4、 sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。

【sudo工作原理】

sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

【配置sudo】

以管理员用户身份使用专用配置编辑命令(visudo)来编辑配置文件(/etc/sudoers)完成配置。

   注意:编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。

 配置文件的组成部分:

一、别名定义(不是必须的);

通用格式:Alias_Type NAME = item1, item2, ...

注意: ◆NAME 就是别名啦,NMAE的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头,比如SYSADMIN、SYS_CONTROL是合法的,sYSADMIN或1SYNAD是不合法的;

◆item可以理解为项目也可理解为成员,如果一个别名下有多个成员,成员与成员之间,通过半角的逗号","分隔;且成员必须是有效并事实存在的;

◆一次定义多个别名,相互之间用:分隔。

1、定义用户别名:

User_Alias NAME = item1, item2, item3 : NAME = item4, item

item可以为:用户,%用户组,#用户ID(#UID),用户组ID(%#GID),用户别名;

实例:User_Alias ADMINS = jsmith, mikem : WEBADMIN = jerry,tom

2、定义主机别名:

Host_Alias NAME = item1, item2, item3 : NAME = item4, item5

item可以为: 主机名, ip地址(单个或整段),网络地址, 掩码,host_alias;

实例:Host_Alias WEB1 = web01, test1 : WEB2 = web2,192.168.1.0/24

3、定义命令别名:

Cmnd_Alias NAME = item1, item2, item3 : NAME = item4, item5

item可以为:命令名, 目录(目录下的所有命令),"sudoedit"(编辑sudo本身),Cmnd_Alias;

注意:命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径;当需要排除指定命令时,只需要在定义的最后使用!标记要排除的命令;

实例:Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

Cmnd_Alias PWD = usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root

4、定义目标用户别名: 即指定sudo 允许切换至的用户

Runas_Alias NAME = item1, item2, item3 : NAME = item4, item5

item可以为: 用户,%用户组,#用户ID(#UID),用户组ID(%#GID),用户别名;

实例:Runas_Alias ADMIN = root, jerry

二、授权规则(必须的);

定义格式:

[%]WHO HOST=(WHOM)[NOPASSWD:] COMMAND1,  COMMAND2...

谁以谁的身份在那些主机上运行那些命令

WHO: 用户名,用户列表别名,用户组别名(前面必须加%);

定义格式说明:

授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1, [命令2],[命令3]......

注解:

凡是[ ]中的内容,是可以省略;命令与命令之间用,号分隔;在[(切换到哪些用户或用户组)] ,如果省略,则默认为root用户;如果是ALL ,则代表能切换到所有用户;注意要切换到的目的用户必须用()号括起来,比如(ALL)、(beinan)。

注意:此处是否需要密码验证(NOPASSWD:),验证的是WHO的的密码,而不是目标用户的密码;且NOPASSWD:的定义位置很重要,在NOPASSWD:前面的命令需要密码验证,在其后面的命令都无需密码验证。

实例:root  ALL=(ALL) ALL  #root用户对所有主机拥有所有用户所有命令的执行权限;

USE WEB1=(ADMIN) NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel,! /usr/sbin/userdel admin

#别名用户USE在别名主机WEB1上可以切换到目标用户ADMIN,无需输入用户的密码,便能执行用户添加命令、删除命令,但不能执行删除admin这个用户。

三、运用举例;

[[email protected] root]$ passwd tom  #修改用户tom的密码;
passwd: Only root can specify a user name. #提示只有管理员才有权限;
[[email protected] etc]# visudo -f /etc/sudoers #编辑sudo的配置文件,添加授权定义;
 User_Alias TEST = tom,jerry #定义用户别名TEST包含用户tom,jerry;
 Runas_Alias OP = root #定义目标用户是root,也就是使用root用户来执行命令;
 Cmnd_Alias USEADM = /usr/sbin/useradd,/usr/sbin/userdel #定义命令别名,USEADM可创建、
 删除用户;
 Cmnd_Alias PWDADM = /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root #定义命令别名,
 PWDADM可以修改用户密码,root用户除外; 
 TEST ALL=(OP) USEADM, NOPASSWD: PWDADM #定义授权规则,tom与jerry可以在主机上以root用户的身
 份执行用户的添加、删除(需要验证用户密码),可以修改任意用户密码,root用户除外(无需验证用户密码);
[[email protected] root]$ sudo -l #以tom账户登录系统时,显示tom在该主机上使用sudo可用的命令;
User tom may run the following commands on this host:
    (root) /usr/sbin/useradd, /usr/sbin/userdel, (root) NOPASSWD: /usr/bin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root
[[email protected] root]$ sudo passwd test #修改test用户的密码;
Changing password for user test. #此处直接提示修改test的密码,而没有验证tom的密码;
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully. #修改成功!
[[email protected] root]$ sudo useradd test1 #添加用户test1;
[sudo] password for tom: #提示需要验证tom的密码,输入tom的密码才能继续;
[[email protected] ~]# tail -1 /etc/passwd #查看用户文件,验证test1是否添加成功;
test1:x:503:503::/home/test1:/bin/bash  #OK,test1已经成功添加!

【sudo命令的使用】

sudo [选项] 命令

选项:

-l: 查看当前用户可执行的sudo命令

-u 用户名 命令:以指定用户的身份运行后面的“命令”;此

-k: 清除“入场券”;

-b 命令:在后台运行指定的命令

-p 提示语:可以更改询问密码的提示语,其可用%u变量来替换为用户名,%h替换为主机名;

-e 文件路径:不是执行命令,而修改指定的文件;

[[email protected] root]$ sudo -l #显示jerry可执行的sudo命令;
Matching Defaults entries for jerry 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

User jerry may run the following commands on this host:
    (root) /usr/sbin/useradd, /usr/sbin/userdel, (root) NOPASSWD: /usr/bin/passwd [a-zA-Z0-9]*, !/usr/bin/passwd root
[[email protected] root]$ sudo -u root passwd test1 #使用root用户来修改test1的密码;此处用户与命令
的授权需事先定义好,否则会执行不成功,报错!
Changing password for user test1.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[[email protected] root]$ sudo -p "%u Please you pwd on %h " userdel test1 #修改询问密码的提示语;
jerry Please you pwd on dns 
[[email protected] root]$ 
 # 好了,sudo命令的更多更具体使用可以去找下man,此处我就简单说明下。

OK!sudo的使用、定义、配置,我就简单总结至此,要是有啥总结不周之处,还请各位大神拍砖!谢谢!

时间: 2024-10-25 21:24:30

sudo配置使用详悉的相关文章

Python安装、配置图文详解

原文地址:http://weixiaolu.iteye.com/blog/1617440 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(IDE) 1. 在Eclipse中安装PyDev插件 2. 配置Python Interpreters 四. 创建Python Project 五. 编写HelloWorld 六. 小结 一. Python简介: Python在Linux.wi

Python安装、配置图文详解(转载)

Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(IDE) 1. 在Eclipse中安装PyDev插件 2. 配置Python Interpreters 四. 创建Python Project 五. 编写HelloWorld 六. 小结 一. Python简介: Python在Linux.windows.Mac os等操作系统下都有相应的版本,不管在

使用HeartBeat实现高可用HA的配置过程详解

使用HeartBeat实现高可用HA的配置过程详解 一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务.常见的实现高可用的开源软件有 heartbeat 和 keepalived. 这样,一台 web 服务器一天24小时提供web服务,难免会存在 web 服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望

Nginx实现集群的负载均衡配置过程详解

Nginx实现集群的负载均衡配置过程详解 Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已. Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和内核的修改,它只是单纯地把用户的请求转发到后面的机器上.这就意味着,后端的 RS 不需要配置公网. 一.实验环境 Nginx 调度器 (public 172.16.254.200 privite 192.168.0.48)RS1只有内网IP (192.168

Spartan6系列之芯片配置模式详解

1.   配置概述 Spartan6系列FPGA通过把应用程序数据导入芯片内部存储器完成芯片的配置.Spart-6 FPGA可以自己从外部非易失性存储器导入编程数据,或者通过外界的微处理器.DSP等对其进行编程.对以上任何一种情况,都有串行配置和并行配置之分,串行配置可以减少芯片对引脚的要求,并行配置对8bit/16bit Flash或者微处理器来说更合适. 因为Xilinx的FPGA器件的配置数据存储在CMOS 配置锁存器内(CCL),因此Spartan6 FPGA器件上电后必须重新配置.Sp

CentOS7下Firewall防火墙配置用法详解

官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld1 修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙拦截 1 2 3 4 5 6 7

nginx配置参数详解

配置参数详解 user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍于CPU. error_log  logs/error.log;  error_log  logs/error.log  notice;  error_log  logs/error.log  info;  错误日志:存放路径. pid logs/nginx.pid; pid(进程标识符):存放路径

Linux LVM逻辑卷配置过程详解

Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要. LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性.RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出

httpd(2.2&2.4)RPM搭建配置定义详解

一.RPM包安装配置程序环境 1.CentOS6系列(默认httpd2.2) (1)配置文件:/etc/httpd/conf/httpd.conf.  /etc/httpd/conf.d/*.conf() (2)服务脚本:/etc/rc.d/init.d/httpd 配置文件:/etc/sysconfig/httpd (3)主程序文件:/usr/sbin/httpd.  /usr/sbin/httpd.event.  /usr/sbin/httpd.worker (4)日志文件目录:/var/l