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