12.su 命令與sudo 服務
1.su 命令:解決切換使用者身份的需求,使得當前使用者在不退出登入的情況下,順暢地切換到其他使用者。
比如從root 管理員切換至普通使用者:
[root@Centos test]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@Centos test]# su - centos Last login: Fri Aug 14 18:37:52 CST 2020 on pts/2 [centos@Centos ~]$ id uid=1112(centos) gid=1113(centos) groups=1113(centos) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su 命令與使用者名稱之間有一個減號(-),這意味著完全切換到新的使用者,即把環境變數資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。
當從root 管理員切換到普通使用者時是不需要密碼驗證的,而從普通使用者切換成root管理員就需要進行密碼驗證了。
[centos@Centos ~]$ su root Password: [centos@Centos ~]$ exit logout [root@Centos test]#su - centos Last login: Fri Aug 14 18:44:20 CST 2020 on pts/2
2.sudo :給普通使用者提供額外的許可權來完成原本root 管理員才能完成的任務,格式為“sudo [引數] 命令名稱”。
sudo 服務的配置原則:在保證普通使用者完成相應工作的前提下,儘可能少地賦予額外的許可權。
[centos@Centos ~]$ sudo -l [sudo] password for centos: Sorry, user centos may not run sudo on Centos.
sudo 命令具有如下功能:
限制使用者執行指定的命令:記錄使用者執行的每一條命令;
配置檔案(/etc/sudoers)提供集中的使用者管理、許可權與主機等引數;
驗證密碼的後 5 分鐘內(預設值)無須再讓使用者再次驗證密碼。
如果擔心直接修改配置檔案會出現問題,則可以使用sudo 命令提供的visudo 命令來配置使用者許可權。這條命令在配置使用者許可權時將禁止多個使用者同時修改sudoers 配置檔案,還可以對配置檔案內的引數進行語法檢查,並在發現引數錯誤時進行報錯。
注:只有 root 管理員才可以使用visudo 命令編輯sudo 服務的配置檔案。
使用 visudo 命令配置sudo 命令的配置檔案時,其操作方法與Vim 編輯器中用到的方法一致。
在sudo 命令的配置檔案中,按照下面的格式將第90行(大約)填寫上指定的資訊:誰可以使用 允許使用的主機=(以誰的身份) 可執行命令的列表
[root@Centos test]# visudo 90 ## 91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 93 centos ALL=(ALL) ALL
在填寫完畢後記得要先儲存再退出,然後切換至指定的普通使用者身份,此時就可以用sudo-l 命令檢視到所有可執行的命令了(下面的命令中,驗證的是該普通使用者的密碼,而不是root管理員的密碼):
[centos@Centos ~]$ sudo -l [sudo] password for centos: Matching Defaults entries for centos on Centos: !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 User centos may run the following commands on Centos: (ALL) ALL
測試:
[root@Centos ~]# su - centos Last login: Mon Aug 17 11:46:10 CST 2020 on pts/2 [centos@Centos ~]$ ls /root -bash: cd: /root: Permission denied [centos@Centos ~]$ [centos@Centos ~]$ sudo ls /root [sudo] password for centos:
[centos@Centos ~]$ sudo ls /root
anaconda-ks.cfg Documents findresults Music Public test
Desktop Downloads initial-setup-ks.cfg Pictures Templates Videos
一般只能賦予普通使用者具體的命令以滿足工作需求,這也受到了必要的許可權約束。如果需要讓某個使用者只能使用root 管理員的身份執行指定的命令,切記一定要給出該命令的絕對路徑,否則系統會識別不出來。我們可以先使用whereis 命令找出命令所對應的儲存路徑。
舉例:
[centos@Centos ~]$ exit logout [root@Centos ~]# whereis cat cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz [root@Centos ~]# visudo 91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 93 centos ALL=(ALL) /usr/bin/cat [root@Centos ~]# su - centos Last login: Mon Aug 17 11:52:33 CST 2020 on pts/2 [centos@Centos ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied [centos@Centos ~]$ sudo cat /etc/shadow [sudo] password for centos: root:$6$FItCpf70$FV4ZEntlsWO5jNif2Ndi8cbZWOqRYy
取消密碼驗證:新增NOPASSWD
[root@Centos ~]# whereis cat cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz [root@Centos ~]# [root@Centos ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL centos ALL=NOPASSWD: /usr/bin/cat