zoukankan      html  css  js  c++  java
  • sudo的使用和配置

    1 sudo是什么

    Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab, /etc/samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。

    2 sudo的特点

    sudo设计者的宗旨是:给用户尽可能少的权限但仍允许完成他们的工作。所以,sudo有以下特点:

    •    sudo能够限制指定用户在指定主机上运行某些命令。
    •    sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,且能将日志传到中心主机或者日志服务器。
    •    sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
    •    sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”。

    3 sudo的命令

    3.1 sudo条目语法

     who host=(runas)  TAG:command

    • who :运行者用户名
    • host:主机
    • runad:以那个身份运行
    • TAG:标签
    • command:命令

    样例: 

    oracle ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel

    注:上面的意思就是:oracle用户可以在任何地方以root身份无密码执行useradd有密码执行usermod。

    3.2 别名(宏)

     此外sudo还支持别名的定义,我们通过引用定义好的别名可以提供工作效率:
           who                      User_Alias
           which_hosts          Host_Alias
           runas                    Runas_Alias
           command             Cmnd_Alias

     User_Alias Host_Alias Runas_Alias Cmnd_Alias
    用户名 主机名 用户名 命令路径(全路径
    组名(%) IP 地址 组名(%) 目录
    其他User_Alias 网络地址 其他Runas_Alias 其他Cmnd_Alias
      其他Host_Alias    

    3.3 使用visudo编辑配置文件(/etc/sudoers)

    虽然我们可以使用vim直接来编辑sudo的配置文件,但sudo提供了更加智能的编辑命令visudo,它能在编辑配置文件的同时帮我们检查语法错误,并在错误时提供快捷的返回功能,相当nice。

    注意在你使用visudo命令前,你有必要设置下EDITOR=vim来替换默认的vi,可以打开的时候语法高亮,看起来起来舒服多了。

    [root@centos74 ~]$ vim ~/.bash_profile                   #编辑profile文件
    # 添加如下行
    export EDITOR=vim
    
    [root@centos74 ~]$ source ~/.bash_profile                # 让其立即生效

    /etc/sudoers是sudo的主配置文件,如果我们想设置sudo设置,建议在/etc/sudoers.d/下面创建文件编辑。

    [root@centos74 sudoers.d]$ visudo  -f /etc/sudoers.d/oracle2          # 这里我给oracle2用户一些sudo权限,命令会在sudoers.d目录下创建一个文件的。这个文件名貌似使用.conf结尾貌似不可以的。

    3.4 常用选项

    • -l:查看当前用户可以使用的所有sudo命令
    •  -g:以指定组执行
    • -u:以指定用户身份执行
    • -K:移除时间戳文件
    • -k:时间戳为元年(下次就必须输入密码)
    • -v:更新时间戳,时间戳默认5分钟,五分钟到就需要再次密码,使用-v可以续5分钟。

    关于时间戳这个东西。我们默认使用sudo执行命令的时候,第一次是需要输入密码的,短时间内再次执行sudo命令是不需要再次输入密码的。这个时间是有时间戳控制的。我们可以指定-k修改时间戳为元年,下次在sudo执行命令就必须输入密码。

    3.5常用实例讲解

    3.5.1 oracle用户可以在任何地点以任何的身份执行所有命令,等同于root。

    oracle ALL=(ALL)        ALL

    3.5.2 oracle2用户可以在任何地点以root的身份执行命令useradd(无需密码)和usermod(需要密码).

    oracle2 ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel

    这样oracle2就可以免密码useradd,有密码(密码为oracle2的自身密码)使用userdel。

    使用方式如下

    [oracle2@centos74 ~]$ useradd test001                               # 直接使用命令是不可以的。
    -bash: /usr/sbin/useradd: Permission denied
    [oracle2@centos74 ~]$ sudo useradd test001                          # 必须加sudo
    [oracle2@centos74 ~]$ id test001                                    # 查看添加的用户信息
    uid=1031(test001) gid=1032(test001) groups=1032(test001)

    3.5.3 oracle3用户只能在192.168.1.120主机远程登录并以root身份执行ifconfig eth0命令。

    Cmnd_Alias NETCMND = /sbin/ifconfig eth0
    oracle3 192.168.1.120 = (root) NOPASSWD:NETCMND

     

    3.5.4 oracle4用户可以执行/usr/sbin下的所有命令除了/usr/sbin/userdel

    oracle4 ALL=(ALL) /usr/sbin/,!/usr/sbin/userdel

    3.5.5 oracle5用户可以cat /var/log/secure*的文件

    oracle5 ALL=(ALL) /bin/cat /var/log/secure*,!/bin/cat /var/log/secure* *

    注意这个如果不加!后面的内容,用户可以执行如下命令cat /var/log/secure /etc/shadow 这样的命令随便查看系统的文件。很危险。

    3.6 sudo的日志审计

    为了能够明确的追究责任,sudo还提供了人性化的日志功能,在/var/log/secure日志文件中可以查看到,用于记录所有sudo类用户的所有动作。

  • 相关阅读:
    数据结构-向量
    可信执行环境(TEE)介绍 与应用
    ACM
    带哨兵节点和不带哨兵节点的单链表操作的对比
    java:Conllection(List,set,get,map,subList)使用
    java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作
    java:Conllection中的List,ArrayList添加元素,删除元素,输出元素
    java:类集框架conllection接口list,set
    java:投个票程序
    git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_009.html
Copyright © 2011-2022 走看看