su 與sudo
su和sudo
1.1 su
作用:切換到其他使用者賬戶進行登入。
注意事項:
(1)root使用者切換到普通使用者是不需要輸入密碼確認。普通使用者切換至root需要輸入root密碼確認,普通使用者相互切換需要對方的密碼
(2)如果su不帶任何選項及引數,預設切換到root賬戶且不改變shell環境
(3)使用su時一定要帶- 即su – 要不然對於一個運維來說是非常low的表現
實驗 :su和 su -的區別
[[email protected] ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [
[email protected] ~]# pwd /root [[email protected] ~]# su desperadochn [[email protected] root]$ pwd /root #還是root的家目錄 [[email protected] root]$ echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #還是root的環境變數 [[email protected] root]$ su - desperadochn 密碼: 上一次登入:五 4月 29 23:28:37 CST 2016pts/1 上 [[email protected] ~]$ pwd /home/desperadochn #這時家目錄對了 [[email protected] ~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/desperadochn/.local/bin:/home/desperadochn/bin #這才是desperadochn的環境變數
因此我們可以得出結論:
(1)su不帶- 只切換使用者不會切換環境變數及家目錄等使用者獨有的設定。這可能會產生問題
(2)一定要用su –
1.2、sudo
當我們需要在執行一些不得不執行的命令但是這些命令只有root才能執行時,又不想或者不能切換成root(root許可權太高,要慎用)這時我們就需要sudo
首先sudo需要由root授權,root將那個使用者可以使用哪種命令進行授權,即對/etc/sudoers檔案進行修改。
當普通使用者需要使用獲得授權的只有用root才能使用的命令時,在前面帶上sudo,之後輸入自己使用者的密碼,之後就能以root許可權使用該命令了,密碼有效期5分鐘,在5分鐘內再次使用sudo將不需要密碼。
許多發行版甚至預設不允許root使用者直接登入,但是可以用sudo操作只有root才能完成的操作。
特點:
(1)sudo能限制使用者只能在某一臺主機上執行指定命令。
(2)sudo提供了豐富的日誌
(3)sudo的配置檔案是 /etc/sudoers
實現:
1、檢視sudo軟體是否安裝
[[email protected] ~]$ rpm -q sudo
sudo-1.8.6p7-16.el7.x86_64
2、/etc/sudoers 檔案詳解
## Host Aliases 定義主機別名
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2 #格式型別
# Host_Alias MAILSERVERS = smtp, smtp2 #格式型別
## User Aliases #使用者別名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem 格式型別
## Command Aliases 定義命令別名
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #設定sudo部分,這一條表示root使用者可以在任何主機執行任意命令
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 這一條表示sys組成員可以在任何主機執行網路、軟體方面的命令
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL #%wheel組成員可以在任何主機上執行任何命令
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL #%wheel組成員可以在任何主機上執行任何命令,且不需要密碼
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 允許%user組使用者執行sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom命令
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now 允許%user組成員可以在本機執行/sbin/shutdown -h now 命令
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
雖然我們可以通過vim等工具修改/etc/sudoers檔案,有專門的命令設定sudo許可權——visudo他的優點是帶語法檢查。
命令格式:
visudo [選項]
-c:啟用check—only 模式,sudoers檔案將被檢查語法錯誤、所有者和模式
-q:不進行語法檢查
-s:啟用嚴格檢查sudoers檔案
使用visudo編輯/etc/sudoers檔案
[[email protected] ~]# visudo
檢查:
[[email protected] ~]# visudo -c
/etc/sudoers:解析正確
sudo命令 命令格式: sudo [選項] [命令]
-l:列出使用者能執行的命令
實驗:
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
desperadochn ALL=(root) /usr/sbin/useradd
試一下:
[[email protected] ~]# su - desperadochn
上一次登入:六 9月 30 03:30:43 CST 2018pts/1 上
[[email protected] ~]$ sudo -l
匹配此主機上 desperadochn 的預設條目:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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
使用者 desperadochn 可以在該主機上執行以下命令:
(root) /usr/sbin/useradd
[[email protected] ~]$ useradd xxx
-bash: /usr/sbin/useradd: 許可權不夠
[[email protected] ~]$ sudo /usr/sbin/useradd baibudonghei
[[email protected] ~]$ id baibudonghei
uid=1003(baibudonghei) gid=1003(baibudonghei) 組=1003(baibudonghei)
-
-
絕對在任何時候不要將sudo、setUid、setGid許可權賦予工具型命令如vim或vi
-
sudu許可權設定時最好帶上命令詳細引數
-