天天一個Linux命令(58)sudo命令

    sudo命令用來以其餘身份來執行命令,預設的身份爲root。

mysql

    (1)用法:linux

    用法:  sudo  [參數]  [命令]sql

 

    (2)功能:shell

    功能:  sudo能夠針對單個命令授予臨時權限。用戶也能夠經過su切換到root用戶運行命令,su啓動一個root shell容許用戶運行以後的全部的命令。數據庫

    1)sudo與su的不一樣之處:sudo僅在須要時授予用戶權限,減小了用戶由於錯誤執行命令損壞系統的可能性;sudo也能夠用來以其餘用戶身份執行命令。此外,sudo能夠記錄用戶執行的命令,以及失敗的特權獲取。服務器

    2)提醒:在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經受權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,以後有5分鐘的有效期限,超過時限則必須從新輸入密碼。
網絡

[sunmeng@localhost ~]$ yum update mysql                      //yum的執行須要root權限
已加載插件:fastestmirror, langpacks
您須要 root 權限執行此命令。
[sunmeng@localhost ~]$ 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 sunmeng: 
sunmeng 不在 sudoers 文件中。此事將被報告。                     //此時sunmeng尚未使用sudo的權限

    3)[root@localhost etc]# cat sudoers  查看/etc下的只有root才能打開的文件配置文件sudoers架構

  1 ## Sudoers allows particular users to run various commands as
  2 ## the root user, without needing the root password.
  3 ## 該文件容許特定用戶像root用戶同樣使用各類各樣的命令,而不須要root用戶的密碼
  4 ##
  5 ## Examples are provided at the bottom of the file for collections
  6 ## of related commands, which can then be delegated out to particular
  7 ## users or groups.
  8 ## 在文件的底部提供了不少相關命令的示例以供選擇,這些示例均可以被特定用戶或
  9 ## 用戶組所使用 
 10 ##
 11 ## This file must be edited with the 'visudo' command.
 12 ## 該文件必須使用"visudo"命令編輯
 13 
 14 ## Host Aliases
 15 ## Groups of machines. You may prefer to use hostnames (perhaps using 
 16 ## wildcards for entire domains) or IP addresses instead.
 17 ## 對於一組服務器,你可能會更喜歡使用主機名(多是全域名的通配符)
 18 ## 、或IP地址,這時能夠配置主機別名
 19 # Host_Alias     FILESERVERS = fs1, fs2
 20 # Host_Alias     MAILSERVERS = smtp, smtp2
 21 
 22 ## User Aliases
 23 ## These aren't often necessary, as you can use regular groups
 24 ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
 25 ## rather than USERALIAS
 26 ## 這並不很經常使用,由於你能夠經過使用組來代替一組用戶的別名
 27 # User_Alias ADMINS = jsmith, mikem
 28 
 29 ## Command Aliases
 30 ## These are groups of related commands...
 31 ## 指定一系列相互關聯的命令(固然能夠是一個)的別名,經過賦予該別名sudo權限,
 32 ## 能夠經過sudo調用全部別名包含的命令,下面是一些示例
 33 
 34 ## Networking 網絡操做相關命令別名
 35 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient
 36 , /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig
 37 , /sbin/mii-tool
 38 
 39 ## Installation and management of software 軟件安裝管理相關命令別名
 40 # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
 41 
 42 ## Services 服務相關命令別名
 43 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
 44 
 45 ## Updating the locate database 本地數據庫升級命令別名
 46 # Cmnd_Alias LOCATE = /usr/bin/updatedb
 47 
 48 ## Storage 磁盤操做相關命令別名
 49 # Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe
 50 , /bin/mount, /bin/umount
 51 
 52 ## Delegating permissions 代理權限相關命令別名
 53 # Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 
 54 
 55 ## Processes 進程相關命令別名
 56 # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
 57 
 58 ## Drivers 驅動命令別名
 59 # Cmnd_Alias DRIVERS = /sbin/modprobe
 60 
 61 # Defaults specification
 62 
 63 #
 64 # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
 65 #         You have to run "ssh -t hostname sudo <cmd>".
 66 # 一些環境變量的相關配置,具體狀況可見man soduers
 67 Defaults    requiretty
 68 //設爲默認的目標用戶,69行是系統自帶的,是對全部用戶的默認,若是設sunmeng爲默認目標用戶,則語法爲:Defaults:foobar runas_default=rene (冒號必不可少)
 69 Defaults    env_reset
 70 Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
 71 Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
 72 Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
 73 Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
 74 Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
 75 
 76 Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
 77 
 78 ## Next comes the main part: which users can run what software on 
 79 ## which machines (the sudoers file can be shared between multiple
 80 ## systems).
 81 ## 下面是規則配置:什麼用戶在哪臺服務器上能夠執行哪些命令(sudoers文件能夠在多個系統上共享)
 82 ## Syntax(語法):
 83 ##
 84 ##     user    MACHINE=COMMANDS 用戶 登陸的主機=(能夠變換的身份) 能夠執行的命令
 85 ##
 86 ## The COMMANDS section may have other options added to it.
 87 ## 命令部分能夠附帶一些其它的選項
 88 ##
 89 ## Allow root to run any commands anywhere  90 ## 容許root用戶執行任意路徑下的任意命令  91 root    ALL=(ALL)     ALL
 92 //第一個ALL是指網絡中的主機,咱們後面把它改爲了主機名。第二個括號裏的ALL是指目標用戶,也就是以誰的身份去執行命令。最後一個ALL固然就是指命令名了。
 93 ## Allows members of the 'sys' group to run networking, software, 
 94 ## service management apps and more.
 95 ## 容許sys中戶組中的用戶使用NETWORKING等全部別名中配置的命令
 96 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
 97 , DRIVERS
 98 
 99 ## Allows people in group wheel to run all commands
