權限管理su、sudo、限制root遠程登陸

第三章 用戶和組管理

3.7 su命令

用於切換當前用戶身份到其餘用戶身份,變動時須輸入所要變動的用戶賬號與密碼。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的優缺點;

  su的確爲管理帶來方便,經過切換到root下,能完成全部系統管理工具,只要把root的密碼交給任何一個普通用戶,他都能切換到root來完成全部的系統管理工做;但經過su切換到root後,也有不安全因素;好比系統有10個用戶,並且都參與管理。若是這10個用戶都涉及到超級權限的運用,作爲管理員若是想讓其它用戶經過su來切換到超級權限的root,必須把root權限密碼都告訴這10個用戶;若是這10個用戶都有root權限,經過root權限能夠作任何事,這在必定程度上就對系統的安全形成了威協;想一想Windows吧,簡直就是惡夢;「沒有不安全的系統,只有不安全的人」,咱們絕對不能保證這 10個用戶都能按正常操做流程來管理系統,其中任何一人對系統操做的重大失誤,均可能致使系統崩潰或數據損失;因此su 工具在多人蔘與的系統管理中,並非最好的選擇,su只適用於一兩我的參與管理的系統,畢竟su並不能讓普通用戶受限的使用;超級用戶root密碼應該掌握在少數用戶手中,這絕對是真理!因此集權而治的存在仍是有必定道理的;shell

3.8 sudu命令

用來以其餘身份來執行命令,預設的身份爲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文件配置

   配置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 -i 詳解

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 終究被一個"臨時權限的帽子"扣住,不能等價於純粹的登陸到系統裏。

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)」顯示行號。

3.9 限制root遠程登陸

注: 該方法只適用於經過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遠程登陸!
相關文章
相關標籤/搜索