Linux sudoers文件的寫法

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

文件的組成

? ? ? sudoers文件由三部分組成:

  • sudoers的默認配置,主要設置sudo的一些缺省值(本文不會對這些默認配置進行介紹,若有興趣可以自己man 5 sudoers然后搜defaults)
  • alias(別名),可以看作是變量的定義啦,本文也會全面的說說別名的定義。
  • 規則定義,sudoers文件的重點啦,本文會著重說明規則的定義。

Alias(別名)

一共有四種類型的別名,這些類型可以看作它們是數據類型啦哈。

  • User_Alias
  • Runas_Alias
  • Host_Alias
  • Cmnd_Alias

那么要如何定義這些Alias呢?語法如下:

User_Alias NAME=User_ListRunas_Alias NAME=Runas_ListHost_Alias NAME=Host_ListCmnd_Alias NAME=Cmnd_List

?

這里的NAME就可以看作是變量名咯。注意,NAME必須是要以大寫字母開頭,而且只能包含有大寫字母,數字,下劃線呢。那么User_List,Runas_List,Host_List,Cmnd_List又是什么呢?其實就是以“,"分隔的一個數組啦,只不過這四個別名表示的數組內容都會不同啦。

?

現在分別看看User_List,Runas_List,Host_List,Cmnd_List的每個數組元素可以是些什么值吧!

