首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Linux下sudo命令实例讲解

  • 23-11-18 14:20
  • 3179
  • 8562
blog.csdn.net

转载自:点击打开链接

一、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、语法,参数

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

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

二、实战演练

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

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

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

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


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

  1. [root@localhost ~]# su - tom ##切换用户
  2. [tom@localhost ~]$ sudo -l ##查看此用户拥有的特殊权限
  3. We trust you have received the usual lecture from the local System
  4. Administrator. It usually boils down to these three things:
  5. #1) Respect the privacy of others.
  6. #2) Think before you type.
  7. #3) With great power comes great responsibility.
  8. [sudo] password for tom: ##这里需要验证密码,以保证是用户本人执行操作
  9. Matching Defaults entries for tom on this host:
  10. requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE
  11. INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
  12. env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
  13. LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
  14. _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
  15. User tom may run the following commands on this host:
  16. (root) /usr/sbin/useradd ##可以以root身份,使用useradd命令
tom执行useradd
  1. [tom@localhost ~]$ sudo /usr/sbin/useradd test1 ##添加用户test1
  2. [tom@localhost ~]$ tail -1 /etc/passwd
  3. test1:x:501:501::/home/test1:/bin/bash ##添加成功
④、查看日志/vat/log/secure
注意:要切换回root才有权限查看日志
  1. [root@localhost ~]# tail /var/log/secure
  2. Apr 5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
  3. Apr 5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom
  4. Apr 5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom
  5. Apr 5 13:56:17 localhost passwd: gkr-pam: couldn't update the 'login' keyring password: no old password was entered
  6. Apr 5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
  7. Apr 5 13:56:43 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list
  8. ##tom以管理员身份执行了list命令
  9. Apr 5 14:00:50 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1
  10. ##tom以管理员身份执行了useradd命令,添加用户test1
  11. Apr 5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501
  12. Apr 5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash
  13. Apr 5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom
以后可以使用此命令日志查看主机是否遭到入侵攻击,或者查看某用户登录进来并使用特殊权限执行错误指令等等。所以我们要实时监控此文件的动向。

⑤、-k参数示例

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

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

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



验证:

  1. [root@localhost ~]# su - tom
  2. [tom@localhost ~]$ sudo /usr/sbin/userdel -r test2 ##删除用户test2
  3. [sudo] password for tom:
  4. [tom@localhost ~]$ tail -1 /etc/passwd ##删除成功
  5. test1:x:501:501::/home/test1:/bin/bash
②、设禁止某用户执行某操作
  1. tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
  2. ##tom可以以root的身份更改密码,但禁止更改root的密码。


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

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

验证:

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
















注:本文转载自blog.csdn.net的等的人心好烦的文章"https://blog.csdn.net/yongchaocsdn/article/details/78680085"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top