码迷,mamicode.com
首页 > 体系相干 > 详细

linux详解sudoers

时间:2018-07-17 16:34:17      浏览:3648      评论:0      收藏:0      [点我收藏+]

标签:途径   pre   file   办事   bottom   disk   chkconfig   出现   dba   

sudo应用

  Linux是多用户多义务的操作体系, 共享该体系的用户常常不只一个。出于安然性推敲, 有须要经过过程useradd创建一些非root用户, 只让它们具有不完全的权限; 如有须要,再来晋升权限履行。
  sudo就是来处理这个需求的: 这些非root用户不须要知道root的暗码,便可以提权到root,履行一些root才能履行的敕令。
  履行sudo -u <用户名> <敕令>, 将许可以后用户,提权到<用户名>的身份,再履行前面的<敕令>, 即使<敕令>本来须要root权限。提权到<用户名>身份时,是以<用户名>的身份来履行敕令的,是以创建的文件默许属于<用户名>用户。
  是以,当userB履行以下敕令时:

sudo -u userA touch /tmp/belong-to-who.tmp

  创建的/tmp/belong-to-who.tmp 文件属于用户userA。
  假设不带-u, 则默许应用root用户,而大年夜多半时辰sudo都是要提权到root的,所以-u <用户名>可以省略为:

sudo <敕令>

  须要留意的是: 履行sudo时输入的暗码是以后用户的暗码, 并不是<用户名>的暗码。

  sudo -u <用户名>和su - <用户名>比拟:

sudo -u <用户名>:须要输入以后用户的暗码,提权到<用户名>身份履行敕令后前往以后用户;
su - <用户名>:则是输入目标用户的暗码,切换到目标用户。

sudo敕令履行过程

  将以后用户切换到超等用户下,或切换到指定的用户下,然后以超等用户或其指定切换到的用户身份履行敕令,履行完成后,直接退回到以后用户。
  详细任务过程以下:
  当用户履行sudo时,体系会主动寻觅/etc/sudoers文件,断定该用户能否有履行sudo的权限
  –>确认用户具有可履行sudo的权限后,让用户输入用户本身的暗码确认
  –>若暗码输入成功,则开端履行sudo后续的敕令

付与用户sudo操作的权限

  经过过程useradd添加的用户,其实不具有sudo权限。在ubuntu/centos等体系下, 须要将用户参加admin组或许wheel组或许sudo组。以root用户身份履行以下敕令, 将用户参加wheel/admin/sudo组:

usermod -a -G wheel <用户名>

  假设提示wheel组不存在, 则还须要先创建该组:

groupadd wheel

/etc/sudoers内容详解

  sudo的权限控制可以在/etc/sudoers文件中检查到。普通来讲,经过过程cat /etc/sudoers指令来检查该文件, 会看到以下几行代码:

root ALL=(ALL:ALL) ALL
%wheel ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL

  对/etc/sudoers文件停止编辑的代码公式可以概括为:

授权用户/组 主机=[(切换到哪些用户或组)] [能否须要输入暗码验证] 敕令1,敕令2,...

  凡是[ ]中的内容, 都能省略; 敕令和敕令之间用,号分隔,为了便利解释, 将公式的各个部分称呼为字段1 - 字段5:

授权用户/组 主机 =[(切换到哪些用户或组)] [能否须要输入暗码验证] 敕令1,敕令2,...
字段1 字段2 =[(字段3)] [字段4] 字段5
字段3、字段4,是可以省略的。

  在下面的默许例子中:

  "字段1"不以%号开首的表示"将要授权的用户", 比如例子中的root;以%号开首的表示"将要授权的组", 比如例子中的%wheel组 和 %sudo组。
  "字段2"表示许可登录的主机, ALL表示一切; 假设该字段不为ALL,表示授权用户只能在某些机械上登录本办事器来履行sudo敕令. 比如:

jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown

  表示: 浅显用户jack在主机(或主机组)mycomputer上, 可以经过过程sudo履行reboot和shutdown两个敕令。"字段3"和"字段4"省略。
  "字段3"假设省略, 相当于(root:root),表示可以经过过程sudo提权到root; 假设为(ALL)或许(ALL:ALL), 表示可以或许提权到(随便任性用户:随便任性用户组)。请留意,"字段3"假设没省略,必须应用( )双括号包含起来。如许才能辨别是省略了"字段3"照样省略了"字段4"。
  "字段4"的能够取值是NOPASSWD:。请留意NOPASSWD前面带有冒号:。表示履行sudo时可以不须要输入暗码。比如:

lucy ALL=(ALL) NOPASSWD: /bin/useradd

  表示: 浅显用户lucy可以在任何主机上, 经过过程sudo履行/bin/useradd敕令, 并且不须要输入暗码.
  又比如:

peter ALL=(ALL) NOPASSWD: ALL

  表示: 浅显用户peter可以在任何主机上, 经过过程sudo履行任何敕令, 并且不须要输入暗码。
  "字段5"是应用逗号分开一系列敕令,这些敕令就是授权给用户的操作; ALL表示许可一切操作。
  敕令都是应用相对途径, 这是为了防止目次下有同名敕令被履行,从而形成安然隐患。假设你将授权写成以下安然性欠妥的格局:

lucy ALL=(ALL) chown,chmod,useradd

  那么用户就有能够创建一个他本身的法式榜样, 也定名为userad, 然后放在它的本地途径中, 如此一来他便可以或许应用root来履行这个"名为useradd的法式榜样"。这是相当风险的!
敕令的相对途径可经过过程which指令检查到: 比如which useradd可以检查到敕令useradd的相对途径: /usr/sbin/useradd

编辑/etc/sudoers

  在实际中,去编辑/etc/sudoers文件,体系提示我没权限啊,怎样办?这是由于/etc/sudoers的内容如此敏感,以致于该文件是只读的。所以,编辑该文件前,请确认清楚你知道本身正在做甚么。
  激烈建议经过过程visudo敕令来修改该文件,经过过程visudo修改,假设设备掉足,会有提示。
  不过,体系文档推荐的做法,不是直接修改/etc/sudoers文件,而是将修改写在/etc/sudoers.d/目次下的文件中。假设应用这类方法修改sudoers,须要在/etc/sudoers文件的最早行,加上#includedir /etc/sudoers.d一行(默许已有):

#includedir /etc/sudoers.d

  留意了,这里的指令#includedir是一个全体, 前面的#号不克不及丢,并不是注释,也不克不及在#号后有空格。任安在/etc/sudoers.d/目次下,不以~号开头的文件和不包含.号的文件,都邑被解析成/etc/sudoers的内容。
  文档中是这么说的:

# This will cause sudo to read and parse any files in the /etc/sudoers.d
# directory that do not end in ~ or contain a . character.

# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.

# Note also, that because sudoers contents can vary widely, no attempt is
# made to add this directive to existing sudoers files on upgrade.

# Finally, please note that using the visudo command is the recommended way
# to update sudoers content, since it protects against many failure modes.

敕令感化域

papi ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd

  表示: 用户papi能在一切能够出现的主机上, 提权到root下履行/bin/chown, 不用输入暗码; 但运转/usr/sbin/useradd 敕令时须要暗码.
  这是由于NOPASSWD:只影响了厥后的第一个敕令: 敕令1。下面给出的公式只是简化版,完全的公式以下:

授权用户/组 主机=[(切换到哪些用户或组)] [能否须要输入暗码验证] 敕令1, [(字段3)] [字段4] 敕令2, ...

  在具有sudo操作的用户下, 履行sudo -l可以检查到该用户被许可和被禁止运转的敕令.

通配符和撤消敕令

papi ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk

  敕令前面加上!号表示撤消该敕令。该例子的意思是: 用户papi在一切能够出现的主机上, 可以或许运转目次/usr/sbin和/sbin下一切的法式榜样, 但fdisk除外。

输入暗码时有反应

  当应用sudo后输入暗码,其实不会显示任何器械 —— 乃至连惯例的星号都没有。有个办法可以处理该成绩。翻开/etc/sudoers文件找到下述一行:

Defaults env_reset

  修改成:

Defaults env_reset,pwfeedback

修改sudo会话时间

  假设你常常应用sudo 敕令,你肯定留意到过当你成功输入一次暗码后,可以不消再输入暗码便可以运转几次sudo敕令。然则一段时间后,sudo 敕令会再次请求你输入暗码。默许是15分钟,该时间可以调剂。添加timestamp_timeout=分钟数便可。时间以分钟为单位,-1表示永不过时,但激烈不推荐。
  比如我欲望将时间延长到1小时,照样翻开/etc/sudoers文件找到下述一行:

Defaults env_reset

  修改成:

Defaults env_reset,pwfeedback,timestamp_timeout=60

实际

  针对MySQL数据库的设置,让test组中的test用户具有/etc/init.d/mysqld的权限:

[[email protected] ~]# groupadd test
[[email protected] ~]# useradd -g test -m -d /home/test -s /bin/bash test
[[email protected] ~]# passwd test

[[email protected] ~]# visudo
# test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
test ALL=(ALL) /etc/init.d/mysqld

#start mysql 
[[email protected] ~]# su test
[[email protected] ~]$ sudo /etc/init.d/mysqld start

#stop mysql
[[email protected] ~]# su test
[[email protected] ~]$ sudo /etc/init.d/mysqld stop

  针对tomcat的设置,让test组中的test用户具有tomcat操作的权限:

[[email protected] ~]# groupadd test
[[email protected] ~]# useradd -g test -m -d /home/test -s /bin/bash test
[[email protected] ~]# passwd test

[[email protected] ~]# visudo
# test ALL=(ALL) /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
[[email protected] ~]# vim /usr/local/tomcat/bin/catalina.sh

### JDK 
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre

#start tomcat 
[[email protected] ~]# su test 
[[email protected] ~]$ sudo /usr/local/tomcat/bin/startup.sh
[[email protected] ~]$ ss -ntlup | grep Java
[[email protected] ~]$ curl -I http://localhost:8080

#stop tomcat 
[[email protected] ~]# su test 
[[email protected] ~]$ sudo /usr/local/tomcat/bin/shutdown.sh

附录:(sudoers文件详解)

[[email protected] ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件许可特定用户像root用户一样应用各类各样的敕令,而不须要root用户的暗码 
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部供给了很多相干敕令的示例以供选择,这些示例都可以被特定用户或  
## ## 用户组所应用  
## This file must be edited with the ‘visudo‘ command.
## 该文件必须应用"visudo"敕令编辑
## Host Aliases
#主机别号
## Groups of machines. You may prefer to use hostnames (perhap using 
## wildcards for entire domains) or IP addresses instead.
## 关于一组办事器,你能够会更爱好应用主机名(能够是全域名的通配符)
## 或IP地址代替,这时候可以设备主机别号

# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
#用户别号
## These aren‘t often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 这其实不很经常使用,由于你可以经过过程应用组来代替一组用户的别号  
# User_Alias ADMINS = jsmith, mikem

## Command Aliases
## These are groups of related commands...
## 指定一系列相互接洽关系的敕令(固然可所以一个)的别号,经过过程付与该别号sudo权限,  
## 可以经过过程sudo调用一切别号包含的敕令,下面是一些示例

## Networking
#搜集操作相干敕令别号  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
 /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
 /sbin/mii-tool
## Installation and management of software
#软件装置管理相干敕令别号  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#办事相干敕令别号 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级敕令别号  
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相干敕令别号
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相干敕令别号 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#过程相干敕令别号
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动敕令别号
Cmnd_Alias DRIVERS = /sbin/modprobe
#情况变量的相干设备
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR                         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME                         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION                         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC                         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS                         _XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规矩设备:甚么用户在哪台办事器上可以履行哪些敕令(sudoers文件可以在多个体系上共享)
## Syntax:
##语法
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以履行的敕令  
##
## The COMMANDS section may have other options added to it.
## 敕令部分可以附带一些其它的选项  
##
## Allow root to run any commands anywhere 
## 许可root用户履行随便任性途径下的随便任性敕令 
root    ALL=(ALL)       ALL
## Allows members of the ‘sys‘ group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 许可sys中户组中的用户应用NETWORKING等一切别号中设备的敕令

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
## 许可wheel用户组中的用户履行一切敕令  
## Same thing without a password
## 许可wheel用户组中的用户在不输入该用户的暗码的情况下应用一切敕令
# %wheel        ALL=(ALL)       NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 许可users用户组中的用户像root用户一样应用mount、unmount、chrom敕令 
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now
## 许可users用户组中的用户像root用户一样应用shutdown敕令

linux详解sudoers

标签:途径   pre   file   办事   bottom   disk   chkconfig   出现   dba   

原文地址:https://www.cnblogs.com/jing99/p/9323080.html

(0)
(1)
   
告发
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权一切 京ICP备13008772号-2
迷上了代码!