利用sudo安全管理系统

我们都知道在实际生产环境中一定不可随便使用管理员权限登录的,哪我们一旦使用到管理员权限时该怎么办??

   有人会说使用su命令呀,直接切换不就行了嘛。这位友人你说的不错,但是如果你线下有上百上千台服务器需要你管理你该怎么办啊?又有人会说让别人帮助你啊,话虽如此但是这位友人不要忘记哦这样需要你将管理员密码告诉他们或给他们赋予管理员的权限,这样的后果你是懂得的!!这时又有人说了直接使用sudo用户不就行了嘛,对对这位友人一语点醒命中人啊;那么下面我们一起了解一下sudo命令吧??

1:概念认知

sudo是linux系统管理指令也就是权限管理机制,也就是使一般用户不需要知道root的密码即可获得权限。首先root将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权;在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以root的权限运行。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。

2:配置文件

  • Sudo的配置文件是sudoers文件它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers;权限是440并且还有隐藏权限可使用如下命令进行查看:

1
2
[root@station144 ~] # lsattr /etc/sudoers
-------------e-  /etc/sudoers                #e表示禁止修改的,可用chattr查看

  • 查看解析配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@station144 ~] # cat /etc/sudoers
……  这些部分一省略。
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)   ALL               #表示:哪个用户在哪些主机上以谁的命令执行什么权限
%zhao   ALL=(root)   /usr/sbin/useradd     #表示zhao这个组内的所有成员都可执行/usr/sbin/useradd这个命令权限。
## 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
## Allows people in group wheel to run all commands
# %wheel    ALL=(ALL)   ALL
## Same thing without a password
# %wheel    ALL=(ALL)   NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %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
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

通过查看配置文件可以了解到:

   某用户获取权限的方式: who where=(whom) command   哪个用户在哪些主机上以谁的命令执行什么命令。

   某用户组获取权限的方式 %GroupName  where=(whom) command  哪个用户组在哪些主机上以谁的命令执行什么命令。注意:此命令定义之后会立即生效。


  • 编辑配置文件

命令:visudo

   注意:编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法格式,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。


3:语法格式

sudo [-bhHpV][-s ][-u <用户>][指令]

    或

   sudo [-klv]

   参数

  -b  在后台执行指令。

  -h  显示帮助。

  -H  将HOME环境变量设为新身份的HOME环境变量。

  -k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。系统默认sudo有效期为5分钟

  -l  列出目前用户可执行与无法执行的指令,也就是可以查看自己使用哪个用户的身份执行那些特殊权限。

  -p  改变询问密码的提示符号。

  -s  执行指定的shell。

  -u <用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。

  -v  延长密码有效期限5分钟。

  -V  显示版本信息。

   -S   从标准输入流替代终端来获取密码


4:示例演练

   定义一个用户(jerry)使其拥有添加用户的特殊权限,并进行创建用户操作。

  1)创建用户jerry并为其添加密码

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

  2)修改/etc/sudoers配置文件

1
2
3
4
5
6
7
8
9
10
[root@station144 ~] # visudo
……         #内容省略
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
jerry   ALL=(root)     /usr/sbin/useradd       #添加权限,这里的/usr/sbin/useradd表示普通用户执行时必须使用全路径,可以使用which 命令查看哦!
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
……          #内容省略
   #保存退出

  3)切换用户测试

   jerry直接登陆服务器(或使用su - jerry)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[jerry@station144 ~]$  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  jerry:               #这里需要输入密码,以确认终端机前的是该用户本人
Matching Defaults entries  for  jerry 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 jerry may run the following commands on this host:
     (root)  /usr/sbin/useradd       #jerry可以以管理员的身份管理useradd
1
2
3
4
5
6
7
8
9
10
11
12
[jerry@station144 ~]$  sudo  /usr/sbin/useradd  user2      #添加user2用户
[jerry@station144 ~]$  tail  /etc/passwd            #查看添加结果
postfix:x:89:89:: /var/spool/postfix : /sbin/nologin
rpcuser:x:29:29:RPC Service User: /var/lib/nfs : /sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User: /var/lib/nfs : /sbin/nologin
pulse:x:496:495:PulseAudio System Daemon: /var/run/pulse : /sbin/nologin
puppet:x:52:52:Puppet: /var/lib/puppet : /sbin/nologin
sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
tcpdump:x:72:72::/: /sbin/nologin
jerry:x:500:500:: /home/jerry : /bin/bash
user1:x:501:501:: /home/user1 : /bin/bash
user2:x:502:502:: /home/user2 : /bin/bash           #添加成功

 4)查看日志文件

   由于普通用户没有查看日志的权限所以需要切换回管理员执行:

