1 sudo是什么
Sudo是Unix/Linux平台上的一個非常有用的工具,它允許系統管理員分配給普通用戶一些合理的“權利”,讓他們執行一些只有超級用戶或其他特許用戶才能完成的任務,比如:運行一些像mount,halt,su之類的命令,或者編輯一些系統配置文件,像/etc/mtab, /etc/samba/smb.conf等。這樣以來,就不僅減少了root用戶的登陸次數和管理時間,也提高了系統安全性。
2 sudo的特點
sudo設計者的宗旨是:給用戶盡可能少的權限但仍允許完成他們的工作。所以,sudo有以下特點:
- sudo能夠限制指定用戶在指定主機上運行某些命令。
- sudo可以提供日志,忠實地記錄每個用戶使用sudo做了些什么,且能將日志傳到中心主機或者日志服務器。
- sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機。它默認的存放位置是/etc/sudoers。
- sudo使用時間戳文件來完成類似“檢票”的系統。當用戶執行sudo並且輸入密碼后,用戶獲得了一張默認存活期為5分鍾的“入場券”。
3 sudo的命令
3.1 sudo條目語法
who host=(runas) TAG:command
- who :運行者用戶名
- host:主機
- runad:以那個身份運行
- TAG:標簽
- command:命令
樣例:
oracle ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel
注:上面的意思就是:oracle用戶可以在任何地方以root身份無密碼執行useradd有密碼執行usermod。
3.2 別名(宏)
此外sudo還支持別名的定義,我們通過引用定義好的別名可以提供工作效率:
who User_Alias
which_hosts Host_Alias
runas Runas_Alias
command Cmnd_Alias
User_Alias | Host_Alias | Runas_Alias | Cmnd_Alias |
用戶名 | 主機名 | 用戶名 | 命令路徑(全路徑) |
組名(%) | IP 地址 | 組名(%) | 目錄 |
其他User_Alias | 網絡地址 | 其他Runas_Alias | 其他Cmnd_Alias |
其他Host_Alias |
3.3 使用visudo編輯配置文件(/etc/sudoers)
雖然我們可以使用vim直接來編輯sudo的配置文件,但sudo提供了更加智能的編輯命令visudo,它能在編輯配置文件的同時幫我們檢查語法錯誤,並在錯誤時提供快捷的返回功能,相當nice。
注意在你使用visudo命令前,你有必要設置下EDITOR=vim來替換默認的vi,可以打開的時候語法高亮,看起來起來舒服多了。
[root@centos74 ~]$ vim ~/.bash_profile #編輯profile文件 # 添加如下行 export EDITOR=vim [root@centos74 ~]$ source ~/.bash_profile # 讓其立即生效
/etc/sudoers是sudo的主配置文件,如果我們想設置sudo設置,建議在/etc/sudoers.d/下面創建文件編輯。
[root@centos74 sudoers.d]$ visudo -f /etc/sudoers.d/oracle2 # 這里我給oracle2用戶一些sudo權限,命令會在sudoers.d目錄下創建一個文件的。這個文件名貌似使用.conf結尾貌似不可以的。
3.4 常用選項
- -l:查看當前用戶可以使用的所有sudo命令
- -g:以指定組執行
- -u:以指定用戶身份執行
- -K:移除時間戳文件
- -k:時間戳為元年(下次就必須輸入密碼)
- -v:更新時間戳,時間戳默認5分鍾,五分鍾到就需要再次密碼,使用-v可以續5分鍾。
關於時間戳這個東西。我們默認使用sudo執行命令的時候,第一次是需要輸入密碼的,短時間內再次執行sudo命令是不需要再次輸入密碼的。這個時間是有時間戳控制的。我們可以指定-k修改時間戳為元年,下次在sudo執行命令就必須輸入密碼。
3.5常用實例講解
3.5.1 oracle用戶可以在任何地點以任何的身份執行所有命令,等同於root。
oracle ALL=(ALL) ALL
3.5.2 oracle2用戶可以在任何地點以root的身份執行命令useradd(無需密碼)和usermod(需要密碼).
oracle2 ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel
這樣oracle2就可以免密碼useradd,有密碼(密碼為oracle2的自身密碼)使用userdel。
使用方式如下
[oracle2@centos74 ~]$ useradd test001 # 直接使用命令是不可以的。 -bash: /usr/sbin/useradd: Permission denied [oracle2@centos74 ~]$ sudo useradd test001 # 必須加sudo [oracle2@centos74 ~]$ id test001 # 查看添加的用戶信息 uid=1031(test001) gid=1032(test001) groups=1032(test001)
3.5.3 oracle3用戶只能在192.168.1.120主機遠程登錄並以root身份執行ifconfig eth0命令。
Cmnd_Alias NETCMND = /sbin/ifconfig eth0 oracle3 192.168.1.120 = (root) NOPASSWD:NETCMND
3.5.4 oracle4用戶可以執行/usr/sbin下的所有命令除了/usr/sbin/userdel
oracle4 ALL=(ALL) /usr/sbin/,!/usr/sbin/userdel
3.5.5 oracle5用戶可以cat /var/log/secure*的文件
oracle5 ALL=(ALL) /bin/cat /var/log/secure*,!/bin/cat /var/log/secure* *
注意這個如果不加!后面的內容,用戶可以執行如下命令cat /var/log/secure /etc/shadow 這樣的命令隨便查看系統的文件。很危險。
3.6 sudo的日志審計
為了能夠明確的追究責任,sudo還提供了人性化的日志功能,在/var/log/secure日志文件中可以查看到,用於記錄所有sudo類用戶的所有動作。