【Linux】一步一步学Linux——sudo命令(105)
00. 目錄
文章目錄
- 00. 目錄
- 01. 命令概述
- 02. 命令格式
- 03. 常用選項
- 04. 參考示例
- 05. 附錄
01. 命令概述
sudo - 以其他用戶身份執行一條命令
sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之后有5分鐘的有效期限,超過期限則必須重新輸入密碼。
sudo 是一種權限管理機制,管理員可以給一些普通用戶授權去執行一些 root 執行的操作,而不需要知道 root 的密碼。
sudo 允許一個已授權用戶以超級用戶或者其它用戶的角色運行一個命令。當然,能做什么不能做什么都是通過安全策略來指定的。sudo 支持插件架構的安全策略,并能把輸入輸出寫入日志。第三方可以開發并發布自己的安全策略和輸入輸出日志插件,并讓它們無縫的和 sudo 一起工作。默認的安全策略記錄在 /etc/sudoers 文件中。而安全策略可能需要用戶通過密碼來驗證他們自己。也就是在用戶執行 sudo 命令時要求用戶輸入自己賬號的密碼。如果驗證失敗,sudo 命令將會退出。
02. 命令格式
usage: sudo -h | -K | -k | -V usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user] usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user][command] usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-pprompt] [-u user] [VAR=value] [-i|-s] [<command>] usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-pprompt] [-u user] file ...03. 常用選項
選項:-A, --askpass 使用助手程序進行密碼提示-b, --background 在后臺運行命令-C, --close-from=num 關閉所有 >= num 的文件描述符-E, --preserve-env 在執行命令時保留用戶環境-e, --edit 編輯文件而非執行命令-g, --group=group 以指定的用戶組或 ID 執行命令-H, --set-home 將 HOME 變量設為目標用戶的主目錄。-h, --help 顯示幫助消息并退出-h, --host=host 在主機上運行命令(如果插件支持)-i, --login 以目標用戶身份運行一個登錄shell;可同時指定一條命令-K, --remove-timestamp 完全移除時間戳文件-k, --reset-timestamp 無效的時間戳文件-l, --list 列出用戶權限或檢查某個特定命令;對于長格式,使用兩次-n, --non-interactive 非交互模式,不提示-P, --preserve-groups 保留組向量,而非設置為目標的組向量-p, --prompt=prompt 使用指定的密碼提示-r, --role=role 以指定的角色創建 SELinux 安全環境-S, --stdin 從標準輸入讀取密碼-s, --shell 以目標用戶運行shell;可同時指定一條命令-t, --type=type 以指定的類型創建 SELinux 安全環境-U, --other-user=user 在列表模式中顯示用戶的權限-u, --user=user 以指定用戶或 ID運行命令(或編輯文件)-V, --version 顯示版本信息并退出-v, --validate 更新用戶的時間戳而不執行命令-- 停止處理命令行參數04. 參考示例
4.1 查看此用戶擁有的權限
[deng@itcast ~]$ sudo -l 匹配 %2$s 上 %1$s 的默認條目:!visiblepw, always_set_home, match_group_by_gid, env_reset,env_keep="COLORS DISPLAY HOSTNAME HISTSIZE 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用戶 deng 可以在 itcast 上運行以下命令:(ALL) ALL [deng@itcast ~]$4.2 結束密碼有效期
[deng@itcast ~]$ sudo -k [deng@itcast ~]$ sudo useradd test1 [sudo] deng 的密碼:有效期結束后,執行特殊命令,需重新驗證密碼
4.3 指定用戶執行命令
[deng@itcast ~]$ sudo -u tom ls /home/tom [deng@itcast ~]$4.4 以root賬戶來建一個文件file,為空默認是root用戶
[deng@itcast ~]$ sudo touch file [deng@itcast ~]$ ls -l file -rw-r--r-- 1 root root 0 8月 3 17:10 file [deng@itcast ~]$4.5 以root權限執行上一條命令
[deng@itcast ~]$ sudo !! sudo ls bak oracle_client_11gR2.tar.gz share test.cpp 圖片 桌面 bj34 oradiag_deng sz12 公共 文檔 file projects test 模板 下載 instantclient_11_2 scott_data.sql test.c 視頻 音樂 [deng@itcast ~]$4.6 顯示版本信息并退出
[deng@itcast ~]$ sudo -V Sudo 版本 1.8.19p2 Sudoers 策略插件版本 1.8.19p2 Sudoers 文件語法版本 45 Sudoers I/O plugin version 1.8.19p2 [deng@itcast ~]$4.7 將tom用戶設置為擁有所有權限
[root@itcast ~]# visudo仿照現有root的例子就行,我們在下面加一行(最好用tab作為空白)
91 ## Allow root to run any commands anywhere92 root ALL=(ALL) ALL93 tom ALL=(ALL) ALL第一個ALL是指網絡中的主機。第二個括號里的ALL是指目標用戶,也就是以誰的身份去執行命令。最后一個ALL當然就是指命令名了。
保存退出后,切換到deng用戶測試
[deng@itcast ~]$ ls /root ls: 無法打開目錄/root: 權限不夠 [deng@itcast ~]$ sudo ls /root [sudo] deng 的密碼: anaconda-ks.cfg openssl-1.1.1-pre6-dev.zip test.cpp 圖片 桌面 bak openssl-master 公共 文檔 initial-setup-ks.cfg oracle_client_11gR2.tar.gz 模板 下載 instantclient_11_2 share 視頻 音樂 [deng@itcast ~]$4.8 限制tom用戶的權限
限制一下tom的權限。比如我們只想讓他像root那樣使用執行lastb,把那一行改為:
91 ## Allow root to run any commands anywhere92 root ALL=(ALL) ALL93 tom localhost=/usr/bin/lastb測試
[deng@itcast ~]$ lastb lastb: /var/log/btmp: Permission denied [deng@itcast ~]$ sudo lastb root pts/2 Sat Aug 3 19:15 - 19:15 (00:00) root pts/2 Sat Aug 3 15:52 - 15:52 (00:00) root pts/1 Fri Aug 2 21:00 - 21:00 (00:00) root pts/1 Thu Aug 1 21:27 - 21:27 (00:00) btmp begins Thu Aug 1 21:27:11 2019 [deng@itcast ~]$4.9 其它相關配置
例如,我們想讓tom用戶在linux主機上以deng或itcast的身份執行kill命令,這樣編寫配置文件:
tom linux=(deng,itcast) /bin/kill但這還有個問題,tom到底以deng還是itcast的身份執行?這時我們應該想到了sudo -u了,它正是用在這種時候。 tom可以使用sudo -u deng kill PID或者sudo -u itcast kill PID,但這樣挺麻煩,其實我們可以不必每次加-u,把deng或itcast設為默認的目標用戶即可。再在上面加一行:
Defaults:foobar runas_default=itcastDefaults后面如果有冒號,是對后面用戶的默認,如果沒有,則是對所有用戶的默認。就像配置文件中自帶的一行:
Defaults env_reset另一個問題是,很多時候,我們本來就登錄了,每次使用sudo還要輸入密碼就顯得煩瑣了。我們可不可以不再輸入密碼呢?當然可以,我們這樣修改配置文件:
tom localhost=NOPASSWD: /bin/cat, /bin/ls4.10 日志與安全
sudo為安全考慮得很周到,不僅可以記錄日志,還能在有必要時向系統管理員報告。但是,sudo的日志功能不是自動的,必須由管理員開啟。
touch /var/log/sudo vi /etc/syslog.conf在syslog.conf最后面加一行(必須用tab分割開)并保存:
local2.debug /var/log/sudo重啟日志守候進程
ps aux grep syslogd把得到的syslogd進程的PID(輸出的第二列是PID)填入下面
kill –HUP PIDsudo就可以寫日志了:
[deng@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log install.log.syslog $cat /var/log/sudoJul 28 22:52:54 localhost sudo: deng : TTY=pts/1 ; pwd=/home/deng ; USER=root ; command=/bin/ls /rootsudo 有自己的方式來保護安全。以root的身份執行sudo-V,查看一下sudo的設置。因為考慮到安全問題,一部分環境變量并沒有傳遞給sudo后面的命令,或者被檢查后再傳遞的,比如:PATH,HOME,SHELL等。當然,你也可以通過sudoers來配置這些環境變量。
05. 附錄
參考:【Linux】一步一步學Linux系列教程匯總
總結
以上是生活随笔為你收集整理的【Linux】一步一步学Linux——sudo命令(105)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】一步一步学Linux——v
- 下一篇: 【Linux】一步一步学Linux——p