linux常用命令:sudo 命令

Posted shujuxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux常用命令:sudo 命令相关的知识,希望对你有一定的参考价值。

sudo命令用来以其他身份来执行命令,预设的身份为root。

1.命令格式:

  sudo  [参数]  [命令]

2.命令功能:

    功能:  sudo可以针对单个命令授予临时权限。用户也可以通过su切换到root用户运行命令,su启动一个root shell允许用户运行之后的所有的命令。

    1)sudo与su的不同之处:sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性;sudo也可以用来以其他用户身份执行命令。此外,sudo可以记录用户执行的命令,以及失败的特权获取。

    2)提醒:在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

    3)[[email protected] etc]# cat sudoers  查看/etc下的只有root才能打开的文件配置文件sudoers

技术分享图片
[[email protected] ~]$ yum update mysql                      //yum的执行需要root权限
已加载插件:fastestmirror, langpacks
您需要 root 权限执行此命令。
[[email protected] ~]$ sudo yum update mysql                   //默认情况下sudo获得root用户的权限

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 xiong: 
xiong 不在 sudoers 文件中。此事将被报告。                     //此时sunmeng还没有使用sudo的权限
View Code

 4)给普通用使用sudo命令的授权:

技术分享图片
## 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 (perhaps using 
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 、或IP地址,这时可以配置主机别名
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These arent 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/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

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
# 一些环境变量的相关配置,具体情况可见man soduers
Defaults    requiretty
//设为默认的目标用户,69行是系统自带的,是对所有用户的默认,如果设sunmeng为默认目标用户,则语法为:Defaults:foobar runas_default=rene (冒号必不可少)
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## 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
//第一个ALL是指网络中的主机,我们后面把它改成了主机名。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。
## Allows members of the sys group to run networking, software, 
## service management apps and more.
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS

## Allows people in group wheel to run all commands
## 允许wheel用户组中的用户执行所有命令
%wheel    ALL=(ALL)    ALL

## 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这台服务器
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 读取放置在/etc/sudoers.d/文件夹中的文件(此处的#不意味着这是一个声明)
#includedir /etc/sudoers.d
View Code

    5)简单的测试:

技术分享图片
visudo后得到的格式为:
  账户名                 主机名称=(可切换的身份)              可用的指令
  //比如root账户
  root                   ALL=(ALL)                                  ALL
 
  对于新增的账户就在下面加上
  test                   ALL=(root)                                 ALL
  //允许test用sudo命令执行root的所有命令
 
  同理对于组使用者也是一个,但是要加上%
  %testgroup         ALL=(root)                     ALL
 
  需要注意的是:每次切换,你都需要密码才可以,使用如下命令可以避免输入密码:
  test                   ALL=(root) NOPASSWD: ALL
  
 
 -------------------------------
 [[email protected] xiong]# visudo              //这里的visudo不需要任何参数,因为它是打开sudoers的专属命令
//改过的地方
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
xiong ALL=(ALL)     ALL
View Code
技术分享图片
[[email protected] ~]$ ls                                   //当前身份执行命令
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos 
[[email protected] ~]$ sudo ls                                 //利用root身份执行命令
Desktop  Documents  Downloads  Music  Pictures    Public    Templates  Videos
[[email protected] ~]$ yum update mysql                           //当前身份执行命令,提醒需要root身份
已加载插件:fastestmirror, langpacks
您需要 root 权限执行此命令。
[[email protected] ~]$ sudo yum update mysql                        //以root身份执行命令(在终端中第一次用这个命令时会提醒输入密码)
已加载插件:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.cqu.edu.cn
 * extras: mirrors.cqu.edu.cn
 * updates: mirrors.cqu.edu.cn
No packages marked for update
View Code

3.命令参数:

      1) -b       在后台运行命令

    2) -u user     以指定用户身份运行命令(或编辑文件)

      3) -l        查看当前用户可以执行的命令

      4) -v       更新用户的时间戳而不执行命令(注意:在输入密码之后,5分钟内执行sudo不需要再次输入密码。)

      5) -V       显示sudo的版本信息

      6) -i        以目标用户登录一个shell

4.使用实例:

示例1:指定用户名

命令: sudo -u root yum install mysql-devel

[[email protected] Desktop]$ sudo -u root yum install mysql-devel  -u参数比较有用的地方是在多用户时,可以临时获得权限打开用户独占的文件
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.cqu.edu.cn
 * extras: mirrors.cqu.edu.cn
 * updates: mirrors.cqu.edu.cn
正在解决依赖关系
--> 正在检查事务
......
--> 解决依赖关系完成
依赖关系解决
=============================================================================================================
 Package                        架构              版本                              源                  大小
=============================================================================================================
正在安装:
 mariadb-devel                  x86_64            1:5.5.47-1.el7_2                  
......
作为依赖被升级:
  krb5-libs.x86_64 0:1.13.2-12.el7_2                krb5-workstation.x86_64 0:1.13.2-12.el7_2               
  openssl.x86_64 1:1.0.1e-51.el7_2.5                openssl-libs.x86_64 1:1.0.1e-51.el7_2.5                 
  pcre.x86_64 0:8.32-15.el7_2.1                     zlib.x86_64 0:1.2.7-15.el7                              

完毕!

 

示例2:sudo命令与rpm命令结合使用的几个例子

[[email protected] Desktop]$ sudo rpm -q MySQL-embedded-5.5.28-1.linux2.6.i386.rpm
[sudo] password for xiong: 
未安装软件包 MySQL-embedded-5.5.28-1.linux2.6.i386.rpm 
[[email protected] Desktop]$ sudo rpm -qpR MySQL-embedded-5.5.28-1.linux2.6.i386.rpm
MySQL-devel
libaio.so.1
libaio.so.1(LIBAIO_0.1)
libaio.so.1(LIBAIO_0.4)
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.2)
libc.so.6(GLIBC_2.3)
libc.so.6(GLIBC_2.3.3)
libcrypt.so.1
libcrypt.so.1(GLIBC_2.0)
libdl.so.2
libdl.so.2(GLIBC_2.0)
libdl.so.2(GLIBC_2.1)
libm.so.6
libm.so.6(GLIBC_2.0)
libm.so.6(GLIBC_2.1)
libncurses.so.5
libpthread.so.0
libpthread.so.0(GLIBC_2.0)
libpthread.so.0(GLIBC_2.1)
libpthread.so.0(GLIBC_2.2)
libpthread.so.0(GLIBC_2.3.2)
librt.so.1
librt.so.1(GLIBC_2.2)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

 

示例3:列出用户可以执行的命令

命令:sudo -l

[[email protected] Desktop]$ sudo -l
匹配此主机上 xiong 的默认条目:
    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

用户 xiong 可以在该主机上运行以下命令:
    (ALL) ALL

 

示例4:以目标身份登录一个shell

命令:sudo -i   

[[email protected] Desktop]# sudo -i
[[email protected] ~]# sudo -i

 

示例5:显示详细的sudo的版本信息

命令: sudo -V