1
2
3
4
5
6
7
[root@station144 ~] # tail /var/log/secure
Aug 13 08:57:11 station144 sshd[2987]: Accepted password  for  root from 172.16.254.58 port 51571 ssh2
Aug 13 08:57:11 station144 sshd[2987]: pam_unix(sshd:session): session opened  for  user root by (uid=0)
Aug 13 09:05:01 station144  sudo :    jerry : TTY=pts /1  ; PWD= /home/jerry  ; USER=root ; COMMAND=list                #jerry以管理员的权限执行了list命令
Aug 13 09:42:45 station144  sudo :    jerry : TTY=pts /1  ; PWD= /home/jerry  ; USER=root ; COMMAND= /usr/sbin/useradd  user2     #以管理员的权限执行了useradd
Aug 13 09:42:45 station144  useradd [3197]: new group: name=user2, GID=502
Aug 13 09:42:45 station144  useradd [3197]: new user: name=user2, UID=502, GID=502, home= /home/user2 , shell= /bin/bash

   结:以后可以使用此命令日志查看主机是否遭到入侵攻击,或者查看某用户登录进来并使用特殊权限执行错误指令等等。所以我们要实时监控此文件的动向。

  5)结束密码有效期,重新认证添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[jerry@station144 ~]$  sudo  –k             #结束密码有效期
[jerry@station144 ~]$  sudo  /usr/sbin/useradd  user3     #创建用户
[ sudo ] password  for  jerry:              #重新验证用户
[jerry@station144 ~]$  tail  /etc/passwd        #结果显示
rpcuser:x:29:29:RPC Service User: /var/lib/nfs : /sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User: /var/lib/nfs : /sbin/nologin
pulse:x:496:495:PulseAudio System Daemon: /var/run/pulse : /sbin/nologin
puppet:x:52:52:Puppet: /var/lib/puppet : /sbin/nologin
sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin
tcpdump:x:72:72::/: /sbin/nologin
jerry:x:500:500:: /home/jerry : /bin/bash
user1:x:501:501:: /home/user1 : /bin/bash
user2:x:502:502:: /home/user2 : /bin/bash
user3:x:503:503:: /home/user3 : /bin/bash


5:扩展优化部分

sudoers文件支持使用别名对同类对象进行分组:组名必须使用全大写字母,使用逗号将同类对象命令隔开。

 Host_Alias:主机别名

     User_Alias:用户别名

     Runas_Alias:在哪些主机以谁的身份运行  的别名

     Cmnd_Alias:命令别名

1
2
3
4
5
Cmnd_Alias USERADMIN =  /usr/sbin/useradd /usr/sbin/usermod /usr/sbin/userdel   #定义命令别名
jerry   ALL=(root)    USERADMIN    #这样就定义了jerry可以执行别名中的所有命令
Host_Alias USERHOSTS = 172.16.0.0 /16 ,127.0.0.0 /8 ,192.168.0.0 /24     #定义主机别名
jerry   USERHOSTS=(root)    USERADMIN
……
  • 设置不允许某用户执行某操作?

1
jerry ALL=(root)  /usr/bin/passwd  [a-zA-Z]*,! /usr/bin/passwd  root      #jerry可以以root的权限更改密码但是不包括更改root的密码。
  • 支持以正则表达式或通配符的形式进行通配

1
2
%operator ALL =  /bin/cat  /var/log/messages *
   更多通配情况可参考 man  sudoers
  • 怎么设置执行特权命令时不需输入密码

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

1
2
3
4
5
6
7
8
9
10
11
[root@station144 ~] # visudo                  #添加
jerry   ALL=(root)       /usr/sbin/useradd ,NOPASSWD:  /usr/sbin/userdel , /usr/sbin/groupdel ,PASSWD:  /usr/sbin/usermod , /usr/sbin/groupmod
[jerry@station144 ~]$  sudo  /usr/sbin/useradd  user5       #切换执行
[ sudo ] password  for  jerry:
[jerry@station144 ~]$  sudo  –k          #结束密码有效期
[jerry@station144 ~]$  sudo  /usr/sbin/useradd  user6
[ sudo ] password  for  jerry:
[jerry@station144 ~]$  sudo  -k
[jerry@station144 ~]$  sudo  /usr/sbin/userdel  user6
[jerry@station144 ~]$  sudo  /usr/sbin/usermod  user5 -a –G magedu
[ sudo ] password  for  jerry:


小结:sudo命令虽然知识量不算大;但是在生产环境中实用性很强;所以要多加了解熟练应用。j_0006.gif感觉好者请右下角!j_0002.gif




本文转自 z永 51CTO博客,原文链接:http://blog.51cto.com/pangge/1275911


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值