热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS下sudo命令实例讲解

一、sudo简介:1、概念:sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个

一、sudo简介:

 

   1、概念:

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

   它的特性主要有这样几点:

       1、sudo能够限制用户只在某台主机上运行某些命令。

       2、sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

       3、sudo使用时间戳文件--日志 来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。

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

 

   2、编辑配置文件命令:visudo

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

 

   3、语法,参数  

1
sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

 

       参数:

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

 

 

 

 

二、实战演练

   1定义一个用户(tom)使其拥有添加用户的特殊权限,并进行创建用户操作。

        ①、创建tom并为其创建密码

 

 

1
2
3
4
[root@localhost ~]# useradd tom
[root@localhost ~]# echo "tom" | passwd --stdin tom
Changing password for user tom.
passwd: all authentication tokens updated successfully.

 

       ②、修改配置文件,为tom添加特殊权限useradd  

1
2
3
4
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
tom     ALL=(root)      /usr/sbin/useradd       ##添加权限,这里的/usr/sbin/useradd表示普通用户执行时必须使用全路径,可以使用which 命令查看哦!
## Allows members of the 'sys' group to run networking, software,

 

       ③、切换到用户tom,验证特殊权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# su - tom    ##切换用户
[tom@localhost ~]$ sudo -l    ##查看此用户拥有的特殊权限
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
[sudo] password for tom:     ##这里需要验证密码,以保证是用户本人执行操作
Matching Defaults entries for tom 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 tom may run the following commands on this host:
    (root) /usr/sbin/useradd    ##可以以root身份,使用useradd命令

       tom执行useradd:

 

1
2
3
[tom@localhost ~]$ sudo /usr/sbin/useradd test1    ##添加用户test1
[tom@localhost ~]$ tail -1 /etc/passwd
test1:x:501:501::/home/test1:/bin/bash        ##添加成功

 

       ④、查看日志/vat/log/secure

           注意:要切换回root才有权限查看日志

 

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# tail /var/log/secure
Apr  5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Apr  5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom
Apr  5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom
Apr  5 13:56:17 localhost passwd: gkr-pam: couldn't update the 'login' keyring password: no old password was entered
Apr  5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Apr  5 13:56:43 localhost sudo:      tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list 
##tom以管理员身份执行了list命令
Apr  5 14:00:50 localhost sudo:      tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1  
##tom以管理员身份执行了useradd命令,添加用户test1
Apr  5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501
Apr  5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash
Apr  5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom

以后可以使用此命令日志查看主机是否遭到入侵攻击,或者查看某用户登录进来并使用特殊权限执行错误指令等等。所以我们要实时监控此文件的动向。

 

       ⑤、-k参数示例

 

 

1
2
3
4
5
6
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo -k    ##结束密码有效期
[tom@localhost ~]$ sudo /usr/sbin/useradd test2
[sudo] password for tom:     ##有效期结束后,执行特殊命令,需重新验证密码
[tom@localhost ~]$ tail -1 /etc/passwd
test2:x:502:502::/home/test2:/bin/bash    #添加test2成功

 

       2、别名应用,alias:

1
2
3
4
5
sudoers文件支持使用别名对同类对象进行分组:组名必须使用全大写字母,使用逗号将同类对象命令隔开。
Host_Alias:主机别名
User_Alias:用户别名
Runas_Alias:在哪些主机以谁的身份运行  的别名
Cmnd_Alias:命令别名

 

       ①、在配置文件中定义别名

1
2
3
4
5
6
[root@localhost ~]# visudo
Host_Alias USERHOSTS = 172.16.0.0/16,127.0.0.0/8,192.168.0.0/24    ##定义主机别名,可以在哪些机器执行特殊命令
Cmnd_Alias    USERADMIN=/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel    ##定义命令别名
root    ALL=(ALL)       ALL
tom     ALL=(root)      USERADMIN    ##此处定义tom可以执行别名USERADMIN中的所有命令
tom     USERHOSTS=(ROOT)        USERADMIN    ##可以在别名USERHOSTS中机器上执行别名USERADMIN中的命令

 

 

 

 

   验证:    

1
2
3
4
5
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo /usr/sbin/userdel -r test2    ##删除用户test2
[sudo] password for tom:
[tom@localhost ~]$ tail -1 /etc/passwd    ##删除成功
test1:x:501:501::/home/test1:/bin/bash

 

       ②、设禁止某用户执行某操作

 

 

1
2
tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
##tom可以以root的身份更改密码,但禁止更改root的密码。

 

       ③、设置执特权命了时,无需输入密码

 

 

1
2
tom   ALL=(root)    /usr/sbin/useradd,NOPASSWD: /usr/sbin/userdel,/usr/sbin/groupdel,PASSWD: /usr/sbin/usermod,/usr/sbin/groupmod
##这里的/usr/sbin/useradd 操作时必须使用密码;/usr/sbin/userdel, /usr/sbin/groupdel操作时可以不使用密码(跟在其后的所有操作一律不使用密码);/usr/sbin/usermod, /usr/sbin/groupmod 操作时还是要输入密码;还有PASSWD和NOPASSWD不可定义于别名中哦!

     验证:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo /usr/sbin/useradd test3
[sudo] password for tom:
[tom@localhost ~]$ sudo -k
[tom@localhost ~]$ sudo /usr/sbin/useradd test4
[sudo] password for tom:     ##useradd每次都需要输入密码
[tom@localhost ~]$ sudo -k
[tom@localhost ~]$ sudo /usr/sbin/userdel test3    ##执行userdel没有要求输入密码,NOPASSWD设置生效
[tom@localhost ~]$ tail -3 /etc/passwd
tom:x:500:500::/home/tom:/bin/bash
test1:x:501:501::/home/test1:/bin/bash
test4:x:503:503::/home/test4:/bin/bash

 

   以上就是本次sudo命令的讲解。

本文出自 “斜视天花板” 博客,请务必保留此出处http://lemidi.blog.51cto.com/8601832/1390912


推荐阅读
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败,PC端是可以请求 ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • linux6.5 配置邮件服务,centos 6.5服务器搭建邮件服务postfix和dovecot
    centos6.5搭建邮件服务postfix和dovecot------------------------------------------------安装DNS指定邮件交换记 ... [详细]
  • 【BP靶场portswigger服务端10】XML外部实体注入(XXE注入)9个实验(全)
    前言:介绍:博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。殊荣:CSDN网络安 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
author-avatar
疯叶如血_568
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有