目錄
前言
一、介紹
二、配置文件簡介
三、實戰配置
前言:
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的配置遠遠不止如此,詳細的可以參考以下鏈接: