zoukankan      html  css  js  c++  java
  • linux下sudo命令[转]

    一、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,

    wKioL1M_m6DDyGVXAADPOuo39sw524.jpg

           ③、切换到用户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中的命令

    wKioL1M_prjRUWcOAABgZghDtng583.jpg

    wKiom1M_qqfQOn_fAACaTi3hRaY931.jpg

    wKioL1M_pt2wM-QPAACp6Bfl2QE479.jpg

       验证:    

    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不可定义于别名中哦!

    wKiom1M_rWjAuQbqAADBVOOV85E794.jpg

         验证:

    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

    转自:http://www.centoscn.com/CentOS/help/2014/0408/2741.html

    小赢靠智,大赢唯德! --欢迎各位博友提宝贵意见,相互交流
  • 相关阅读:
    将配置文件自动复制到vs的测试项目中
    用索引器简化的C#类型信息访问
    Requested Clipboard operation did not succeed的解决办法
    在win2003上IIS部署可能出现的问题的解决方案
    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
    在Ubuntu虚拟机中配置bridge共享上网
    Ajax学习日志
    Workflow architecture in Windows SharePoint Services (version 3):WWF和WSS V3 的关系 无为而为
    使用BizTalk的必须关注:HWS已经死了,微软已经放弃HWS了,估计替代产品就WWF。(外加其它的宣告死亡的工具和API列表) 无为而为
    我想要求主管给我们升级电脑,但是主管不肯,大家报一报公司电脑的配置,我看我的电脑是不是最差的,顺便谈谈你们公司电脑硬件升级策略 无为而为
  • 原文地址:https://www.cnblogs.com/coolgun/p/4601469.html
Copyright © 2011-2022 走看看