技术分享图片
  1 [[email protected] ~]# sudo -V
  2 Sudo 版本 1.8.6p7
  3 当前选项:--build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --prefix=/usr --sbindir=/usr/sbin --libdir=/usr/lib64 --docdir=/usr/share/doc/sudo-1.8.6p7 --with-logging=syslog --with-logfac=authpriv --with-pam --with-pam-login --with-editor=/bin/vi --with-env-editor --with-ignore-dot --with-tty-tickets --with-ldap --with-ldap-conf-file=/etc/sudo-ldap.conf --with-selinux --with-passprompt=[sudo] password for %p:  --with-linux-audit --with-sssd
  4 Sudoers 策略插件版本 1.8.6p7
  5 Sudoers 文件语法版本 42
  6 
  7 Sudoers 路径:/etc/sudoers
  8 nsswitch 路径:/etc/nsswitch.conf
  9 ldap.conf 路径:/etc/sudo-ldap.conf
 10 ldap.secret 路径:/etc/ldap.secret
 11 认证方法: pam
 12 若使用了 syslog,用于记录日志的 syslog 设施:authpriv
 13 用户认证成功时使用的 syslog 优先级:notice
 14 用户认证不成功时使用的 syslog 优先级:alert
 15 忽略 $PATH 中的“.”
 16 在用户不在 sudoers 列表中时发送邮件
 17 对每个用户/终端组合使用独立的时间戳
 18 在用户第一次运行 sudo 时向他致辞
 19 默认要求用户认证
 20 root 可以运行 sudo
 21 总是将 $HOME 设为目标用户的主目录
 22 允许收集一些信息,以提供有用的错误消息
 23 只允许拥有终端的用户执行 sudo
 24 Visudo 将优先考虑 EDITOR 环境变量
 25 设置 LOGNAME 和 USER 环境变量
 26 日志文件折行的长度(0 则不折行):80
 27 认证时间戳延时:5.0 分钟
 28 密码提示延时:5.0 分钟
 29 输入密码的尝试次数:3
 30 要使用的 umask,或 0777 使用用户的:022
 31 邮件程序路径:/usr/sbin/sendmail
 32 邮件程序标志:-t
 33 发送邮件的地址:root
 34 邮件消息的主题行:*** SECURITY information for %h ***
 35 密码错误消息:Sorry, try again.
 36 认证时间戳文件夹的路径:/var/db/sudo
 37 默认密码提示:[sudo] password for %p: 
 38 运行命令的默认用户:root
 39 覆盖用户的 $PATH 变量的值:/sbin:/bin:/usr/sbin:/usr/bin
 40 visudo 所使用的编辑器的路径:/bin/vi
 41 何时为“list”伪命令请求密码:any
 42 何时为“verify”伪命令请求密码:all
 43 >= 3 的文件描述符将会在执行命令前关闭
 44 将环境重设为默认的变量集
 45 要检查完整性的环境变量:
 46     TERM
 47     LINGUAS
 48     LC_*
 49     LANGUAGE
 50     LANG
 51     COLORTERM
 52 要移除的环境变量:
 53     RUBYOPT
 54     RUBYLIB
 55     PYTHONUSERBASE
 56     PYTHONINSPECT
 57     PYTHONPATH
 58     PYTHONHOME
 59     TMPPREFIX
 60     ZDOTDIR
 61     READNULLCMD
 62     NULLCMD
 63     FPATH
 64     PERL5DB
 65     PERL5OPT
 66     PERL5LIB
 67     PERLLIB
 68     PERLIO_DEBUG 
 69     JAVA_TOOL_OPTIONS
 70     SHELLOPTS
 71     GLOBIGNORE
 72     PS4
 73     BASH_ENV
 74     ENV
 75     TERMCAP
 76     TERMPATH
 77     TERMINFO_DIRS
 78     TERMINFO
 79     _RLD*
 80     LD_*
 81     PATH_LOCALE
 82     NLSPATH
 83     HOSTALIASES
 84     RES_OPTIONS
 85     LOCALDOMAIN
 86     CDPATH
 87     IFS
 88 要保留的环境变量:
 89     XAUTHORITY
 90     _XKB_CHARSET
 91     LINGUAS
 92     LANGUAGE
 93     LC_ALL
 94     LC_TIME
 95     LC_TELEPHONE
 96     LC_PAPER
 97     LC_NUMERIC
 98     LC_NAME
 99     LC_MONETARY
100     LC_MESSAGES
101     LC_MEASUREMENT
102     LC_IDENTIFICATION
103     LC_COLLATE
104     LC_CTYPE
105     LC_ADDRESS
106     LANG
107     USERNAME
108     QTDIR
109     PS2
110     PS1
111     MAIL
112     LS_COLORS
113     KDEDIR
114     INPUTRC
115     HISTSIZE
116     HOSTNAME
117     DISPLAY
118     COLORS
119 解析 sudoers 时使用的区域设置:C
120 使用 zlib 压缩 I/O 日志
121 用于保存输入/输出日志的目录:/var/log/sudo-io
122 用于保存输入/输出日志的文件:%{seq}
123 在分配伪终端时向 utmp/utmpx 文件中添加一条记录
124 
125 本地 IP 地址和网络掩码对:
126     192.168.0.15/255.255.255.0
127     fe80::20c:29ff:fe9f:bf8b/ffff:ffff:ffff:ffff::
128 
129 Sudoers I/O plugin version 1.8.6p7
View Code

 

以上是关于linux常用命令:sudo 命令的主要内容,如果未能解决你的问题,请参考以下文章

linux su和sudo命令的区别

linux su和sudo命令的区别

linux sudo时说找不到cd命令, 怎么解决

Linux常用命令

linux命令sudo su啥意思

linux下面的sudo命令啥意思