zoukankan      html  css  js  c++  java
  • sudoers文件解析

    分类: LINUX

        今天在用户组中新加了一个普 通用户,开始这个用户没有sudo权限,于是通过sudo visudo修改了sudo的配置文件,赋予了普通用户的root权限。后来想着能不能将/etc/sudoers文件的访问权限改为777,然后直接在 编辑这个文件。于是想也没想就这么干了。结果改完之后发现自己给自己挖了一个坑,把自己挡在了sudo的门外。
          /etc/sudoers是sudo的配置文件,它的属性必需为440。当我用sudo chmod 777 /etc/sudoers修改了sudoers文件的访问权限后,sudo就不能再用了。再想通过sudo chmod 440 /etc/sudoers修改文件sudoers的访问权限,或着使用sudo 时结果提示:sudo: /etc/sudoers is mode 0777, should be 0440。这样就自己把自己关在了sudo的门外。这样想通过sudo su或sudo -i切到root用户已经不可能了。这时用su root还可以切换到root。这样就可以修改/etc/sudoers文件的访问权限。问题也就解决了。

          后来在网上找到一篇关于sudoers文件的解析,这里就贴在下边。

    Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:
    § Sudo能够限制用户只在某台主机上运行某些命令。
    § Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
    § Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
    § Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
    编辑配置文件命令:visudo
    默认配置文件位置:/etc/sudoers
    [root@localhost ~]# cat /etc/sudoers
    # sudoers file.
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # See the sudoers man page for the details on how to write a sudoers file.
    #
    # Host alias specification
    # User alias specification

    # Cmnd alias specification

    # Defaults specification

    # Runas alias specification

    # User privilege specification
    root ALL=(ALL) ALL

    # Uncomment to allow people in group wheel to run all commands
    # %wheel ALL=(ALL) ALL

    # Same thing without a password
    # %wheel ALL=(ALL) NOPASSWD: ALL

    # Samples
    # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
    # %users localhost=/sbin/shutdown -h now
    [root@localhost ~]#

    可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现,不过编辑之前最好看一下它的sample.sudoers文件,里面有一个相当详细的例子可以参考。
    #第一部分:用户定义,将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。
    User_Alias FULLTIMERS = millert, mikef, dowdy
    User_Alias PARTTIMERS = bostley, jwfox, crawl
    User_Alias WEBMASTERS = will, wendy, wim
    #第二部分,将操作类型分类。
    Runas_Alias OP = root, operator
    Runas_Alias DB = oracle, sybase
    #第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。
    Host_Alias SPARC = bigtime, eclipse, moet, anchor :
    SGI = grolsch, dandelion, black :
    ALPHA = widget, thalamus, foobar :
    HPPA = boa, nag, python
    Host_Alias CUNETS = 128.138.0.0/255.255.0.0
    Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
    Host_Alias SERVERS = master, mail, www, ns
    Host_Alias CDROM = orion, perseus, hercules
    #第四部分,定义命令和命令地路径。命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
    Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,
    /usr/sbin/restore, /usr/sbin/rrestore
    Cmnd_Alias KILL = /usr/bin/kill
    Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
    Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
    Cmnd_Alias HALT = /usr/sbin/halt, /usr/sbin/fasthalt
    Cmnd_Alias REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
    Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,
    /usr/local/bin/tcsh, /usr/bin/rsh,
    /usr/local/bin/zsh
    Cmnd_Alias SU = /usr/bin/su
    # 这里是针对不同的用户采用不同地策略,比如默认所有的syslog直接通过auth 输出。FULLTIMERS组不用看到lecture(第一次运行时产生的消息);用户millert使用sudo时不用输入密码;以及logfile的 路径在/var/log/sudo.log而且每一行日志中必须包括年。
    Defaults syslog=auth
    Defaults:FULLTIMERS !lecture
    Defaults:millert !authenticate
    Defaults@SERVERS log_year, logfile=/var/log/sudo.log
    #root和wheel组的成员拥有任何权利。 如果想对一组用户进行定义,可以在组名前加上%,对其进行设置.
    root ALL = (ALL) ALL
    %wheel ALL = (ALL) ALL
    #FULLTIMERS可以运行任何命令在任何主机而不用输入自己的密码
    FULLTIMERS ALL = NOPASSWD: ALL
    #PARTTIMERS可以运行任何命令在任何主机,但是必须先验证自己的密码。
    PARTTIMERS ALL = ALL
    #jack可以运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码,而后一个必须匹配掩码。
    jack CSNETS = ALL
    #lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
    lisa CUNETS = ALL
    #用户operator可以运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的所有命令。
    operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,
    /usr/oper/bin/
    #joe可以运行su operator命令
    joe ALL = /usr/bin/su operator
    #pete可以为除root之外地用户修改密码。
    pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
    #bob可以在SPARC和SGI机器上和OP用户组中的root和operator一样运行如何命令。
    bob SPARC = (OP) ALL : SGI = (OP) ALL
    #jim可以运行任何命令在biglab网络组中。Sudo默认“+”是一个网络组地前缀。
    jim +biglab = ALL
    #在secretaries中地用户帮助管理打印机,并且可以运行adduser和rmuser命令。
    +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
    #fred能够直接运行oracle或者sybase数据库。
    fred ALL = (DB) NOPASSWD: ALL
    #john可以在ALPHA机器上,su除了root之外地所有人。
    john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
    #jen可以在除了SERVERS主机组的机器上运行任何命令。
    jen ALL, !SERVERS = ALL
    #jill可以在SERVERS上运行/usr/bin/中的除了su和shell命令之外的所有命令。
    jill SERVERS = /usr/bin/, !SU, !SHELLS
    #steve可以作为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。
    steve CSNETS = (operator) /usr/local/op_commands/
    #matt可以在他的个人工作站上运行kill命令。
    matt valkyrie = KILL
    #WEBMASTERS用户组中的用户可以以www的用户名运行任何命令或者可以su www。
    WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
    #任何用户可以mount或者umount一个cd-rom在CDROM主机上,而不用输入密码。
    ALL CDROM = NOPASSWD: /sbin/umount /CDROM,
    /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM

    三,使用
    指令名称:sudo
    使用权限:在 /etc/sudoers 中有出现的使用者
    使用方式:sudo -V
    sudo -h
    sudo -l
    sudo -v
    sudo -k
    sudo -s
    sudo -H
    sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
    用法:sudo command
    说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行
    参数:
    -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 更改为其他人)执行的指令
    范例:
    sudo -l 列出目前的权限
    sudo -V 列出 sudo 的版本资讯
    指令名称:sudoers(在fc5下显示不能找到此命令,但用man可以查到其用法。)
    用来显示可以使用sudo的用户

  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/4816808.html
Copyright © 2011-2022 走看看