sudo身份切換


sudo更改身份:

  • 我們知道,使用 su 命令可以讓普通用戶切換到 root 身份去執行某些特權命令,但存在一些問題,比如說:僅僅為了一個特權操作就直接賦予普通用戶控制系統的完整權限;
  • 當多人使用同一台主機時,如果大家都要使用 su 命令切換到 root 身份,那勢必就需要 root 的密碼,這就導致很多人都知道 root 的密碼;
  • 考慮到使用 su 命令可能對系統安裝造成的隱患,最常見的解決方法是使用 sudo 命令,此命令也可以讓你切換至其他用戶的身份去執行命令。
  • 相對於使用 su 命令還需要新切換用戶的密碼,sudo 命令的運行只需要知道自己的密碼即可,甚至於,我們可以通過手動修改 sudo 的配置文件,使其無需任何密碼即可運行。

su 切換身份:su -l username –c ‘command’ 切換時需要知道對方的口令

sudo

• 來自sudo包,man 5 sudoers
• sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使
用 sudo,會提示聯系管理員
• sudo可以提供日志,記錄每個用戶使用sudo操作
• sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權
限和使用的主機
• sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鍾的“入場券”
• 通過visudo命令編輯配置文件,具有語法檢查功能
visudo -c 檢查語法
visudo -f /etc/sudoers.d/test

授權規則格式:

用戶 登入主機=(代表用戶) 命令

 示例:

 root ALL=(ALL) ALL

 格式說明:

user: 運行命令者的身份

host: 通過哪些主機(IP地址)

(runas):以哪個用戶的身份

command: 運行哪些命令

root ALL=(ALL) ALL
用戶名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
%wheel ALL=(ALL) ALL
%組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)

模塊 含義
用戶名或群組名 表示系統中的那個用戶或群組,可以使用 sudo 這個命令。
被管理主機的地址 用戶可以管理指定 IP 地址的服務器。這里如果寫 ALL,則代表用戶可以管理任何主機;如果寫固定 IP,則代表用戶可以管理指定的服務器。如果我們在這里寫本機的 IP 地址,不代表只允許本機的用戶使用指定命令,而是代表指定的用戶可以從任何 IP 地址來管理當前服務器。
可使用的身份 就是把來源用戶切換成什么身份使用,(ALL)代表可以切換成任意身份。這個字段可以省略。
授權命令 表示 root 把什么命令命令授權給用戶,換句話說,可以用切換的身份執行什么命令。需要注意的是,此命令必須使用絕對路徑寫。默認值是 ALL,表示可以執行任何命令。

常用選項:

sudo -i -u wang 切換身份

sudo [-u user] COMMAND

-V 顯示版本信息等配置信息

-u user 默認為root

-l,ll 列出用戶在主機上可用的和被禁止的命令

-v 再延長密碼有效期限5分鍾,更新時間戳

-k 清除時間戳(1970-01-01),下次需要重新輸密碼

-K 與-k類似,還要刪除時間戳文件

-b 在后台執行指令

-p 改變詢問密碼的提示符號

示例一:

讓用戶進行掛載光盤:

which mount 查看當前的mount在哪個路徑。

/usr/bin/mount  

vim /etc/sudoers

修改里邊的配置文件讓wang賬號以root賬號的權限進行掛載光盤和卸載光盤:

su - wang  切換至wang賬號

sudo    mount  /dev/cdrom  /mnt    wang賬號以root賬號進行掛載光盤,注意格式和賦予的權限一致,否則無法執行

操作如下:

[root@centos7home]#su - wang

Last login: Fri Oct 25 16:04:14 CST 2019 on pts/0

[wang@centos7~]$sudo mount /dev/cdrom /mnt   通過sudo命令進行掛載光盤

mount: /dev/sr0 is write-protected, mounting read-only

[wang@centos7~]$df

Filesystem     1K-blocks     Used Available Use% Mounted on

/dev/sda2      104806400  4404968 100401432   5% /

devtmpfs          740204        0    740204   0% /dev

tmpfs             756008        0    756008   0% /dev/shm

tmpfs             756008    10472    745536   2% /run

tmpfs             756008        0    756008   0% /sys/fs/cgroup

/dev/sda3       52403200    48840  52354360   1% /data

/dev/sda1        1038336   166960    871376  17% /boot

tmpfs             151204       12    151192   1% /run/user/42

tmpfs             151204        0    151204   0% /run/user/1104

/dev/sr0        10491772 10491772         0 100% /mnt

[wang@centos7~]$sudo umount /mnt  配置文件中也賦予wang賬號可以卸載掛載權限

示例二:

賦予wang在任何機器上有root的所有權限:

 

wang以root身份擁有所有權限之后就可以做任何事情,如:創建用戶,再次登錄時不需要輸入wang賬號口令,原因是有五分鍾的有效期。

[root@centos7home]#su - wang

[wang@centos7~]$sudo useradd zhang

[wang@centos7~]$sudo useradd xiao

%wheel是一個組,默認有root的權限,只要將組加入到此組內就會有root權限:

 示例:

gpasswd  -a   wang  -g wheel  將wang加入wheel組內

[root@centos7home]#id wang

uid=1104(wang) gid=1104(wang) groups=1104(wang),10(wheel)

[root@centos7home]#su - wang  切換到wang賬號也是可以以root身份進行創建賬號

Last login: Fri Oct 25 16:09:56 CST 2019 on pts/0

[wang@centos7~]$sudo useradd test  用sudo命令可以創建test用戶

[root@centos7~]#gpasswd -d wang wheel   刪除wang在wheel組里

Removing user wang from group wheel

示例三:

用wang在任何機器上代表liu用戶執行權限liu用戶的所有權限:

 1)cp /etc/fstab /data/  復制一個fstab文件到data下

chmod 000 /data/fstab  將此文件的權限改為000

setfacl -m u:liu:rw /data/fstab  授予liu用戶讀寫權限

2)su -  wang

sudo -u liu cat /data/fstab   其中wang用戶可以通過liu用戶進行讀取文件里邊的內容。

sudo -u liu vim /data/fstab  也可以修改里邊的權限。

示例四:

如果將root里邊/etc/passwd 的root用戶的ID改為1000,普通用戶的ID改為0,此時,root用戶就成為普通用戶,wang成為管理用戶,默認配置文件中root用戶可以切換到的任何用戶具有所有執行權限,因此我們可以通過切換到wang用戶進行執行root的權限。

 [wang@centos7~]#su - root

Last failed login: Fri Oct 25 09:19:01 CST 2019 from 192.168.34.1 on ssh:notty

There were 17 failed login attempts since the last successful login.

[root@centos7~]$sudo -u wang cat /data/fstab

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.

    #2) Think before you type.

    #3) With great power comes great responsibility.

[sudo] password for root:

#

# /etc/fstab

# Created by anaconda on Thu Aug 22 15:21:16 2019

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

UUID=38dd5f68-4f30-411c-b80a-0f4a60b06c6f /                       xfs     defaults        0 0

UUID=4357cc0e-6ee7-4a8f-8064-d1a54bdbf17f /boot                   xfs     defaults        0 0

UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data                   xfs     defaults        0 0

UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap                    swap    defaults        0 0

當wang只有普通用戶的賬號權限而沒有root權限時,且沒有root賬號和密碼,怎么辦?

當沒有root賬號且沒有密碼的情況下,我們只需要將wang用戶授權進行切換至任何用戶的操作,只需要我們切換至root下,就可以進行root所擁有的權限操作:

[wang@centos7~]$sudo -i  進行切換身份,默認就會切換至root權限

[sudo] password for wang:      只需要輸入wang賬號的密碼就可以切換至root賬號。

[root@centos7~]#

sudo 寫入用法:

1、我們也可以切換在/etc/sudoers.d文件下建一個新文件,避免與之前的/etc/sudoers配置文件混用,以下的格式,也可以切換至root用戶進行查看:

1)cd /etc/sudoers.d

vim test

wang  ALL=(ALL)  ALL

su - wang   切換至wang用戶也會用sudo切換至root權限查看內容:

sudo cat /etc/fstab 

visudo 用法:

此命令可以檢查自己配置文件哪行書寫存在錯誤並提示你去改正:

1)先對其進行聲明變量,顯示顏色方便修改文件:

cd /etc/profile.d/

vim a.sh

export EDITOR=vim

. /etc/profile.d/a.sh   讓其a.sh文件生效

 

2) visudo,如果我們寫入錯誤的行,會提示我們語法有問題,然后按e我們去修改錯誤的地方,然后保存退出。

 

 visudo -c也可以具有語法檢測功能,表示之前在/etc/sudoers.d/test文件權限不對,權限過大,建議我們修改為440權限,防止普通用戶查看到里邊的內容。

 

chmod 440  /etc/sudoers.d/test  修改當前的test權限之后就不會再報有語法問題。

[root@centos7sudoers.d]#visudo -c

/etc/sudoers: parsed OK

/etc/sudoers.d/test: parsed OK

sudoedit 用法:

修改vim /etc/sudoers.d/test文件中的內容:

內容:wang  192.168.34.100=sudoedit  表示wang賬號可以切換至root賬號下都能進行操作

[root@centos7sudoers.d]#su - wang   切換至wang 賬號可以查看里邊的內容。

Last login: Fri Oct 25 17:29:13 CST 2019 on pts/0

[wang@centos7~]$sudoedit cat /etc/fstab  切換到wang之后就可以用sudoedit命令執行root所有權限

sudoedit: cat: editing files in a writable directory is not permitted

#

# /etc/fstab

# Created by anaconda on Thu Aug 22 15:21:16 2019

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

UUID=38dd5f68-4f30-411c-b80a-0f4a60b06c6f /                       xfs     defaults        0 0

UUID=4357cc0e-6ee7-4a8f-8064-d1a54bdbf17f /boot                   xfs     defaults        0 0

UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data                   xfs     defaults        0 0

UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap                    swap    defaults        0 0  

總結:wang  (普通用戶),ALL(賦予在哪個IP上登陸)=(ALL)(代表哪個賬號)  ALL(最后一個是賦予什么權限,如果是單個權限,需要我們寫入命令的完整路徑及命令)

 

別名用法:
別名用法比較高級,可以對多個用戶、組、權限進行賦予別並,操作起來更快捷,簡單。
Users和runas:
username
#uid   授權用戶ID
%group_name  授權組
%#gid   授權組ID

sudo別名和示例
別名有四種類型:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias
別名格式:[A-Z]([A-Z][0-9]_)*   必須以大寫字母開頭
別名定義:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5

示例1:
Wang ALL=(ALL) ALL   Wang用戶對所有主機擁有root所有權限
%wheel ALL=(ALL) ALL  在%wheel組里邊的用戶對所有主機具有root所有權限
示例2:
wang ALL=(root) /sbin/pidof,/sbin/ifconfig  wang 用戶在任何主機以root身份執行pidof和ifconfig命令
%wheel ALL=(ALL) NOPASSWD: ALL       用戶組在%wheel組的在任何主機登陸時不需要輸入密碼的權限。
示例3
User_Alias NETADMIN= test1,tets2   將兩個用戶(test1,test2)進行賦予別名,命名為NETADMIN
Cmnd_Alias NETCMD = /usr/sbin/ip  將命令(IP)賦予別名為NETCMD
NETADMIN ALL=(root) NETCMD   test1,test2用戶在任何主機上以root身份執行IP命令
示例4
User_Alias SYSADER=wang,liu,%admins  將用戶wang,liu以及組admins 賦予SYSADER別名中
User_Alias DISKADER=tom     將用戶tom 賦予DISKADER中
Host_Alias SERS=www.baidu.com,172.16.0.0/24  將網址和IP地址賦予SERS別名
Runas_Alias OP=root   將要切換的身份root賦予別名OP
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod   將執行的命令chown和chmod賦予SYDCMD別名
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk  將執行的命令parted和fdisk命令賦予DSKCMD
SYSADER SERS=(OP) SYDCMD,DSKCMD  將wang liu和組%admins在baidu和172.16.0.0機器上以root身份進行執行parted和fdisk名。
DISKADER ALL=(OP) DSKCMD  將tom在任何機器以root身份執行parted和fdisk命令

示例5
User_Alias ADMINUSER =user1,user2     將user1和user2用戶賦予別名到ADMINUSER
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod,   將useradd和usermod命令賦予ADMINCMD別名
/usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root   將passwd秘鑰修改時只能修改以字母開頭,忽略大小寫,但是不能修改root命令
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel     將user1和user2在任何機器以root身份不需要登錄密碼執行useradd命令,刪除用戶命令需要輸入口令
示例6
Defaults:wang runas_default=tom  默認wang賬號默認代表是tom,如果代表jerry 需要加上-u選項。
wang ALL=(tom,jerry) ALL    默認wang用戶在任何機器代表tom,jerry用戶執行所有權限
示例7
wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd    wang賬號在在兩個IP地址上代表root用戶執行/usr/bin下的所有命令
示例8
wang ALL=(ALL) /bin/cat /var/log/messages*      當前是wang賬號可以在任何機器上以任何身份進行查看messages*下的所有文件
sudo cat /var/log/messages   /etc/passwd       此寫法有bug,后面追加文件還會查看到后面的文件內容
如果目前想看到message*開頭的所有文件,后面跟了其他文件,而不能被查看到,怎么解決?
解決辦法:
wang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
[wang@centos7~]$sudo cat /var/log/messages /etc/fstab
Sorry, user wang is not allowed to execute '/bin/cat /var/log/messages /etc/fstab' as root on centos7.localdomain. 提示結果是不可以訪問后面的文件

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM