歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> CentOS下的sudo相關配置的總結歸納

CentOS下的sudo相關配置的總結歸納

日期:2017/3/6 9:32:46   编辑:學習Linux

CentOS下的sudo相關配置的總結歸納


CentOS下的sudo相關配置的總結歸納


CentOS下的sudo相關配置的總結歸納

1 基礎部分

1.1 常用的命令行

1 2 3 4 5 6 man sudoers #參閱幫助 visudo #編輯sudoers的命令 sudo -l #查看可執行或禁止執行的命令 sudo -u user1 /bin/ls #指定user1用戶的身份執行命令 sudo -g gp1 /bin/ls #指以gp1組的身份執行 sudo -u user1 -g gp1 /bin/ls #指定用戶和組的身份執行

1.2 配置文件路徑

1 /etc/sudoers

1.3 sudoers的規則分類

sudoers的規則分為以下兩類:

1)別名定義(可選)

2)授權規則(必選)

1.4 特殊符號的用法

1 2 3 4 5 6 7 "#" 用於注釋 "\x" 轉義字符 "\" 使用到物理行行尾則把下行的物理行連接成一個邏輯行 "*" 匹配零個或多個字符 "?" 匹配單個字符 "[...]" 匹配指定范圍的字符 "[!...]" 匹配非指定范圍的字符

2 Alias(別名)

2.1 別名的類型

包含以下四種別名:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias

注:以上別名類型的書寫大小寫敏感

1 2 3 4 Alias ::= 'User_Alias' User_Alias (':' User_Alias)* | 'Runas_Alias' Runas_Alias (':' Runas_Alias)* | 'Host_Alias' Host_Alias (':' Host_Alias)* | 'Cmnd_Alias' Cmnd_Alias (':' Cmnd_Alias)*

2.2 別名的定義格式

2.2.1 單個別名的書寫方式

1 Alias_Type NAME = item1, item2, ...

注:別名成員以“,”號分隔

2.2.2 多個別名的書寫方式

1 Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

注:以“:”號分隔

2.2.3 四種書寫簡式

1 2 3 4 5 6 7 User_Alias ::= NAME '=' User_List Runas_Alias ::= NAME '=' Runas_List Host_Alias ::= NAME '=' Host_List Cmnd_Alias ::= NAME '=' Cmnd_List

2.3 別名定義NAME的有效字符

1 NAME ::= [A-Z]([A-Z][0-9]_)*

2.4 常見的定義范例

2.4.1 命令行別名的定義范例

作用:定義用戶別名和別名中包含能否運行的命令

范例:

1 2 ## Networking Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

2.4.2 用戶別名的定義范例

作用:定義用戶別名和別名中包含的用戶

1 2 ## User Aliases User_Alias NETWORKINGADMINS = user1, user2, %gp1

注:

1)組前面加“%”號

2)用戶名必須是系統有效的用戶

2.4.3 主機別名的定義范例

作用:定義主機別名和別名中包含的主機

范例:

1 2 ## Host Aliases Host_Alias FILESERVERS = fs1, fs2

注:

1)服務器fs1和fs2屬於FILESERVERS組

2)主機可以是主機名稱、IP(192.168.0.8)、或網段(192.168.0.0/24)、子網掩碼(255.255.255.0)

3 授權規則

3.1 授權規則的格式

1 2 3 4 5 6 7 8 9 10 ## 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

其實就這個意思:

1 用戶名或%組名 主機名稱=能否運行的命令

注:以上都可以使用別名代替

3.2 授權規則的范例

3.2.1 不使用別名的定義方式

基於系統用戶名的定義

1 user1 fs1=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

基於系統組的定義

1 %gp1 fs1=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

使用ALL關鍵字的定義

1 root ALL=(ALL) ALL

3.2.2 使用別名的定義方式

1 NETWORKINGADMINS FILESERVERS=(NETWORKADMINS)

注:

1)NETWORKINGADMINS代表定義過的用戶或組:user1, user2, %gp1

2)FILESERVERS代表定義過的服務器:fs1, fs2

3)NETWORKADMINS代表定義過的命令:/sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

3.2.3 關閉密碼驗證提示

在命令列前加入關鍵字“NOPASSWD: ”,詳細如下:

1 %wheel ALL=(ALL) NOPASSWD: ALL

1 %wheel ALL=(ALL) NOPASSWD: /sbin/route

4 其他指令

4.1 導入子規則

1 includedir /etc/sudoers.d

使定義於/etc/sudoers.d目錄下的子規則生效

4.2 關閉sudo命令的提示

此選項適用於使用shell中調用sudo執行命令時候屏蔽以下提示:

1 sudo: sorry, you must have a tty to run sudo

4.2.1 方法一

注釋掉以下行:

1 #Defaults requiretty

4.2.2 方法二

添加以下行:

1 Defaults:user1 !requiretty

4.3 指定安全的執行路徑

1 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

5 開啟監視日志

5.1 創建日志文件

1 touch /var/log/sudo.log

5.2 開啟sudo的日志功能

1 visudo

加入如下行:

1 2 3 Defaults logfile=/var/log/sudo.log Defaults loglinelen=0 Defaults !syslog

5.3 配置系統日志

5.3.1 修改日志配置文件

1 vim /etc/rsyslog.conf

“local7.*”行後加入如下行:

1 local2.debug /var/log/sudo.log

5.3.2 重啟系統日志服務

1 service rsyslog restart

5.4 測試日志

5.4.1 命令行監視日志

1 tail -f /var/log/sudo.log

5.4.2 執行指令測試

1 sudo /usr/bin/ssh [email protected]

6 應用場景

6.1 排除部分使用的情景

6.1.2 配置要求

1 2 禁止某用戶使用:su命令 允許某用戶使用:su除外命令

注:禁止的原因是因為用戶可以使用此命令提權

1 sudo su - root

6.1.2 解決方案

1) 查詢用戶的所屬組

1 id mail

顯示如下:

1 uid=8(mail) gid=12(mail) groups=12(mail)

2) 定義方法

1 2 %mail ALL=(root) NOPASSWD: ALL mail ALL=(root) NOPASSWD: !/bin/su

注:定義所屬組允許執行所有命令,但拒絕用戶執行su命令

3) 相對好的定義方法

1 2 %mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/* mail ALL=(root) NOPASSWD: !/bin/su

可防止用戶使用如下方法破解:

1 2 sudo cp /bin/su assu sudo ./assu - root

4) 相對更好的定義方法

1 2 3 %mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/* mail ALL=(root) NOPASSWD: !/*/* /sbin/*,!/*/* /bin/*,!/*/* /usr/sbin/*,!/*/* /usr/bin/*,\ !/bin/su

注:禁止用戶使用允許的命令操作運行命令的目錄的文件

可防止用戶使用如下方法破解:

1 2 3 4 5 sudo mv /bin/su /bin/assu #或者 sudo cp /bin/su /bin/assu #然後 sudo assu - root

5)實際上,我建議做如下配置

1 2 3 %mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/* mail ALL=(root) NOPASSWD: !/*/* /sbin/*,!/*/* /bin/*,!/*/* /usr/sbin/*,!/*/* /usr/bin/*,\ !/bin/su,!/usr/bin/passwd *root*,!/*/* */root/*

可防止用戶使用passwd命令操作root用戶:

1 2 3 sudo su - root sudo passwd -l root sudo passwd -u root

或使用其他命令去操作root的家目錄

1 2 sudo ls /root/ sudo ls -l /root/

怎樣?腦洞大開吧?sudo是相對安全的對吧?O(∩_∩)O哈哈~

注:以上個人總結,如有錯漏歡迎指正,在下感激不盡。

本文永久更新鏈接地址:

http://xxxxxx/Linuxjc/1141015.html TechArticle

Copyright © Linux教程網 All Rights Reserved