1. 程式人生 > >Linux--sudo權限講解

Linux--sudo權限講解

通用 usr 正在 定義 增加 ash sbin passwd sha


sudo簡介:sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個命令的

基本操作

[root@localhost /]# useradd Daniel #創建一個用戶
[root@localhost /]# passwd Daniel  #設置密碼
[root@localhost /]# su Daniel  #切換用戶到Daniel
bash-4.1$  #切換成功 

#給權限
#Linux sudo命令以系統管理者的身份執行指令,也就是說,經由 sudo 所執行的指令就好像是 root 親自執行。
#使用權限:在 /etc/sudoers 中有出現的使用者。這裏可以直接修改sudoers,也可以額使用visudo,推薦使用visudo,可以判斷你的語法是否正確

root@localhost /]# visudo
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
Daniel  ALL=(ALL)       ALL       #這是我們新添加的一行,意思是Daniel這個用戶,可以使用所有的命令,使用單個命令(比如useradd),可以將ALL改成/user/sbin/add

#測試
-bash-4.1$ ls /root/
ls: 無法打開目錄/root/: 權限不夠
-bash-4.1$ sudo ls /root/
[sudo] password for Daniel:    #sudo後輸入Daniel的密碼即可
anaconda-ks.cfg  install.log  install.log.syslog

#現在讓我們來看一下那三個ALL到底是什麽意思。第一個ALL是指網絡中的主機,可以將它改成localhost=,它指明foobar可以在此主機上執行後面的命令。第二個括號裏的ALL是指目標用戶,也就是以誰的身份去執行命令。最後一個ALL當然就是指命令名了。例如,我們想讓Danielr用戶在linux主機上以jimmy或rene的身份執行kill命令,這樣編寫配置文件:
Daniel   linux=(jimmy,rene)    /bin/kill
#但這還有個問題,Daniel到底以jimmy還是rene的身份執行?這時我們應該想到了sudo -u了,它正是用在這種時候。 Daniel可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但這樣挺麻煩,其實我們可以不必每次加-u,把rene或jimmy設為默認的目標用戶即可。再在上面加一行:
Defaults:foobar    runas_default=rene
Defaults後面如果有冒號,是對後面用戶的默認,如果沒有,則是對所有用戶的默認。就像配置文件中自帶的一行:
Defaults    env_reset

  

別名

#別名類型
1)Host_Alis定義主機別名
Host_Alias    WEBSERVERS = web1, web2  #WEBSERVERS是主機組,web1,web2是主機 #每個主機使用逗號分隔逗號後面有空格,=號兩邊也有空格,主機組就是別名,可以用這個別名來限制,主機就是在第一個ALL位置,可以定義很多這樣的別名,每個別名可以當做一個主機組,平常很少用到
#正在生產場景中,一般情況不需要設置主機別名,在定義授權規則時可以通過ALL來匹配所有的主機

2)User_Alias定義用戶別名
#別名成員可以是用戶,用戶組(用戶組前面要加%號)
User_Alias ADMINS = Daniel, qwer, %groupname
#假如說用戶Daniel,qwer和用戶組%groupname都有一樣的權限,那麽直接就可以使用別名ADMINS限制了,後期如果要增加一個同樣權限的用戶或組,直接在後面加上即可
#引用位置Daniel ALL=(ALL)  ALL ALL #Daniel就是用戶別名的引用位置

3)Runas_Alias定義runas別名
#這個別名指定的是“用戶身份”,即sudo允許切換到的用戶
#Runas-Alias定義的是某個系統用戶可以執行sudo切換身份到Runas_Alias下包含的成員身份
#語法
Runas_Alias OP = root
#引用位置:括號裏的那個ALL。表示使用sudo的時候是使用的OP身份來使用的(也就是root)

4)Cmnd_Alias定義命令別名
#命令別名就是定義一個可以把汗一對命令的名字
Cmnd_Alias  NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /usr/bin/net, /sbin/iptables
#引用位置:最後一個ALL。定義完成後,可以放在最後一個ALL位置,授權後,該用戶或組就可以通過sudo來使用這些命令了


#完整定義
#User_Alias by Daniel
User_Alias    ADMINS = admin, Daniel, %admins
User_Alias    NETADMINS = netadmin, %netadmins
User_Alias    USERADMINS = useradmin

#Cmnd_Alias by Daniel
Cmnd_Alias    USERCMD = /usr/sbin/useradd, /usr/sbin/userdel, /user/bin/passwd [A-Za-z]*, /bin/chown, /bin/chmod
Cmnd_Alias    DISKCMD = /sbin/fdisk, /sbin/parted
Cmnd_Alias    NETCMD  = /sbin/ifconfig, /etc/init.d/network
Cmnd_Alias    CTRLCMD = /usr/sbin/reboot, /usr/sbin/halt

Runnas_Alias    OP = root, Daniel

##
ADMINS    ALL=(ALL)    USERCMD, NETCMD, CTRLCMD
NETADMINS    ALL=(OP)    NOPASSWD: NETCMD
USERADMINS    ALL=(OP)    NOPASSWD:  USERCMD #NOPASSWD,表示輸入完一次後不需要在輸入密碼了,默認是輸入完畢後,五分鐘內不需要在輸入

  


  

Linux--sudo權限講解