Linux權限管理(4)sudo權限

學習 sudo 權限前,先了解一下當用戶第一次使用sudo權限時CentOS的系統提示

咱們信任您已經從系統管理員那裏瞭解了平常注意事項。
總結起來無外乎這三點:
#1) 尊重別人的隱私。
#2) 輸入前要先考慮(後果和風險)。
#3) 權力越大,責任越大。

sudo權限的做用是:使普通用戶能夠臨時以 root 用戶的身份和權限執行系統命令

sudo權限的操做對象是系統命令shell

1、sudo權限的配置

1. 編輯 sudo權限 命令

visudo
visudo 命令實際修改的是 /etc/sudoers 文件

2. /etc/sudoers 配置文件

[root/etc]# cat /etc/sudoers

... 省略部份內容 ...

## Allow root to run any commands anywhere
## 容許root在任何地方運行任何命令
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software, service management apps and more.
## 容許「sys」用戶組的成員運行 網絡、軟件、服務管理應用等命令。
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
## 容許「wheel」用戶組的成員運行全部命令
%wheel  ALL=(ALL)       ALL

## Allows people in group wheel to run all commands without a password
## 容許「wheel」用戶組的成員運行全部命令,且運行時不須要輸入密碼
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the cdrom as root
## 容許「users」組的成員運行 掛載、卸載光盤的命令
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 容許「users」組的成員在本機運行 /sbin/shutdown -h now 命令
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 讀取 /etc/sudoers.d 目錄下全部文件的內容做爲配嵌入到此配置文件
## 注意,下面的 # 後面並非註釋
#includedir /etc/sudoers.d

爲用戶配置sudo權限

[用戶名]    [被管理主機的IP]=([可使用的身份])   [NOPASSWD: ][受權的命令]
[被管理主機的IP][可使用的身份][受權的命令] 均可以使用 ALL 來表示不限制。
添加 [NOPASSWD: ] 選項可使用戶在使用sudo權限時不須要輸入密碼。
[受權的命令]要使用絕對路徑,多條命令之間可用逗號( ,)分隔。
  • 例:
## Allow root to run any commands anywhere
## 容許root在任何地方運行任何命令
root    ALL=(ALL)       ALL

爲用戶組配置sudo權限

%[組名]    [被管理主機的IP]=([可使用的身份])   [NOPASSWD: ][受權的命令]
[被管理主機的IP][可使用的身份][受權的命令] 均可以使用 ALL 來表示不限制。
添加 [NOPASSWD: ] 選項可使用戶在使用sudo權限時不須要輸入密碼。
用戶組 與 用戶 的惟一區別是用戶組前有個 %
  • 例:
## 容許「wheel」用戶組的成員運行全部命令,且運行時不須要輸入密碼
%wheel        ALL=(ALL)       NOPASSWD: ALL

3. 注意事項

1) 賦予用戶sudo權限時必定要謹慎,夠用便可,不要賦予太高的權限

2) [受權的命令] 設置得越具體,用戶得到的權限越小。

3) 嚴禁賦予普通用戶 /usr/bin/passwd/usr/bin/vi/usr/bin/su/usr/bin/bash 命令的權限,擁此權限的用戶能夠修改root用戶密碼,而後隨心所欲。

4) 權力越大,責任越大。

2、sudo 命令介紹

1. sudo [命令]:以 root 身份來執行命令

用戶必須有相應命令的sudo權限

例子

  • 普通用戶使用 less 命令查看 root 用戶的歷史命令
[vagrant~]$ sudo less /root/.bash_history
cat report.md | grep -v ID | awk '$4 >= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 <= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 == 100 {print $2}'
sed -n '2p' report.md
sed -n '2,4p' report.md
sed '2,4d' report.md
cat -n report.md
sed '1a Begin' report.md
sed '1i Begin' report.md
sed '1a Begin' report.md
sed '1a End' report.md
sed '1c Hello World' report.md
sed '5c Hello World' report.md
... 省略 ...

2. sudo su:切換到root用戶

用戶必須有 /usr/bin/su命令的sudo權限
一旦切換成功,用戶能夠以root身份執行任何命令

例子

  • 普通用戶使用 sudo su 命令切換到 root 用戶,而後修改root用戶的密碼
[vagrant/tmp]$ sudo su

[root/tmp]# passwd
更改用戶 root 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。

3. sudo -s <shell>:切換到root用戶的shell

能夠不加 <shell>,會使用默認 shell
用戶必須有相應shell命令的sudo權限,例如 /usr/bin/bash
一旦切換成功,用戶能夠以root身份執行任何命令

例子

  • 普通用戶使用 sudo -s /usr/bin/bash 命令切換到 root 的shell,而後修改root用戶的密碼
[vagrant/tmp]$ sudo -s /usr/bin/bash

[root/tmp]# passwd
更改用戶 root 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
  • 能夠不加 <shell>,會使用默認 shell
[vagrant/tmp]$ sudo -s

[root/tmp]# exit

4. sudo -l:列出目前用戶可用的sudo權限的指令

例子

[vagrant~]$ sudo -l
...省略部份內容...
用戶 vagrant 能夠在本機上運行如下命令:
    (ALL) /usr/bin/bash, /usr/bin/su, /usr/bin/less

3、sudo權限的應用

1. 受權普通用戶能夠重啓服務器

  • 執行 visudo,而後添加以下內容
user1    ALL=(ALL)       /sbin/shutdown -r now
  • 切換到user1帳號,查看user1可用的sudo權限的指令
[user1@10 ~]$ sudo -l
...省略部份內容...
用戶 user1 能夠在 10 上運行如下命令:
    (ALL) /sbin/shutdown -r now

2. 受權普通用戶能夠添加其餘用戶

功能分析

要想添加其餘用戶,必須擁有添加用戶和設置密碼的權限,即 /usr/sbin/useradd/usr/bin/passwd 兩個命令的sudo權限安全

若用戶徹底擁有 /usr/bin/passwd 的sudo權限,則能夠經過 sudo passwd 命令或者 sudo passwd root 命令修改 root 密碼,這樣就會變得很是不安全。bash

所以,須要嚴格限制用戶對 /usr/bin/passwd 的權限:服務器

user ALL=(ALL)    /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root

/usr/bin/passwd [A-Za-z]* 表示 passwd 命令後附加的第一個字符只能是大小寫字母。
!/usr/bin/passwd "" 表示 passwd 命令後不能什麼都不加。
!/usr/bin/passwd root 表示 passwd 命令後不能加 root。網絡

三條語句的缺一不可,且順序不能顛倒。app

實例

  • 執行 visudo,而後添加以下內容
user1   ALL=(ALL)    /usr/sbin/useradd
user1   ALL=(ALL)    /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
  • 切換到user1帳號,查看user1可用的sudo權限的指令
[user1@10 ~]$ sudo -l
...省略部份內容...
用戶 user1 能夠在 10 上運行如下命令:
    (ALL) /usr/sbin/useradd
    (ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd \"\", !/usr/bin/passwd root
  • 添加用戶user2,併爲其設置密碼
[user1@10 ~]$ sudo useradd user2

[user1@10 ~]$ sudo passwd user2
更改用戶 user2 的密碼 。
新的 密碼:
無效的密碼: 密碼是一個迴文
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。

[user1@10 ~]$ grep user2 /etc/passwd
user2:x:1006:1007::/home/user2:/bin/bash
  • 嘗試以 passwdpasswd root 兩種方式修改 root 用戶的密碼,所有失敗
[user1@10 ~]$ sudo passwd
對不起,用戶 user1 無權以 root 的身份在 10.0.2.15 上執行 /bin/passwd。

[user1@10 ~]$ sudo passwd root
對不起,用戶 user1 無權以 root 的身份在 10.0.2.15 上執行 /bin/passwd root。
  • 添加用戶2_user,嘗試爲其設置密碼,失敗。由於 /usr/bin/passwd [A-Za-z]* 決定 passwd 命令後附加的第一個字符只能是大小寫字母。
[user1@10 ~]$ sudo useradd 2_user

[user1@10 ~]$ sudo passwd 2_user
對不起,用戶 user1 無權以 root 的身份在 10.0.2.15 上執行 /bin/passwd 2_user。
相關文章
相關標籤/搜索