標籤:visudo sudo su
sudo:
su: switch user
使用者切換兩種方式:
(1) su - user, su -l user
(2) su user
su -c ‘COMMAND‘ 不用切換使用者的身份,執行命令
sudo:(如同window上以管理員身份運行) executea command as another user;以另外一個使用者的身份執行指定的;
命令
授權機制實現:
授權檔案,/etc/sudoers
授權檔案的使用協助:man sudoers
兩類內容:
(1)別名的定義,即為變數;
(2)授權項,可使用別名進行授權;
授權項(每行定義一個授權項):
who where=(whom) commands
或者你可以這樣理解:
users hosts=(runas) commands
授權編輯:
編輯/etc/sudoers時,不建議使用vim直接進行編輯,對於/etc/sudoers檔案具有一定的格式,因此需要visudo這個專門的編輯工具編輯該檔案,同時使用visodu編輯該檔案出現語法錯誤的時候,會有相應的禁告提示;
[[email protected] ~]# visudovisudo: /etc/sudoers.tmp unchanged
查看/etc/sudoers
~]# less /etc/soduers## Allow root to run any commands anywhereroot ALL=(ALL) ALL#這裡就可以看出root可以運行所有命令的原因## Allows people in group wheel to run all commands%wheel ALL=(ALL) ALL#表示在wheel組中可以運行所有的命令
注意:使用者通過sudo獲得的授權,只能以sudo命令來啟動;
sudo命令:
sudo [options] COMMAND
-u:username:以指定的使用者身份運行命令;
[[email protected] ~]# useradd centos[[email protected] ~]# sudo -u yixuan whoamiyixuan #表示root以yixuan的身份運行whoami
-l:列出使用者能以sudo方式執行的所有命令;
[[email protected]~]# usermod -aG wheel yixuan #添加使用者到wheel組[[email protected] ~]#id yixuanuid=1001(yixuan)gid=1001(yixuan) groups=1001(yixuan),10(wheel)[[email protected] ~]# su - yixuanLast login: Thu Apr 28 08:40:15 CST 2016 on pts/0[[email protected] ~]$ sudo -lMatching Defaults entries for yixuan on this host: 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/binUser yixuan may run the following commands on this host: (ALL) ALL #這裡看出在wheel組中可以執行所有的命令[[email protected] ~]$ sudo -u root useradd fedora[[email protected] ~]$ tail -n1 /etc/passwdfedora:x:1002:1002::/home/fedora:/bin/bash[[email protected] ~]$
-k:清除此前緩衝的使用者認證成功的結果;
下面我們來解剖一下授權項中各項的意義:
who:
username:單個使用者;
#uid:單個使用者的ID號;
%groupname:組內的所有使用者;
%#gid:組內的所有使用者;
user_alias:使用者別名;
where:
ip或hostname:單個主機;
NetAddr:網路地址;
host_alias:主機別名;
whom:
username
#uid
runas_alias:表示以誰的身份運行
commands:
command:單個命令;
directory:指定目錄內的所有應用程式;
sudoedit:特殊許可權,可用於向其他使用者授予sudo許可權;
cmnd_alias:命令別名;
練習:為使用者fedora授權使用useradd,usermod兩個命令
[[email protected] ~]# visudo**************省略***************## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)#includedir /etc/sudoers.d #可以吧授權資訊卸載/etc/sudoers.d目錄下fedora ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod[[email protected] ~]# su - fedoraLast login: Thu Apr 28 09:09:12 CST 2016 on pts/0[[email protected] ~]$ sudo -l[sudo] password for fedora: #這裡是驗證fedora,只驗證一次Matching Defaults entries for fedora on this host: 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/binUser fedora may run the following commands on this host: (root) /usr/sbin/useradd, (root) /usr/sbin/usermod #授權項
定義別名的方法:
ALIAS_TYPE NAME=item1, item2, ...
ALIAS_TYPE:
User_Alias
Host_Alias
Runas_Alias
Cmnd_Alias
NAME:別名的名稱字元,必須使用全大寫字母;
樣本:利用定義別名的方式,為tom和jerry授權root身份使用userdel,useradd,passwd命令
[[email protected] sudoers.d]# useradd tom[[email protected] sudoers.d]# useradd jerry[[email protected] sudoers.d]# echo test | passwd --stdin tomChanging password for user tom.passwd: all authentication tokens updated successfully.[[email protected] sudoers.d]# echo test | passwd --stdin jerryChanging password for user jerry.passwd: all authentication tokens updated successfully.[[email protected] sudoers.d]# visudo#fedora ALL=(root) /usr/sbin/useradd,/usr/sbin/usermodUser_Alias USERADMINS=tom,jerryCmnd_Alias USERADMINCMNDS=/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwdUSERADMINS ALL=(root) USERADMINCMNDS[[email protected] sudoers.d]# su - tom[[email protected] ~]$ sudo /usr/sbin/useradd nihaouseradd: warning: the home directory already exists.Not copying any file from skel directory into it.Creating mailbox file: File exists[[email protected] ~]$ test[[email protected] ~]$ tail -n1 /etc/passwdnihao:x:1006:1006::/home/nihao:/bin/bash[[email protected] ~]$
注意:上面的案例說明passwd也能修改root的密碼,對不對,因此為了系統安全,需要這樣做!!!
樣本:
#includedir /etc/sudoers.d#fedora ALL=(root) /usr/sbin/useradd,/usr/sbin/usermodUser_Alias USERADMINS=tom,jerryCmnd_Alias USERADMINCMNDS=/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [a-z]*,!/usr/bin/passwd root,/usr/sbin/userdelUSERADMINS ALL=(root) USERADMINCMNDS[[email protected] ~]$ sudo -l[sudo] password for tom: Matching Defaults entries for tom on this host: 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/binUser tom may run the following commands on this host: (root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root, /usr/sbin/userdel[[email protected] ~]$ sudo /usr/bin/passwd rootSorry, user tom is not allowed to execute ‘/usr/bin/passwd root‘ as root on bogon.
!表示取反的意思,該授權就過濾了修改root密碼的許可權
【注意】在sudo命令使用的整個過程,我們都只是使用目前使用者的密碼進行身分識別驗證,但是如果切換到管理員root的身份,怎麼辦呢?
root超級管理員有密碼:直接exit
root超級管理員沒有密碼:就無法驗證切換root的身份,因此可以使用
[[email protected] ~]$ sudo -l[sudo] password for tom: Matching Defaults entries for tom on this host: 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/binUser tom may run the following commands on this host: (root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root, /usr/sbin/userdel, /bin/su[[email protected] ~]$ sudo su - rootLast login: Thu Apr 28 08:07:45 CST 2016 from 192.168.1.108 on pts/0[[email protected] ~]# 或者"centos ALL=(root) ALL"
不過這些操作都會在/var/log/messages中記錄
常用標籤:
NOPASSWD:表示使用者使用sudo不使用密碼
PASSWD:
樣本:
fedora ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod, PASSWD: /usr/sbin/userdel
本文出自 “Touch Dream” 部落格,請務必保留此出處http://xuelong.blog.51cto.com/10573089/1768472
su與sudo