su、sudo和sudoer

 

某个普通用户如user1想执行一些root用户才有权执行shell命令时,shell会提示权限不够无法执行。

怎么办?

办法一:用su命令切换到root用户下,执行所有命令。

su命令格式:su [options] [-] [<user> [<argument>...]]

 

当<user>为root时,可以省略不写,即最常用的命令"su -"

注意:root 用户切换普通用户不需要密码验证,而普通用户切换到 root 用户时需要输入当前用户的登录密码进行验证。

su 命令与用户名之间有一个减号(-)时,表示把环境变量也切换为<user>的,不保留当前用户的环境变量;没有减号时,保留环境变量不切换。

 

办法二:不切换用户,在当前shell下使用sudo命令,提升权限到root用户权限执行命令。

sudo的主要功能:

认证:执行命令时输入当前登录用户的密码进行验证,验证密码后5分钟内(默认值)用户用户无需输入密码执行命令;

授权:对用户/用户组、主机、执行的命令或命令组等进行权限限制;

审计:用户执行的每条命令都会被记录,便于管理员审计安全性;

配置管理:通过/etc/sudioers配置文件进行认证、授权、审计等配置管理

 

 

通常,只需在命令行前加sudo执行,执行时输入自己(user1)的密码验证通过后,就能正常执行,无需知道root等用户的密码,比较安全。

sudo执行命令时输入正确密码后,密码会有一个有效期(默认为5分钟),在有效期内用sudo执行其它命令,不会再要求输入密码,否则每执行一次命令都要求输入密码,还不得烦死

 

sudo命令的常用格式:sudo [选项] [-u <用户名>] [<命令>]

sudo命令的常用选项有:

-k选项:清空密码的有效期,下次执行 sudo 时需要再次进行密码验证;

-b选项:让命令在后台执行;

-p选项:修改询问密码的提示语

-u选项:当<用户名>为root时,-u <用户名>可以省略。<命令>的真实执行用户为<用户名>,因此当<命令>为创建文件之类的命令时,所创建的文件的属主为<用户名>,而非当前登录用户。
 -l选项:查看当前登录用户通过sudo执行命令的权限,如下图红框中内容:
 
这些权限是由管理员预先在sudo的配置文件sudoers中对登录用户进行权限设置得到的。下面是
sudoers文件的主要内容:

 

 强烈建议用visudo命令编辑sudoers文件,因为visudo能自动检查sudoers文件的语法参数错误并报错,禁止多人同时编辑sudoers,

但是只有 root 用户才有权限使用 visudo 命令。

 

下面看看sudoers文件具体内容:

主要分为三类:

  • 第1类:用default指令设置一些默认行为,如环境复位,输入密码时回显特殊字符,密码超时时间戳等:

  Defaults        env_reset, pwfeedback,timestamp_timeout=1

  • 第2类:以别名方式设置主机、用户、命令别名,目的是把多个主机、多个用户、多条命令组织为组的方式,便于下面第3类格式中进行整体引用进行控制,如下:

  1、主机别名:把多个主机名、主机ip以别名方式组织在一起

  # Host alias specification  

  ## Groups of machines. You may prefer to use hostnames (perhaps using wildcards for entire domains) or IP addresses instead.

  Host_Alias FILESERVERS = fs1, fs2,192.168.1.254

 

    2、用户别名: 把某些用户组织为用户别名便于整体引用这些用户名

  # User alias specification 

  ## 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

 

      3、命令别名:把不同命令组织成组便于整体引用进行集中设置权限,通常按命令的用途分类进行组织,注意命令需要以绝对路径形式给出

  # Cmnd alias specification 

  ## Command Aliases
  ## These are groups of related commands...

  ## Networking
  Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /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 = /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

  ## Updating the locate database
   Cmnd_Alias LOCATE = /usr/bin/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

 

  • 第3类:用户权限指定,这是最关键的部分:

  设置哪些用户/用户组、哪些主机、可切换到哪些用户/用户组,是否输入密码、执行/禁止执行哪些命令。

  语法格式结构:

      字段1 字段2 =[(字段3)] [字段4] 字段5

  对应最简单的语法格式:user    MACHINE=COMMANDS

  对应完整语法格式:授权用户/组 主机 =[(切换到哪些用户或组)] [NOPASSWD] 命令1,命令2,命令n

  
  其中字段3、字段4,是可以省略的。

  如果字段3存在,必须用小括号括起来,省略字段3则相当于字段3为(root),字段4固定为NOPASSWD,省略时表示执行命令时必须输入密码验证

  # User privilege specification
  root ALL=(ALL:ALL) ALL

  # Members of the admin group may gain root privileges
  %admin ALL=(ALL) ALL

  # Allow members of group sudo to execute any command
  %sudo ALL=(ALL:ALL) ALL

 
 

 

posted @ 2022-11-30 22:23  梦想与现实边缘  阅读(360)  评论(0编辑  收藏  举报