sudo簡單命令語法及配置


參考:http://yangrong.blog.51cto.com/6945369/1289452, https://wiki.archlinux.org/index.php/Sudo_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

 

sudo : 以他人身份執行命令,默認為root。可在文件/etc/sudoers中配置。

若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入當前用戶密碼,之后有5分鍾的有效期限,超過期限則必須重新輸入密碼。

1. sudo命令語法

語法:

sudo [-bhHpV][-s ][-u <用戶>][指令] sudo [-klv]  或

 sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value]
            [-i|-s] [<command>]
參數:

 

 

 參數 參數別名

描述

-A

--askpass

密碼提示使用輔助程序

-b

--background

在后台執行指令

-C

--close-from=num

關閉所有文件描述符 >=num

-E

--preserve-env

運行命令時保存用戶環境

-e

--edit

編輯文件,代替執行命令

-g

--group=group

以指定的用戶組名或ID執行命令

-H

--set-home

HOME環境變量設為新身份的HOME環境變量

-h

--help

顯示幫助信息和文本

-h

--hoe=host

在主機上運行命令(如果插件支持)

-k

--reset-timestamp

無效的時間戳文件 結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼

-K

--remove-timestamp

-k, 徹底刪除文件的時間戳

-l

--list

列出目前用戶可執行與無法執行的指令;列出用戶的權限或檢查一個特定的命令;使用兩次更長的格式

-n

--non-interactive

非交互模式,無提示使用

-P

--preserve-groups

保存組向量,而不是設置為目標的

-p

--prompt=prompt

改變詢問密碼的提示符號

-S

--stdin

從標准輸入讀取密碼

-s

--shell

執行指定的shell

-t

-type=type

創建指定類型的SELinux的安全上下文

-U

--other-user=user

在列表模式下,顯示用戶的權限

-u

--user=user

以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份

-v

--version

延長密碼有效期限5分鍾

-V

--validate

顯示版本信息

--

 

停止處理命令行參數

 

 2. sudo工作流程

1)當用戶執行 sudo 時,系統於 /etc/sudoers 檔案中搜尋該使用者是否有執行 sudo 的權限;

2)若使用者具有可執行 sudo 的權限后,便讓使用者輸入用戶自己的密碼來確認(是否需要輸入密碼,可配置);

3)若密碼輸入成功,便開始進行 sudo 后續接的指令(但 root 執行 sudo 時,不需要輸入密碼)

4)若欲切換的身份與執行者身份相同,那也不需要輸入密碼。

4. visudo單用戶授權

visudo是直接操作/etc/sudoers文件,我們也可以直接 vi /etc/sudoers,但是visudo命令的好處在於,退出/etc/sudoers文件時,系統會檢查/etc/sudoers語法是否正確。

 

[root@www ~]# visudo

....(前面省略)....

root ALL=(ALL) ALL #<==找到這一行,大約在80 行左右

yang1 ALL=(ALL) ALL #<==新增這行!則yang1用戶通過sudo擁有所有權限

....(前面省略)....

語法解釋:

 root

ALL=(ALL)

ALL

使用者賬號

登入者的來源主機名=(可切換的身份)

可下達的指令

詳細解釋:

使用者帳號

代表哪個用戶使用sudo的權限

來源主機名稱

指定信任用戶,即根據w查看[使用者帳號]的來源主機

可切換的身份

代表可切換的用戶角色,和sudo -u結合使用,默認是切換為root.

可下達的指令

用於權限設置,也可使用!來表示不可執行的命令

 

舉例:

[root@www ~]# visudo

yang2 ALL=(root) !/usr/bin/passwd,!/usr/bin/passwd root

#允許yang2用戶通過sudo來修改所有其它用戶的密碼,但不能修改root的密碼

 

4. visudo利用群組授權

[root@www ~]# visudo

....(前面省略)....

%test ALL=(ALL) ALL

# 在最左邊加上 % ,代表后面接的是一個群組,格式和單用戶授權一樣

[root@www ~]# usermod -a -G test test #<==test 加入root 的組中

任何加入test這個群組的使用者,就能夠使用 sudo 切換任何身份來操作任何指令

 

不需要密碼即可使用 sudo

[root@www ~]# visudo

....(前面省略)....

%wheel ALL=(ALL) NOPASSWD: ALL

#在指令處加入NOPASSWD:ALL即可

 

5. visudo利用別名授權

公司有很多部門,要方便管理,就可使用別名的方式,如:開發部,運維部,技術支持部,每個部門里多個人,部門之間擁有的命令權限也不一樣,同一部門權限一樣。如果一條一條寫的話,寫也麻煩,改就更麻煩了。

別名的使用方法:

使用方法可通過 man sudoers后面的舉例找到

 

 root

ALL=

(ALL)

ALL

使用者賬號

登入者的來源主機名

可切換的身份

可下達的指令

User_Alias FULLTIMERS = millert, mikef, dowdy

Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0

Runas_Alias OP = root, operator

Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm

例:

