用於切換當前用戶身份到其餘用戶身份,變動時須輸入所要變動的用戶賬號與密碼。node
語法: su [-] username
「-」無關緊要,加上「-」的做用是在切換用戶時初始化當前用戶的各類環境變量。普通用戶su不加username時就是直接切換到root用戶。
eg:python
[root@3 ~]# su - aming001 徹底切換到用戶aming001 上一次登陸:三 6月 14 06:43:37 CST 2017pts/0 上 [aming001@3 ~]$ whoami 查看當前用戶 aming001 [aming001@3 ~]$ pwd 查看當前目錄絕對路徑 /home/aming001 用戶家目錄 [aming001@3 ~]$ su 切換到root用戶 密碼: [root@3 aming001]# pwd /home/aming001 ----此時目錄沒變 [root@3 aming001]# exit 退出root到aming001 exit [aming001@3 ~]$ su - 徹底切換到root用戶 密碼: 上一次登陸:三 6月 14 06:45:11 CST 2017pts/0 上 [root@3 ~]# pwd /root ----家目錄改變
應用環境:
在root用戶登陸時,直接以某個普通用戶的身份去執行一個命令,適用於腳本中。linux
[root@3 ~]# su - aming001 -c "touch /tmp/1.txt" [root@3 ~]# ls -l /tmp/1.txt -rw-rw-r-- 1 aming001 aming001 0 6月 14 06:54 /tmp/1.txt
能夠看到/tmp/1.txt的全部者和所屬組都是aming001!web
su的確爲管理帶來方便,經過切換到root下,能完成全部系統管理工具,只要把root的密碼交給任何一個普通用戶,他都能切換到root來完成全部的系統管理工做;但經過su切換到root後,也有不安全因素;好比系統有10個用戶,並且都參與管理。若是這10個用戶都涉及到超級權限的運用,作爲管理員若是想讓其它用戶經過su來切換到超級權限的root,必須把root權限密碼都告訴這10個用戶;若是這10個用戶都有root權限,經過root權限能夠作任何事,這在必定程度上就對系統的安全形成了威協;想一想Windows吧,簡直就是惡夢;「沒有不安全的系統,只有不安全的人」,咱們絕對不能保證這 10個用戶都能按正常操做流程來管理系統,其中任何一人對系統操做的重大失誤,均可能致使系統崩潰或數據損失;因此su 工具在多人蔘與的系統管理中,並非最好的選擇,su只適用於一兩我的參與管理的系統,畢竟su並不能讓普通用戶受限的使用;超級用戶root密碼應該掌握在少數用戶手中,這絕對是真理!因此集權而治的存在仍是有必定道理的;shell
用來以其餘身份來執行命令,預設的身份爲root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經受權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,以後有5分鐘的有效期限,超過時限則必須從新輸入密碼。 安全
語法: sudo (選項) (參數)
選項: (該部分只作瞭解)
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變量設爲新身份的HOME環境變量;
-k:結束密碼的有效期限,也就是下次再執行sudo時便須要輸入密碼;
-l:列出目前用戶可執行與沒法執行的指令;
-p:改變詢問密碼的提示符號;
-s:執行指定的shell;
-u<用戶>:以指定的用戶做爲新的身份。若不加上此參數,則預設以root做爲新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息。bash
配置sudo必須經過編輯/etc/sudoers文件,並且只有超級用戶才能夠修改它。使用visudo命令編輯/etc/sudoers配置文件,操做方法同vi命令。當對多個命令設置速sudo權限時,須要用逗號加空格隔開。使用visudo有兩個緣由,一是它可以防止兩個用戶同時修改它;二是它也能進行有限的語法檢查。因此,即便只有你一個超級用戶,你也最好用visudo來檢查一下語法。 oracle
[root@3 ~]# visudo 更改sudo配置文件 # This file MUST be edited with the 'visudo' command as root. 必須在root用戶使用visudo命令! ## Allow root to run any commands anywhere root ALL=(ALL) ALL 2 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat 對2用戶進行受權(受權完畢後保存退出) [root@3 ~]# su - 2 切換到普通用戶 上一次登陸:三 6月 14 10:23:01 CST 2017pts/1 上 [2@3 ~]$ ls /root/ ls: 沒法打開目錄/root/: 權限不夠 (!!!即,普通用戶沒有訪問root用戶的權限) [2@3 ~]$ sudo /usr/bin/ls /root/ 使用sudo命下訪問root用戶 [sudo] password for adai001: anaconda-ks.cfg 訪問成功!!! [2@3 ~]$ sudo /usr/bin/ls /root/ anaconda-ks.cfg 再次使用sudo命令時無需輸入密碼 [2@3 ~]$ cat /root/ cat: /root/: 權限不夠 [2@3 ~]$ sudo /usr/bin/cat /root/ /usr/bin/cat: /root/: 是一個目錄
注:
1)在增添用戶的同時須要對用戶設置密碼(此處設置的是12345678),用戶和登陸密碼要同時成對存在!
2)在編輯sudo配置文件時可使用"NOPASSWD"前綴設置無密碼使用權限,即在使用sudo命令時不用再輸入用戶密碼!eclipse
sudo : 暫時切換到超級用戶模式以執行超級用戶權限,提示輸入密碼時該密碼爲當前用戶的密碼,而不是超級帳戶的密碼。不過有時間限制,Ubuntu默認爲一次時長15分鐘。ssh
su : 切換到某某用戶模式,提示輸入密碼時該密碼爲切換後帳戶的密碼,用法爲「su帳戶名稱」。若是後面不加帳戶時系統默認爲root帳戶,密碼也爲超級帳戶的密碼。沒有時間限制。
sudo -i: 爲了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可使用該命令。提示輸入密碼時該密碼爲當前帳戶的密碼。沒有時間限制。執行該命令後提示符變爲「#」而不是「$」。想退回普通帳戶時能夠執行「exit」或「logout」 。
其實,還有幾個相似的用法:
sudo /bin/bash:
這個命令也會切換到root的bash下,但不能徹底擁有root的全部環境變量,好比PATH,能夠擁有root用戶的權限。這個命令和 sudo -s 是等同的。
sudo -s : 如上
sudo su : 這個命令,也是登陸到了root,可是並無切換root的環境變量,好比PATH。
sudo su - : 這個命令,純粹的切換到root環境下,能夠這樣理解,先是切換到了root身份,而後又以root身份執行了 su -,此時跟使用root登陸沒有什麼區別。此結果貌似跟sudo -i的效果是同樣的,可是也有不一樣,sudo只是臨時擁有了root的權限,而su則是使用root帳號登陸了linux系統。
因此,咱們再來總結一下:
sudo su - 約等於 sudo -i
sudo -s 徹底等於 sudo /bin/bash 約等於 sudo su
sudo 終究被一個"臨時權限的帽子"扣住,不能等價於純粹的登陸到系統裏。
# # Sample /etc/sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. # ## # User alias specification ## User_Alias FULLTIMERS = millert, mikef, dowdy User_Alias PARTTIMERS = bostley, jwfox, crawl User_Alias WEBMASTERS = will, wendy, wim ## # Runas alias specification ## Runas_Alias OP = root, operator Runas_Alias DB = oracle, sybase ## # Host alias specification ## Host_Alias SPARC = bigtime, eclipse, moet, anchor:\ SGI = grolsch, dandelion, black:\ ALPHA = widget, thalamus, foobar:\ HPPA = boa, nag, python Host_Alias CUNETS = 128.138.0.0/255.255.0.0 Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0 Host_Alias SERVERS = master, mail, www, ns Host_Alias CDROM = orion, perseus, hercules ## # Cmnd alias specification ## Cmnd_Alias DUMPS = /usr/sbin/dump, /usr/sbin/rdump, /usr/sbin/restore, \ /usr/sbin/rrestore, /usr/bin/mt Cmnd_Alias KILL = /usr/bin/kill Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown Cmnd_Alias HALT = /usr/sbin/halt Cmnd_Alias REBOOT = /usr/sbin/reboot Cmnd_Alias SHELLS = /sbin/sh, /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \ /usr/local/bin/tcsh, /usr/bin/rsh, \ /usr/local/bin/zsh Cmnd_Alias SU = /usr/bin/su Cmnd_Alias VIPW = /usr/sbin/vipw, /usr/bin/passwd, /usr/bin/chsh, \ /usr/bin/chfn ## # Override built-in defaults ## Defaults syslog=auth Defaults>root !set_logname Defaults:FULLTIMERS !lecture Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log ## # User specification ## # root and users in group wheel can run anything on any machine as any user root ALL = (ALL) ALL %wheel ALL = (ALL) ALL # full time sysadmins can run anything on any machine without a password FULLTIMERS ALL = NOPASSWD: ALL # part time sysadmins may run anything but need a password PARTTIMERS ALL = ALL # jack may run anything on machines in CSNETS jack CSNETS = ALL # lisa may run any command on any host in CUNETS (a class B network) lisa CUNETS = ALL # operator may run maintenance commands and anything in /usr/oper/bin/ operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\ sudoedit /etc/printcap, /usr/oper/bin/ # joe may su only to operator joe ALL = /usr/bin/su operator # pete may change passwords for anyone but root on the hp snakes pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root # bob may run anything on the sparc and sgi machines as any user # listed in the Runas_Alias "OP" (ie: root and operator) bob SPARC = (OP) ALL : SGI = (OP) ALL # jim may run anything on machines in the biglab netgroup jim +biglab = ALL # users in the secretaries netgroup need to help manage the printers # as well as add and remove users +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser # fred can run commands as oracle or sybase without a password fred ALL = (DB) NOPASSWD: ALL # on the alphas, john may su to anyone but root and flags are not allowed john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* # jen can run anything on all machines except the ones # in the "SERVERS" Host_Alias jen ALL, !SERVERS = ALL # jill can run any commands in the directory /usr/bin/, except for # those in the SU and SHELLS aliases. jill SERVERS = /usr/bin/, !SU, !SHELLS # steve can run any command in the directory /usr/local/op_commands/ # as user operator. steve CSNETS = (operator) /usr/local/op_commands/ # matt needs to be able to kill things on his workstation when # they get hung. matt valkyrie = KILL # users in the WEBMASTERS User_Alias (will, wendy, and wim) # may run any command as user www (which owns the web pages) # or simply su to www. WEBMASTERS www = (www) ALL, (root) /usr/bin/su www # anyone can mount/unmount a cd-rom on the machines in the CDROM alias ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\ /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
文件編輯狀態下能夠用「/」進行關鍵詞查找,輸入「:set nu(=number)」顯示行號。
注: 該方法只適用於經過ssh遠程登陸Linux的時候。修改配置文件vi /etc/ssh/sshd_config,修改「#PermitRootLogin yes」爲「PermitRootLogin no」,即不容許root遠程登陸。
eg:
[root@3 ~]# vi /etc/ssh/sshd_config # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin yes -->no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #RSAAuthentication yes #PubkeyAuthentication yes :wq 保存退出! [root@3 ~]# systemctl restart sshd.service 重啓sshd服務,使其生效便可限制遠程root遠程登陸!