User:[!][username?|#uid?|%groupname?|?+netgroup?|%:nonunix_group?|?User_Alias]Runas:[!][username|#uid?|?%groupname?|?+netgroup?|Runas_Alias]Host:[!][hostname?|?ip_addr?|?network(/netmask)??|??netgroup?|?Host_Alias]Cmnd:[!][commandname|?directory|?"sudoedit"?|?Cmnd_Alias]

?

看看上面的元素名就可以知道大概什么意思了吧?這里著重拿些可能有疑問的出來說說。

嘆號'!'表示取反的意思啦。

每個元素都可以是之前定義過的別名變量啦,所以會有User_List,Runas_List,Host_List,Cmnd_List這些元素啦。

directory表示有可以進入該目錄并執行命令的權限啦

"sudoedit"表示允許用戶使用sudo -e選項。

?

如果還沒搞懂的話,可以看下面的別名定義的例子:

User_Alias USER_TEST=tim,#501,%svn,+webgroup,%:nonunix,!nouserRunas_Alias RUNAS_TEST=tim,#501,%svn,!+webgroupHost_Alias HOST_TEST=!www.baidu.com,localhost,127.0.0.1Cmnd_Alias CMND_TEST=Cmnd_Alias CMDS=/bin/passwd,/bin/ls,/home/svn

User Specification(用戶規則)

用戶規則定義的語法如下:

User_List Host_List=(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List,...

下面對上面的語法進行說明一下:

User_List(必填項):指的是該規則是針對哪些用戶的。

Host_List(必填項):指的是該規則針對來自哪些主機的用戶。

Runas_List1(可選項):表示可以用sudo -u來切換的用戶

Runas_List2(可選項):表示可以用sudo -g來切換的用戶組

SELinux_Spec(可選項):表示SELinux相關的選項,可選值為ROLE=role 或 TYPE=type。本人對SELinux不太熟,以后再補充這里吧。

Tag_Spec(可選項):用于控制后面Cmnd_List的一些選項啦,可選值有下面這些,具體自己man一下吧,這里就不啰嗦了。

'NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |?'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' |?'LOG_OUTPUT:' | 'NOLOG_OUTPUT:'

...(可選項):表示可以有多個(Runas_List1:Runas_List2) SELinux_Spec Tag_Spec Cmnd_List段的意思了。

Notice:如果Runas_List1和Runas_List2都沒填的話,默認是以root用戶執行

如果不是很理解的話,可以對比著文章后面舉的例子來看下,應該難不倒聰明的我們!

?

sudoers文件下的通配符

通配符只可以用在主機名、文件路徑、命令行的參數列表中。下面是可用的通配符:

*:匹配任意數量的字符

?:匹配一個任意字符

[...]:匹配在范圍內的一個字符

[!...]:匹配不在范圍內的一個字符

\x:用于轉義特殊字符

在使用通配符時有以下的注意點:

1.使用[:alpha:]等通配符時,要轉義冒號':',如:[\:alpha\:]

2.當通配符用于文件路徑時,不能跨'/'匹配,如:/usr/bin/*能匹配/usr/bin/who但不能匹配/usr/bin/X11/xterm

3.如果指令的參數列表是""時,匹配不包含任何參數的指令。

4.ALL這個關鍵字表示匹配所有情況。

?

man sudoers下的例子解析

? ? ? ?

 # 用戶別名定義User_Alias ? ? FULLTIMERS = millert, mikef, dowdyUser_Alias ? ? PARTTIMERS = bostley, jwfox, crawlUser_Alias ? ? WEBMASTERS = will, wendy, wim#用戶切換別名定義Runas_Alias ? ?OP = root, operatorRunas_Alias ? ?DB = oracle, sybaseRunas_Alias ? ?ADMINGRP = adm, oper#主機別名定義Host_Alias ? ? SPARC = bigtime, eclipse, moet, anchor :\SGI = grolsch, dandelion, black :\ALPHA = widget, thalamus, foobar :\HPPA = boa, nag,?PythonHost_Alias ? ? CUNETS = 128.138.0.0/255.255.0.0Host_Alias ? ? CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0Host_Alias ? ? SERVERS = master, mail, www, nsHost_Alias ? ? CDROM = orion, perseus, hercules#指令別名定義Cmnd_Alias ? ? DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\/usr/sbin/restore, /usr/sbin/rrestoreCmnd_Alias ? ? KILL = /usr/bin/killCmnd_Alias ? ? PRINTING = /usr/sbin/lpc, /usr/bin/lprmCmnd_Alias ? ? SHUTDOWN = /usr/sbin/shutdownCmnd_Alias ? ? HALT = /usr/sbin/haltCmnd_Alias ? ? REBOOT = /usr/sbin/rebootCmnd_Alias ? ? SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \/usr/local/bin/tcsh, /usr/bin/rsh, \/usr/local/bin/zshCmnd_Alias ? ? SU = /usr/bin/suCmnd_Alias ? ? PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less



#開始定義規則

#root用戶及wheel用戶組下的所有用戶都可以從任何主機連接進來以任意身份執行任意命令

root ? ? ? ? ? ALL = (ALL) ALL
%wheel ? ? ? ? ALL = (ALL) ALL


#FULLTIMERS這個用戶別名中定義的用戶可以從任何主機連接進來以任意身份執行任意命令,而且在切換用戶或用戶組時不需要輸入密碼

 FULLTIMERS ? ? ALL = NOPASSWD: ALL


#PARTTIMERS這個用戶別名中定義的用戶可以從任何主機連接進來以root身份執行任意命令。

PARTTIMERS ? ? ALL = ALL


#The user jack may run any command on the machines in the CSNETS alias (the networks 128.138.243.0, 128.138.204.0, and 128.138.242.0). ?Of those
? ? ? ?#networks, only 128.138.204.0 has an explicit netmask (in CIDR notation) indicating it is a class C network. ?For the other networks in CSNETS,
? ? ? # the local machine’s netmask will be used during matching.
? ?

jack ? ? ? ? ? CSNETS = ALL

#lisa這個用戶可以從CUNETS中定義的主機連接進來以root身份執行任意指令。

?lisa ? ? ? ? ? CUNETS = ALL


#oprator這個用戶可以從任何主機連接進來以root身份執行DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,sudoedit /etc/printcap, /usr/oper/bin/定義的指令
? ? ? ?

 operator ? ? ? ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\sudoedit /etc/printcap, /usr/oper/bin/


#joe這個用戶可以從任何主機連接進來,并且只能執行su operator指令

joe ? ? ? ? ? ?ALL = /usr/bin/su operator

#pete這個用戶可以從HPPA定義的主機中連接進來并以root身份執行passwd的所有命令,除了passwd root

pete ? ? ? ? ? HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

? ? ? ?
#opers這個用戶組下的所有用戶可以從任何主機連接進來,并可以切換至ADMINGRP中定義的用戶組進入/usr/sbin并執行命令

 %opers ? ? ? ? ALL = (: ADMINGRP) /usr/sbin


#bob這個用戶可以從SPARC和SGI中定義的主機連接進來,并可以OP定義的用戶執行任意指令?

 bob ? ? ? ? ? ?SPARC = (OP) ALL : SGI = (OP) ALL


#jim這個用戶可以從biglab這個netgroup中連接進來,并執行任意指令

jim ? ? ? ? ? ?+biglab = ALL


#secretaries這個netgroup下的所有用戶可以從任意主機連接進來,并以root身份執行PRINTING,/usr/bin/adduser, /usr/bin/rmuser中定義的指令
? ? ? ?

 %secretaries ? ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

#fred這個用戶可以從任何主機連接進來并以DB別名定義的用戶來執行所有指令,并且不需要輸入密碼

fred ? ? ? ? ? ALL = (DB) NOPASSWD: ALL

#john這個用戶可以從ALPHA定義的主機中連接進來,并可以以root身份執行su指令,但不能執行su root和使用任何su選項
? ?

john ? ? ? ? ? ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

?#jen這個用戶可以從任何主機(除了SERVERS中定義的主機)連接進來,并以root身份執行任意指令

#jill這個用戶可以從SERVERS定義的主機連接進來,并以root身份進入/usr/bin/執行指令,但不能執行SU和SHELLS中定義的命令

jill ? ? ? ? ? SERVERS = /usr/bin/, !SU, !SHELLS

#steve這個用戶可以從CSNETS中定義的主機連接進來,并以operator這個用戶可以進入/usr/local/op_commands/執行指令

 steve ? ? ? ? ?CSNETS = (operator) /usr/local/op_commands/

? ? ? ?

?

轉載于:https://my.oschina.net/ososchina/blog/867400

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541698.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541698.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

if是什么c語言,這個C語言是什么(if(1))?

我在openssl源代碼中注意到一個奇怪的成語,here并重復如下:if ((in NULL) && (passwds NULL)) {if (1) { (* #ifndef OPENSSL_NO_UI/* build a null-terminated list */static char *passwds_static[2] { NULL, NULL };passwds passwds_static;if (in …

c#queue_帶有C#示例的Queue.CopyTo()方法

c#queueC#Queue.CopyTo()方法 (C# Queue.CopyTo() method) Queue.CopyTo() method is used to copy the Queue elements/objects to an existing array from specified index. Queue.CopyTo()方法用于將Queue元素/對象從指定的索引復制到現有數組。 Syntax: 句法&a…

指針在c語言中的運用,怎么理解C語言中的指針,如何運用?

恰好我之前寫了一系列介紹 C 語言的文章,介紹了什么是指針,以及為什么要使用指針,下面摘錄一部分,感興趣的話,可以點我了解更多。什么是 C語言指針?不同的數據類型的主要區別在于占用的存儲空間不同。我們知…

設計模式(一)單例模式的七種寫法

1. 餓漢模式 public class Singleton { private static Singleton instance new Singleton(); private Singleton (){}public static Singleton getInstance() { return instance; } } View Code這種方式在類加載時就完成了初始化,所以類加載較慢,…

scala 字符串轉換數組_如何在Scala中將字節數組轉換為字符串?

scala 字符串轉換數組Byte Array in Scala is an array of elements of a byte type. String in Scala is a collection of the character data type. Scala中的字節數組是字節類型的元素的數組。 Scala中的String是字符數據類型的集合。 將字節數組轉換為字符串 (Convert byt…

智能關機軟件 c語言,智能關機軟件

智能關機軟件是一款免費共享關機軟件。智能關機軟件不但具有定時關機、自動關機的功能,而且還可以進行定時提醒信息、打開文件、打開網頁、重啟計算機、注銷用戶、鎖定計算機、計算機休眠、計算機待機、關閉顯示器,并且可以進行多任務計劃,可…

wget: command not found

-bash: wget: command not found的兩種解決方法 今天給服務器安裝新LNMP環境時,wget 時提示 -bash:wget command not found,很明顯沒有安裝wget軟件包。一般linux最小化安裝時,wget不會默認被安裝。可以通過以下兩種方法來安裝:1、rpm 安裝rp…

數據庫數據規范化看不懂_數據庫管理系統中的規范化

數據庫數據規范化看不懂DBMS中的規范化 (Normalization in DBMS) Every table must have a single idea. The method by which we divide tables approximately is called normalization and the rest used for normalization is a functional dependency. For the normalizati…

c 語言開發一個四則運算器,C++實現四則運算器(無括號)

本文實例為大家分享了C實現無括號的四則運算器的具體代碼,供大家參考,具體內容如下完成度更高的帶括號版本可以看C實現四則運算器(帶括號)對于無括號的計算器,實現起來比較容易,下面讓我們一步步實現。舉例首先明確需要實現怎樣的…

iOS開發之解決系統數字鍵盤無文字時delete鍵無法監聽的技巧

最近在做用戶登錄獲取驗證碼時添加圖形驗證碼功能,就是只有正確輸入圖形驗證碼才能收到后臺發送的短信驗證碼。效果如下: 看起來雖然是個小功能,但是實際操作起來,會發現蘋果給我們留下的坑,當然更多的是自己給自己挖的…

c ++查找字符串_C ++結構| 查找輸出程序| 套裝1

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>#include <math.h>using namespace std;struct st {int A NULL;int B abs(EOF EOF);} S;int main(){cout << S.A << " " << S.B;return 0;}Output: 輸出&#xff1a…

二級c語言加油,二級C語言 備考指南及常見問題(2013版)

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓3、關于上機操作部分的復習最好買一本上機題庫方面的教材&#xff0c;或打印、閱讀南開百題之類的電子文檔。配合上機模擬軟件(無紙化考試軟件)&#xff0c;上機練習是必須的。上機軟件一般有100套題多一點&#xff0c;每套有程序填…

開放定址散列表

再散列之后散列函數要重新計算。 // kaifangliaobiao.cpp : 定義控制臺應用程序的入口點。 //使用平方探測解決沖突問題時&#xff0c;散列表至少空一半時&#xff0c;總能插入一個新的元素#include "stdafx.h" #include<iostream> using namespace std;#ifnde…

合并兩個鏈表數據結構c語言,合并兩個鏈表.

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #define N1 10#define N2 10struct list{int date ;struct list *next;};main(){struct list *p1,*p2,*p3,*p4,*head,*head1,*head2,*p;int n0;head1head2NULL;p1p2(struct list *)malloc(sizeof(struct list));p1->da…

c ++查找字符串_C ++結構| 查找輸出程序| 套裝2

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){typedef struct{int A;char* STR;} S;S ob { 10, "india" };S* ptr;ptr &ob;cout << ptr->A << " " << ptr->STR[2];…

連接fiddler后手機無法顯示無網絡

升級了fiddler到4.6版本&#xff0c;手機設置代理后提示無網絡&#xff0c;試試以下解決方法&#xff1a; 1.fiddler升級后對應的.net framework也要升級&#xff0c;安裝最新的.net framework 4.6&#xff0c;升級安裝后&#xff0c;可以正確抓包啦 2.如果上述方法無效&#x…

android 人臉解鎖 鎖屏動畫,人臉保護鎖(人臉識別鎖屏)

這是一款十分炫酷的鎖屏工具&#xff0c;還記得電影中的特工所用的人臉識別鎖嗎&#xff1f;這款應用也能讓你過過癮&#xff01;人臉識別鎖屏安卓版是一款用人臉做密碼來打開手機屏保鎖的一個APP。不僅可以作屏保鎖&#xff0c;也可以單獨保護某些重要程序不被偷窺,例如查看短…

dbms_排名前50位的DBMS面試問答

dbms1) What are the drawbacks of the file system which is overcome on the database management system? 1)在數據庫管理系統上克服的文件系統有哪些缺點&#xff1f; Ans: Data redundancy & isolation, difficulty in accessing data, data isolation, and integri…

linux時間

CST代表中國標準時間rtc實時時鐘linux主要有兩種時間硬件時鐘 clock系統時鐘 date修改時間 date 03300924必須是兩位或者 date -s 2017:03:30將系統時間同步到硬件時間 hwclock -w將硬件時間同步到系統時間 hwclock -s轉載于:https://blog.51cto.com/12372297/1911608

查找Python中給定字符串的所有排列

Python itertools Module Python itertools模塊 "itertools" are an inbuilt module in Python which is a collection of tools for handling iterators. It is the most useful module of Python. Here, a string is provided by the user and we have to print a…