當以某個用戶的身份登錄後,在不退出系統從新登錄的狀況下,能否切換成另外一個用戶呢?答案是能夠的,使用 su 切換命令來實現。通常在生產中,也不推薦使用 root 直接登錄,而使用普通用戶登錄執行通常的操做命令。由於 root 權限很大,極可能誤操做,形成不可挽回的事故。當須要作管理性任務,利用su 命令能夠切換至 root 身份便可。shell
利用 su 切換身份,須要知道要切換目標用戶的密碼,因此通常只適合運維工程師使用,而在工做中,一些普通用戶可能須要執行的任務,但權限不足沒法執行。能夠事先經過 sudo 進行受權後,就能夠執行這些管理性任務了。安全
su username 切換用戶時,當前工做目錄和環境變量,如 PATH 保持不變,稱爲不徹底切換。bash
su - username ,當前工做目錄和環境變量,如 PATH 發生了變化,稱爲徹底切換。運維
su 切換用戶時,用戶身份只不過是在原來的shell中又經過su命令新開了一個shell而已。spa
su - root -c "command" 以root的身份去執行命令,不會新開一個子shell。code
root]# visudo peng ALL= /usr/bin/mount /dev/cdrom /mnt
root]# visudo zs ALL= sudoedit root]# su - zs zs]$ sudoedit /etc/sudoers
root]# visudo peng ALL=NOPASSWD: /usr/bin/mount /dev/cdrom /mnt
root]# visudo peng ALL=NOPASSWD: /usr/bin/mount /dev/cdrom /mnt, /usr/bin/cat /var/log/messages*
以上這個配置有很大的安全隱患,也能夠看使用 sudo cat /etc/log/messages /etc/shadowit
root]# visudo peng ALL=NOPASSWD: /usr/bin/mount /dev/cdrom /mnt,/usr/bin/cat /var/log/messages*,!/usr/bin/cat /var/log/messages* *
root]# visudo -f /etc/sudoers.d/test_alias User_Alias SYSADES=peng,zs,%admins Host_Alias SERS=192.168.52.0/24 Runas_Alias OP=root Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk SYSADES SERS= (OP) DSKCMD
root]# su - peng [peng@CentOS7 ~]$ sudo -l Matching Defaults entries for peng on CentOS7: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, 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 peng may run the following commands on CentOS7: (root) NOPASSWD: /usr/bin/mount /dev/cdrom /mnt, /usr/bin/cat /var/log/messages*, !/usr/bin/cat /var/log/messages* * (root) /sbin/parted, /sbin/fdisk