100 ## 容許wheel用戶組中的用戶執行全部命令
101 %wheel    ALL=(ALL)    ALL
102 
103 ## Same thing without a password
104 ## 容許wheel用戶組中的用戶在不輸入該用戶的密碼的狀況下使用全部命令
105 # %wheel    ALL=(ALL)    NOPASSWD: ALL
106 
107 ## Allows members of the users group to mount and unmount the 
108 ## cdrom as root
109 ## 容許users用戶組中的用戶像root用戶同樣使用mount、unmount、chrom命令
110 # %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
111 
112 ## Allows members of the users group to shutdown this system
113 ## 容許users用戶組中的用戶關閉localhost這臺服務器
114 # %users  localhost=/sbin/shutdown -h now
115 
116 ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
117 ## 讀取放置在/etc/sudoers.d/文件夾中的文件(此處的#不意味着這是一個聲明)
118 #includedir /etc/sudoers.d

    4)給普通用使用sudo命令的受權:app

visudo後獲得的格式爲:
  帳戶名                 主機名稱=(可切換的身份)              可用的指令
  //好比root帳戶
  root                   ALL=(ALL)                                  ALL
 
  對於新增的帳戶就在下面加上
  test                   ALL=(root)                                 ALL
  //容許test用sudo命令執行root的全部命令
 
  同理對於組使用者也是一個,可是要加上%
  %testgroup         ALL=(root)                     ALL
 
  須要注意的是:每次切換,你都須要密碼才能夠,使用以下命令能夠避免輸入密碼:
  test                   ALL=(root) NOPASSWD: ALL 
[root@localhost sunmeng]# 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
sunmeng ALL=(ALL)     ALL

    5)簡單的測試:dom

[sunmeng@localhost ~]$ ls                                   //當前身份執行命令
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos 
[sunmeng@localhost ~]$ sudo ls                                 //利用root身份執行命令
Desktop  Documents  Downloads  Music  Pictures    Public    Templates  Videos
[sunmeng@localhost ~]$ yum update mysql                           //當前身份執行命令,提醒須要root身份
已加載插件:fastestmirror, langpacks
您須要 root 權限執行此命令。
[sunmeng@localhost ~]$ 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

 

    (3)選項參數:

      1) -b       在後臺運行命令

      2) -u user     以指定用戶身份運行命令(或編輯文件)

      3) -l        查看當前用戶能夠執行的命令

      4) -v       更新用戶的時間戳而不執行命令(注意:在輸入密碼以後,5分鐘內執行sudo不須要再次輸入密碼。)

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

      6) -i        以目標用戶登陸一個shell

 

    (4)實例:

      1)[sunmeng@localhost Desktop]$ sudo -u root yum install mysql-devel        指定用戶名

[sunmeng@localhost 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命令結合使用的幾個例子

[sunmeng@localhost Desktop]$ sudo rpm -q MySQL-embedded-5.5.28-1.linux2.6.i386.rpm
[sudo] password for sunmeng: 
未安裝軟件包 MySQL-embedded-5.5.28-1.linux2.6.i386.rpm 
[sunmeng@localhost 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)[sunmeng@localhost Desktop]$ sudo -l        列出用戶能夠執行的命令

[sunmeng@localhost Desktop]$ sudo -l
匹配此主機上 sunmeng 的默認條目:
    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

用戶 sunmeng 能夠在該主機上運行如下命令:
    (ALL) ALL

     4[root@localhost Desktop]# sudo -i           以目標身份登陸一個shell     

[root@localhost Desktop]# sudo -i
[root@localhost ~]# sudo -i

      5)[root@localhost ~]# sudo -V             顯示詳細的sudo的版本信息

[root@localhost ~]# sudo -V
Sudo 版本 1.8.6p7
當前選項:--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
Sudoers 策略插件版本 1.8.6p7
Sudoers 文件語法版本 42

Sudoers 路徑:/etc/sudoers
nsswitch 路徑:/etc/nsswitch.conf
ldap.conf 路徑:/etc/sudo-ldap.conf
ldap.secret 路徑:/etc/ldap.secret
認證方法: 'pam'
若使用了 syslog,用於記錄日誌的 syslog 設施:authpriv
用戶認證成功時使用的 syslog 優先級:notice
用戶認證不成功時使用的 syslog 優先級:alert
忽略 $PATH 中的「.」
在用戶不在 sudoers 列表中時發送郵件
對每一個用戶/終端組合使用獨立的時間戳
在用戶第一次運行 sudo 時向他致辭
默認要求用戶認證
root 能夠運行 sudo
老是將 $HOME 設爲目標用戶的主目錄
容許收集一些信息,以提供有用的錯誤消息
只容許擁有終端的用戶執行 sudo
Visudo 將優先考慮 EDITOR 環境變量
設置 LOGNAME 和 USER 環境變量
日誌文件折行的長度(0 則不折行):80
認證時間戳延時:5.0 分鐘
密碼提示延時:5.0 分鐘
輸入密碼的嘗試次數:3
要使用的 umask,或 0777 使用用戶的:022
郵件程序路徑:/usr/sbin/sendmail
郵件程序標誌:-t
發送郵件的地址:root
郵件消息的主題行:*** SECURITY information for %h ***
密碼錯誤消息:Sorry, try again.
認證時間戳文件夾的路徑:/var/db/sudo
默認密碼提示:[sudo] password for %p: 
運行命令的默認用戶:root
覆蓋用戶的 $PATH 變量的值:/sbin:/bin:/usr/sbin:/usr/bin
visudo 所使用的編輯器的路徑:/bin/vi
什麼時候爲「list」僞命令請求密碼:any
什麼時候爲「verify」僞命令請求密碼:all
>= 3 的文件描述符將會在執行命令前關閉
將環境重設爲默認的變量集
要檢查完整性的環境變量:
    TERM
    LINGUAS
    LC_*
    LANGUAGE
    LANG
    COLORTERM
要移除的環境變量:
    RUBYOPT
    RUBYLIB
    PYTHONUSERBASE
    PYTHONINSPECT
    PYTHONPATH
    PYTHONHOME
    TMPPREFIX
    ZDOTDIR
    READNULLCMD
    NULLCMD
    FPATH
    PERL5DB
    PERL5OPT
    PERL5LIB
    PERLLIB
    PERLIO_DEBUG 
    JAVA_TOOL_OPTIONS
    SHELLOPTS
    GLOBIGNORE
    PS4
    BASH_ENV
    ENV
    TERMCAP
    TERMPATH
    TERMINFO_DIRS
    TERMINFO
    _RLD*
    LD_*
    PATH_LOCALE
    NLSPATH
    HOSTALIASES
    RES_OPTIONS
    LOCALDOMAIN
    CDPATH
    IFS
要保留的環境變量:
    XAUTHORITY
    _XKB_CHARSET
    LINGUAS
    LANGUAGE
    LC_ALL
    LC_TIME
    LC_TELEPHONE
    LC_PAPER
    LC_NUMERIC
    LC_NAME
    LC_MONETARY
    LC_MESSAGES
    LC_MEASUREMENT
    LC_IDENTIFICATION
    LC_COLLATE
    LC_CTYPE
    LC_ADDRESS
    LANG
    USERNAME
    QTDIR
    PS2
    PS1
    MAIL
    LS_COLORS
    KDEDIR
    INPUTRC
    HISTSIZE
    HOSTNAME
    DISPLAY
    COLORS
解析 sudoers 時使用的區域設置:C
使用 zlib 壓縮 I/O 日誌
用於保存輸入/輸出日誌的目錄:/var/log/sudo-io
用於保存輸入/輸出日誌的文件:%{seq}
在分配僞終端時向 utmp/utmpx 文件中添加一條記錄

本地 IP 地址和網絡掩碼對:
    192.168.0.15/255.255.255.0
    fe80::20c:29ff:fe9f:bf8b/ffff:ffff:ffff:ffff::

Sudoers I/O plugin version 1.8.6p7
相關文章
相關標籤/搜索