visudo命令詳解

  

基礎命令學習目錄首頁html

 

原文連接:https://www.cnblogs.com/ImJerryChan/p/6667819.htmllinux

目錄
前言
1、介紹
2、配置文件簡介
3、實戰配置數據庫

 

前言:
    su 的確爲管理帶來方便,經過切換到root下,能完成全部系統管理工具,只要把root的密碼交給任何一個普通用戶,他都能切換到root來完成全部的系統管理工做;但經過su切換到root後,也有不安全因素;好比系統有10個用戶,並且都參與管理。若是這10個用戶都涉及到超級權限的運用,作爲管理員若是想讓其它用戶經過su來切換到超級權限的root,必須把root權限密碼都告訴這10個用戶;若是這10個用戶都有root權限,經過root權限能夠作任何事,這在必定程度上就對系統的安全形成了威協。所以sudo產生了。
    咱們能夠把sudo理解成是系統管理員有針對性地把權限下放,也就是「放權」,所以,被「受權」的用戶若是想要以root的身份執行某些命令/操做,只須要輸入該用戶的密碼便可,無需知曉咱們的root密碼是多少,當執行完成後,直接退回到當前用戶。這樣子的約束大大地提升了系統管理的安全性。
    固然,這一切的大前提就是經過sudo的配置文件/etc/sudoers來進行受權。安全

 

 

1、介紹:
    sudo的配置文檔是/etc/sudoers ,咱們可以用他的專用編輯工具visudo對其進行編輯 ,此工具的好處是在添加規則有誤時,保存退出會提示給咱們錯誤信息;服務器

附註:若是沒有visudo命令 須要 yum install -y sudo

    配置完畢後,若是想知道哪些命令是您當前用戶可以執行或禁止的,可經過切換至該用戶身份,而後經過sudo -l 查看;網絡

    若是不太熟悉用戶身份切換的可參考如下連接:Linux系統用戶及用戶組管理app

 

 

2、配置文件簡介:
    /etc/sudoers 文件有其書寫格式,其中有別名類型以及「放權格式」,下面咱們來一一介紹。dom

複製代碼
別名類型包括以下四種:
Host_Alias  定義主機名別名;
User_Alias  用戶別名,別名成員可以是用戶,用戶組(前面要加%號)
Runas_Alias 用來定義runas別名,這個別名指定的是「目的用戶」,即sudo 容許轉換至的用戶;
Cmnd_Alias  定義命令別名;

須要注意的是:
1.在每一種Alias後面定義的別名 NAME 能夠是包含大寫字母、下劃線連同數字,但必須以一個大寫字母開頭
2.配置文件中的 Default env_reset 表示重置(就是去除)用戶定義的環境變量,也就是說,當你用sudo執行一個命令的時候,你當前用戶設置的全部環境變量都是無效的。
複製代碼
放權格式:
受權用戶/組    主機名=(容許轉換至的用戶)   NOPASSWD:命令動做
紅色標註的三個要素缺一不可,但在動做以前也可以指定轉換到特定用戶下,在這裏指定轉換的用戶要用( )號括起來,
假如無需密碼直接運行命令的,應該加NOPASSWD:參數,不須要時方可省略,下面介紹中會有NOPASSWD的使用示例。

 

 

3、實戰配置:
    說了這麼多,進入正題吧。咱們先把配置放出來,而後經過註釋瞭解上面內容的使用方法ssh

複製代碼
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的配置遠遠不止如此,詳細的能夠參考如下連接:ide

 

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 [選項]
注意:

  1. visudo 命令以及後面的選項和用戶名裏,每一個元素之間都要至少要有一個空格
  2. visudo 命令是專門用來編輯 /etc/sudoers 這個文件的,而且提供語法檢查的功能。
    參數選項:-c,手動執行語法檢查
    案例一:
    使用參數 -c 檢查語法
    Linux經常使用命令——visudo
    案例二:
    使用 visudo 命令對普通用戶 tom 進行受權
    Linux經常使用命令——visudo
      1. 如圖在 92 行的位置添加了普通用戶 tom 行信息
        Linux經常使用命令——visudo
        再次使用 tom 來建立用戶,須要用到 sudo 命令
        Linux經常使用命令——visudo
        案例三:
        sudo 提權配置說明
        %用戶組 機器=(受權使用哪一個角色的權限) /usr/sbin/useradd
代受權的用戶或組 機器=(受權角色) 能夠執行的命令
user MACHINE= COMMANDS
tom ALL=(ALL) /usr/sbin/useradd
相關文章
相關標籤/搜索