原文鏈接:https://www.cnblogs.com/ImJerryChan/p/6667819.html
目錄
前言
一、介紹
二、配置文件簡介
三、實戰配置
前言:
su 的確為管理帶來方便,通過切換到root下,能完成所有系統管理工具,只要把root的密碼交給任何一個普通用戶,他都能切換到root來完成所有的系統管理工作;但通過su切換到root后,也有不安全因素;比如系統有10個用戶,而且都參與管理。如果這10個用戶都涉及到超級權限的運用,做為管理員如果想讓其它用戶通過su來切換到超級權限的root,必須把root權限密碼都告訴這10個用戶;如果這10個用戶都有root權限,通過root權限可以做任何事,這在一定程度上就對系統的安全造成了威協。因此sudo產生了。
我們可以把sudo理解成是系統管理員有針對性地把權限下放,也就是“放權”,因此,被“授權”的用戶如果想要以root的身份執行某些命令/操作,只需要輸入該用戶的密碼即可,無需知曉我們的root密碼是多少,當執行完成后,直接退回到當前用戶。這樣子的約束大大地提高了系統管理的安全性。
當然,這一切的大前提就是通過sudo的配置文件/etc/sudoers來進行授權。
一、介紹:
sudo的配置文檔是/etc/sudoers ,我們能夠用他的專用編輯工具visudo對其進行編輯 ,此工具的好處是在添加規則有誤時,保存退出會提示給我們錯誤信息;
附注:如果沒有visudo命令 需要 yum install -y sudo
配置完畢后,如果想知道哪些命令是您當前用戶能夠執行或禁止的,可通過切換至該用戶身份,然后通過sudo -l 查看;
如果不太熟悉用戶身份切換的可參考以下鏈接:Linux系統用戶及用戶組管理
二、配置文件簡介:
/etc/sudoers 文件有其書寫格式,其中有別名類型以及“放權格式”,下面我們來一一介紹。
別名類型包括如下四種: Host_Alias 定義主機名別名; User_Alias 用戶別名,別名成員能夠是用戶,用戶組(前面要加%號) Runas_Alias 用來定義runas別名,這個別名指定的是“目的用戶”,即sudo 允許轉換至的用戶; Cmnd_Alias 定義命令別名; 需要注意的是: 1.在每一種Alias后面定義的別名 NAME 可以是包含大寫字母、下划線連同數字,但必須以一個大寫字母開頭 2.配置文件中的 Default env_reset 表示重置(就是去除)用戶定義的環境變量,也就是說,當你用sudo執行一個命令的時候,你當前用戶設置的所有環境變量都是無效的。
放權格式: 授權用戶/組 主機名=(允許轉換至的用戶) NOPASSWD:命令動作 紅色標注的三個要素缺一不可,但在動作之前也能夠指定轉換到特定用戶下,在這里指定轉換的用戶要用( )號括起來, 假如無需密碼直接運行命令的,應該加NOPASSWD:參數,不需要時方可省略,下面介紹中會有NOPASSWD的使用示例。
三、實戰配置:
說了這么多,進入正題吧。我們先把配置放出來,然后通過注釋了解上面內容的使用方法
User_Alias SYSADER=beinan,linuxsir,%beinan
User_Alias DISKADER=lanhaitun
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root(注意這里的!)
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk 注:定義命令別名DSKCMD,下有成員parted和fdisk ;
SYSADER ALL= SYDCMD,DSKCMD
DISKADER ALL= (OP) DSKCMD
注解:
第一行:定義用戶別名SYSADER 下有成員 beinan、linuxsir和beinan用戶組下的成員,用戶組前面必須加%號;
第二行:定義用戶別名 DISKADER ,成員有lanhaitun
第三行:定義Runas用戶,也就是目標用戶的別名為OP,下有成員root
第四行:定義SYSCMD命令別名,成員之間用,號分隔,最后的!/usr/bin/passwd root 表示不能通過passwd 來更改root密碼;
第五行:定義命令別名DSKCMD,下有成員parted和fdisk ;
第六行:表示授權SYSADER下的任何成員,在任何可能存在的主機名的主機下運行或禁止 SYDCMD和DSKCMD下定義的命令。
更為明確遙說,beinan、linuxsir和beinan用戶組下的成員能以root身份運行 chown 、chmod 、adduser、passwd,但不能更改root的密碼;
也能夠以root身份運行 parted和fdisk ,
本條規則的等價規則是;
beinan,linuxsir,%beinan ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk
第七行:表示授權DISKADER 下的任何成員,能以OP的身份,來運行 DSKCMD ,無需密碼;更為明確的說 lanhaitun 能以root身份運行 parted和fdisk 命令;其等價規則是:
lanhaitun ALL=(root) /sbin/parted,/sbin/fdisk
如果我想不輸入用戶的密碼就能轉換到root並運行 SYDCMD 和 DSKCMD 下的命令,那應該把把NOPASSWD:加在哪里為好?參考下面例子;
SYSADER ALL= NOPASSWD: SYDCMD, NOPASSWD: DSKCMD
至此,基本用法的介紹已經到此結束了,但是visudo的配置遠遠不止如此,詳細的可以參考以下鏈接:
sudo的工作過程如下:
1,當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的權限
2,確認用戶具有可執行sudo的權限后,讓用戶輸入用戶自己的密碼確認
3,若密碼輸入成功,則開始執行sudo后續的命令
4,root執行sudo時不需要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規則)
5,若欲切換的身份與執行者的身份相同,也不需要輸入密碼
visudo使用vi打開/etc/sudoers文件,但是在保存退出時,visudo會檢查內部語法,避免用戶輸入錯誤信息
visudo需要root權限
[hadoop@localhost ~]$ visudo
visudo:/etc/sudoers:權限不夠
visudo:/etc/sudoers:權限不夠
使用visudo命令打開sudo配置文件
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 該文件允許特定用戶像root用戶一樣使用各種各樣的命令,而不需要root用戶的密碼
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相關命令的示例以供選擇,這些示例都可以被特定用戶或
## 用戶組所使用
##
## This file must be edited with the 'visudo' command.
## 該文件必須使用"visudo"命令編輯
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
## 對於一組服務器,你可能會更喜歡使用主機名(可能是全域名的通配符)
## 、或IP地址,這時可以配置主機別名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 這並不很常用,因為你可以通過使用組來代替一組用戶的別名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互關聯的命令(當然可以是一個)的別名,通過賦予該別名sudo權限,
## 可以通過sudo調用所有別名包含的命令,下面是一些示例
## 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
## Installation and management of software 軟件安裝管理相關命令別名
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services 服務相關命令別名
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database 本地數據庫升級命令別名
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage 磁盤操作相關命令別名
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe
, /bin/mount, /bin/umount
## Delegating permissions 代理權限相關命令別名
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes 進程相關命令別名
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers 驅動命令別名
# Cmnd_Alias DRIVERS = /sbin/modprobe
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
# 一些環境變量的相關配置,具體情況可見man soduers
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是規則配置:什么用戶在哪台服務器上可以執行哪些命令(sudoers文件可以在多個系統上共享)
## Syntax(語法):
##
## user MACHINE=COMMANDS 用戶 登錄的主機=(可以變換的身份) 可以執行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附帶一些其它的選項
##
## 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中戶組中的用戶使用NETWORKING等所有別名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS
## Allows people in group wheel to run all commands
## 允許wheel用戶組中的用戶執行所有命令
%wheel ALL=(ALL) ALL
## Same thing without a password
## 允許wheel用戶組中的用戶在不輸入該用戶的密碼的情況下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允許users用戶組中的用戶像root用戶一樣使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
## 允許users用戶組中的用戶關閉localhost這台服務器
# %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
特別要注意的是別名一定要使用大寫
---------------------
作者:sean-zou
來源:CSDN
原文:https://blog.csdn.net/a19881029/article/details/18730671
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
語法格式:visudo【option】 visudo [選項]
注意:
- visudo 命令以及后面的選項和用戶名里,每個元素之間都要至少要有一個空格
- visudo 命令是專門用來編輯 /etc/sudoers 這個文件的,並且提供語法檢查的功能。
參數選項:-c,手動執行語法檢查
案例一:
使用參數 -c 檢查語法
案例二:
使用 visudo 命令對普通用戶 tom 進行授權
- 如圖在 92 行的位置添加了普通用戶 tom 行信息

再次使用 tom 來創建用戶,需要用到 sudo 命令
案例三:
sudo 提權配置說明
%用戶組 機器=(授權使用哪個角色的權限) /usr/sbin/useradd
| 代授權的用戶或組 | 機器=(授權角色) | 可以執行的命令 |
|---|---|---|
| user | MACHINE= | COMMANDS |
| tom | ALL=(ALL) | /usr/sbin/useradd |