[root@www ~]# visudo

User_Alias ADMPW = pro1,pro2, pro3, myuser1, myuser2 #配置用戶別名ADMPW

Cmnd_Alias ADMPWCOM =!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

#配置命令別名ADMPWCOM

ADMPW ALL=(root) ADMPWCOM #指定用戶別名里的成員,擁有命令別名里的權限

 

6. visudo與環境變量

1)現象描述:test1用戶sudo命令已經有所有的權限,但不能查看網卡信息。

[test1@test ~]$ sudo -l

省略

User test1 may run thefollowing commands on this host:

(ALL) ALL

sudo權限已經全部有了

[test1@test ~]$ sudo ifconfig eth0

sudo: ifconfig: command notfound

不可以查看!提示這個命令找不到?為什么?這是因為系統環境變量導致的。

2) root環境變量與普通用戶環境變量比較

test1用戶找不到which命令在哪里,而root用戶可以。

[test1@test ~]$ which ifconfig

/usr/bin/which: no ifconfig in(/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin)

[test1@test ~]$ su - root

Password:

[root@test ~]# which ifconfig

/sbin/ifconfig

這是為什么呢?

 

3)查看兩個test1rootPATH變量

 

[root@test ~]# echo $PATH

 

/application/mysql/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

[root@test ~]# su - test1

 

[test1@test ~]$ echo $PATH

 

/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin

 

發現普通用戶都沒有sbin的路徑,而很多命令都放在這些路徑下。

 

 

 

4)在普通用戶變量文件添加上述路徑,cd ~ && vi ~.profile

PATH后加入:/sbin:/usr/sbin:/usr/local/sbin

[test1@test ~]$ cat .bash_profile |grep PATH

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/usr/local/sbin

[test1@test ~]$ source .bash_profile #使修改的變量文件生效

#修改變量后,接下來繼續查看網卡信息

[test1@test ~]$ sudo ifconfigeth0

eth0 Link encap:Ethernet HWaddr 00:0C:29:3B:DA:97

inet addr:10.0.0.239 Bcast:10.0.0.255 Mask:255.255.255.0

可以正常執行了!

 

5) 為防止不出現用戶找不到的命令,有兩個方法

 

5.1)把上述路徑添加到環境變量中,~/.bash_profile文件(普通用戶可編輯),或/etc/profile全局文件(需root用戶編輯)

 

5.2)執行命令用絕對路徑,如: /sbin/ifconfig eth0

 

注:centos6.4沒有此問題

 

7. 配置sudo日志文件跟蹤

操作步驟:

1)查詢sample.sudoers文件位置

[root@yang1 ~]# rpm -ql sudo

/usr/share/doc/sudo-1.7.2p1/sample.sudoers

/usr/share/doc/sudo-1.7.2p1/sample.syslog.conf

 

2)查看sample.sudoers中的日志相關配置

sample.syslog.conf這個文件為官方配置sudo日志配置筆記

[root@yang1 ~]# cat /usr/share/doc/sudo-1.7.2p1/sample.sudoers | grep "log"

Defaults syslog=auth

Defaults> root !set_logname

Defaults@SERVERS log_year, logfile=/var/log/sudo.log

3)創建日志文件

touch /var/log/sudo.log

 

4)把sudo日志文件加入系統日志

把下面命令添加到/etc/syslog.conf末尾

local2.debug /var/log/sudo.log

注:空白處不能用空格,必須用tab

centos6.4的日志服務為rsyslog

 

 

5)在/etc/sudoers中添加日志路徑(也可用visudo編輯)

 

加在/etc/sudoers末尾:

 

echo 'Defaults logfile=/var/log/sudo.log' >> /etc/sudoers

 

 

6)測試

 

[root@yang1 ~]# cat/var/log/sudo.log #測試前sudo.log為空

 

[root@yang1 ~]# su - yang1 #進入普通用戶(事先已授權)

 

[yang1@yang1 ~]$ sudo -l #查看當前用戶sudo可執行的命令

 

[sudo] password for yang1:

 

Matching Defaults entries foryang1 on this host:

 

requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAYHOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR

 

USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC

 

LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY", logfile=/var/log/sudo.log

 

 

 

Runas and Command-specificdefaults for yang1:

 

 

User yang1 may run the followingcommands on this host:

 

(ALL)!/usr/sbin/useradd, (ALL) !/usr/sbin/userdel, (ALL) /bin/touch #發現不能創建刪除用戶,能創建文件。

 

[yang1@yang1 ~]$ sudo touchyangrong #使用sudo創建一個文件

 

[yang1@yang1 ~]$ cat/var/log/sudo.log #查看sudo.log文件,已有記錄,測試成功

 

 

 

9月 5 12:37:46 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ; COMMAND=list

 

9月 5 12:38:05 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ;

 

COMMAND=/bin/touch yangrong

 

測試成功!

 

上述為簡單的審計,復雜點的可以把日志集中存儲,更復雜點的可以對用戶行為做錄像回放,過濾分析等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM