第十二周作業

`iptables 防火墻

iptbales是通過調用內核空間的netfiter來實現防火墻功能,在第三代版本后衍生出了五個鉤子(hook)來進行約束訪問控制。

image

chain 與 hook

五條鉤子分別對應五條鏈(chain),而鏈則是iptables 命令約束的參數,鏈的名字必須大寫

鉤子【hiook】 鏈【chain】 功能:
preouting PREOUTING 目標地址轉化(DNAT)
inout INOUT 處理輸入數據包
forward FORWARD 處理數據包轉發
output OUTPUT 處理輸出數據包
postrouting POSTROUTING 源地址轉換(SNAT)

 

每條鏈所能實現的功能:

  1. raw:關閉nat表上啟用的連接追蹤機制;
  2. mangle:拆解報文,做出修改并重新封裝起來;
  3. 用于修改源IP或目標IP,也可修改端口;
  4. filter:過濾,防火墻。
  PREOUTING INOUT FORWARD OUTPUT POSTROUTING
raw      
mangle
nat    
filter    

鏈【chain】的優先級:圖中藍色文件至左而右標示image

報文流向:
  • 流入本機: PREROUTING–> INPUT
  • 流出本機:OUTPUT –> POSTROUTING
  • 轉發:PREROUT –> FORWARD –> POSTROUING 
 路由器功能條件判斷:
  • 報文進入本通過網卡進入本機后;判斷目標是否本機,如果不是則轉發
  • 報文離開本機前;判斷經由哪個接口送往下一跳。
規則:
組成部分:根據規則匹配條件來嘗試匹配報文,一旦匹配成功就有規則定義的處理動作做出處理;

匹配條件:

內建基本匹配條件:

擴展模塊匹配條件;

處理動作:

內建基本處理動作

擴展處理動作;

自定義鏈處理機制;

iptbales 的鏈:內置鏈和自定義鏈
  • 內置鏈:對應hook function
  • 自定義鏈:用于內置鏈的擴展和補充,可實現更靈活的規則管理機制(需要被內置鏈調用)
添加規則時的注意:
  • 要實現那哪種功能:判斷添加到哪個表上。
  • 報文流經的路徑:判斷添加到哪個鏈上,請求和響應方向是相仿。
鏈–規則次序,幾位檢查的次序,因此隱含一定的應用法則;
  1. 同類規則,匹配范圍小的放上面;
  2. 不同的規則(訪問不同的應用),匹配到報文頻率較大的放到上邊。
  3. 將那些可由一條規則藐視的多個規則合并起來;
  4. 設置默認策略。
刪除自定義鏈要注意:
  1. 自定義鏈的應用引用要為0;
  2. 自定義鏈不可以有規則;

iptables 命令

iptables- IP包過濾管理

格式:
iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作
表名默認:firewalld
規則鏈名:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
協議名:TCP、UDP、icmp
動作:
  • ACCEPT:允許
  • REJECT:拒絕
  • DROP:丟棄
語法:
  • iptables -ADC 指定鏈的規則 [-A 添加 -D 刪除 -C 修改]
  • iptables -RI
  • iptables -D chain rule num[option]
  • iptables -[NX] 指定鏈
  • iptables -P chain target [option]
  • iptables -E 源鏈名 新鏈名

COMMAND:

鏈管理:
  • -N:new, 自定義一條新規則鏈;
  • -X:delete,刪除自定義的規則鏈;
  • -p:policy,設置默認策略,對filter表中的鏈而言,其默認策略有ACCEPT、DROP、REJECT。
  • -E:重命名自定義鏈,不可以修改或刪除計數不為0的自定義鏈。
規則管理:
  • -A:追加
  • -I:插入,要指明的位置,省略時默認第一條。
  • -D:刪除,可以指明序列號或者指明規則本身。
  • -R:替換自定義鏈上的指定規則;
  • -F:清空指定的規則鏈
  • -Z:置零,iptabels的每條規則都有個計數器,
  • 匹配到的報文個數
  • 匹配搭配的所有報文的大小之和;
查看:
  • -L:列出指定鏈上的所有規則;
  • -n:以數字的格式查看地址和端口號
  • -v:詳細嘻嘻,-vv,-vvv 更詳細的顯示
  • -x:顯示計數器結果的精確值;
  • –line-nmubers:顯示規則的序號。
參數:
  • -p:規則或包檢查(待檢查)的協議,指定的協議可以是tpc、udp、icmp的一個或全部
  • -s:指定源地址,可以是主機名、網絡名、和ip地址
  • -d:指定的目標地址
  • -j:(跳轉目標)指定的規則的目標
  • -i:進入的網絡接口,由INPUT、FORWARD和PREROUTING中進入的包,則所有已此接口開頭都會匹配,如果這個選項被忽略,會假設為'+',匹配任意接口。
  • -o:(接口名稱)這個包經由接口FORWARD、 OUPUT和POSTROUTING中送出的包前邊帶有!則取反,如果后邊加上+規則匹配所有已此接口開頭的接口,如果忽略則默認為+將匹配所有任意接口。
  • -f:(分片)這意味著在分片的包中,規則只詢問第二及以后的片,之后由于無法判斷這種把包源端口或目標端口(或者icmp類型的)這列包將不能匹配任何指定對他們進行匹配的規則,如果!說明用在了-f標志在前,標示相反的意思。

 

允許連接
#!/bin/bash
#
# 允許所有入站
# 允許所有出站
[[email protected] ~]# iptables -I INPUT -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT -j ACCEPT

# 允許回環地址(本機訪問自身端口)
[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT


# 允許指定IP.50訪問本機.127的22端口放行
[[email protected] ~]# iptables -A INPUT -s 192.168.199.50/24 -d 192.168.199.127/24 -p tcp --dport 22 -j ACCEPT
# 允許本機(注意源地址是本機)22好端口響應給.50的主機信息放行
[[email protected] ~]# iptables -I OUTPUT -s 192.168.199.127/24 -d 192.168.199.50/24 -p tcp --sport 22 -j ACCEPT


# 允許.50通過本機ens33網卡訪問本機.127的tcp 3306端口
[[email protected] ~]# iptables -A INPUT -i ens33 -s 192.168.199.50/24 -d 192.168.199.127 -p tcp --dport 3306 -j ACCEPT

# -s 不寫默認所有主機,-d不寫默認為本機,80到100之間的所有端口放行
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80:100 -j ACCEPT
禁止連接
禁止所有入站
[[email protected] ~]# iptables -A INPUT -j REJECT  對方能接受到拒絕信息
[[email protected] ~]# iptables -A INPUT -j DROP    對方接收到不到拒絕信息,可以起到隱藏IP的功效

禁止100.0的IP段訪問本機
[[email protected] ~]# iptables -A INPUT -s 192.168.100.0/24 -d 192.168.199.127 -j DROP

禁用所有轉發
[[email protected] ~]# iptables -A FORWARD -j DROP

查看命令
[[email protected] ~]# iptables -vnL

# 刪除入站規則第一條
[[email protected] ~]# iptables -D INPUT 1
[[email protected] ~]# iptables -D OUTPUT 1

# 將指定規則的計數器歸零:
[[email protected] ~]# iptables -Z INPUT 2
[[email protected] ~]# iptables -Z OUTPUT 2

# 清空所有規則,誤刪后重新啟動服務即可恢復
[[email protected] ~]# iptables -F
在默認表filter表中添加自定義鏈:
添加自定義鏈:
[[email protected] ~]# iptables -t filter -N root

引用自定義鏈
[[email protected] ~]# iptables -I INPUT -j root

刪除自定義鏈 數字1是root位于的數字
[[email protected] ~]# iptables -D INPUT 1

刪除自定義鏈:[確定自定義連沒有被引用,才可刪除]
[[email protected] ~]# iptables -t filter -X root

 

iptables 模塊

格式:

iptbales [-t 表] COMMAND [鏈] [PARAMETERS] [-m 模塊[ 模塊選項] [-j 規則 [規則選項]

匹配條件:

基本匹配條件

擴展匹配條件

隱式擴展:在使用-p選項指明了特定的協議時,無需再次使用-m選著指明擴展模塊。

顯示擴展:必須使用-m選項指明要調用的擴展模塊的擴展機制。

隱式擴展:
tcp:
  • --source-port,--sport port [:port]: --匹配報文的源端口;--可以是端口范圍(連續的用符號;分隔)。
  • --destination-port,--dport port [:port]:--匹配報文的目標端口;--可以是范圍端口(斷續的用符號;分隔)
  • --tcp-flags SYN,ACK,FIN,RST : --匹配哪些SYN標記被設置FIN和ACK標記沒有設置的包,注意標記之間用分號;區分中間沒有空格。其中SYN必須為1 其余為0
  • --syn:用于匹配第一次握手,相當于--tcp-flags SYN,ACK,FIN,RST 簡寫
upd:
  • --source-port --sport[:port] --匹配報文的源端口,可以是端口范圍(連續的用符號:分隔)
  • --destination-port,--dport -port [:port]:匹配報文的目標端口,可以是端口范圍,斷續的用符號:分隔
icmp
  • --icmp-type {type[/code[|typename}
  • echo-reply:0 響應
  • echo-request: 8 發送

tcp是可靠的傳輸協議、有3此握手機制保證傳輸的可靠性,如果有丟包,則重新傳輸數據,向ftp文件傳輸,遠程登錄,電子郵件,都是基于tcp協議,保存傳輸的完整性。

udp實時性較強,但可靠性不強,有丟包清苦,通常用來傳輸語音、電話、視屏等偶爾丟失不會影響整體效果。

icmp僅作網絡測速是否暢通。

顯示擴展:

multiport:以離散或連續的方式定義多端口匹配條件,最多15個;

  1. –source-ports,–sports port[,port | ,port:port] … :指定多個源端口;
  2. –destination-ports,–dports port[,port | port:port]… :指定多個目標端口;
允許訪問主機192.168.124.4的 80,139,445,3306號端口
[[email protected] ~]# iptables -I INPUT -d 192.168.124.4 -p tcp -m multiport --dports 80,139,445,3306 -j ACCEPT
允許訪問主機20-60端口
[[email protected] ~]# iptables -I INPUT -d 192.168.124.4 -p tcp -m multiport --dports 20:60 -j ACCEPT

 

iprange: 用來指定連續IP段的條件匹配。

  1. –src-range from [-to] 源地址
  2. –dst-range from [-to] 目標地址
允許192.168.124.1-50 IP段訪問主機的udp 137端口
[[email protected] ~]# iptables -I INPUT -d 192.168.124.4 -p udp --dport 137 -m iprange --src-range 192.168.124.1-192.168.124.50 -j ACCEPT
允許192.168.124.1-50 返回主機的upd 137端口
[[email protected] ~]# iptables -I OUTPUT -d 192.168.124.4 -p udp --sport 137 -m iprange --dst-range 192.168.124.1-192.168.124.50 -j ACCEPT

time: 時間限制

  1. –timestart hh:mm[:ss] 啟示時間范圍
  2. –timestop hh:mm[:ss] 結束時間范圍(如果不指定則表示循環)
  3. –weekdays day[,day…] 周幾
  4. -monthdays day[,day…] 每個月的幾號
  5. –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明允許日期
  6. –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明禁止日期

CentOS6 默認是內核時間,CentOS 7 需呀–kerneltz 指明內核時區。

允許2018年2月1日-2018年8月31號 早上8點到下午5點訪問
[[email protected] ~]# iptables -I INPUT -d 192.168.124.4 -p tcp --dport 21 -m time --datestart 2018-02-01 --datestop 2018-08-31 --timestart 08:00:00 --timestop 17:00:00 --kerneltz -j ACCEPT
允許2018年2月1日-2018年8月31號 早上8點到下午5點放行
[[email protected] ~]# iptables -I OUTPUT -d 192.168.124.4 -p tcp --sport 21 -m time --datestart 2018-02-01 --datestop 2018-08-31 --timestart 08:00:00 --timestop 17:00:00 --kerneltz -j ACCEPT

string 字符串匹配能做七層檢查,但是無法解密重新編的https

  1. –algo{bm|kmp}算法
  2. –string pattern
  3. –hex-string pattern
  4. –from offset
  5. –to offset 
創建一個web測試頁面 內容是hello world,匹配到hello 拒絕訪問,
[[email protected] html]# cd /var/www/html
[[email protected] html]# vim index.html

<h1> hello world </h1>

[[email protected] html]# iptables -R OUTPUT 1 -m string --algo kmp --string "hello" -j REJECT

connlimit 限制但客戶端最多可并發訪問數量

  1. –connlimit-upto n 并發數量小于N上限
  2. –commlimit-above n 并發數量大于N是拒絕的

取決于默認規則是什么,默認規則是白名單,默認是拒絕的寫成小于才允許,大于則不符合條件了,就被拒絕掉了,
默認規則是黑名單那就意味著默認是允許的,那就寫成大于拒絕,那么小于的時候默認規則是允許的。

[[email protected] conf.d]# iptables -R INPUT 1 -s 192.168.124.4 -d 192.168.124.3 -m connlimit --connlimit-upto 2 -j ACCEPT

limit 數率限制 令牌桶算法;

  1. –limit rate [/second |/minute | /hour |/day] 數率
  2. –limit-burst number 令牌桶可以收集多少個令牌
[[email protected] conf.d]# iptables -R INPUT 1 -d 192.168.124.3 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 10/minute -j ACCEPT

[[email protected] conf.d]# iptables -R OUTPUT 1 -s 192.168.124.3 -p icmp --icmp-type 0 -j ACCEPT

 

state 是conntrack的一個子集用來追蹤查看報文當前的連接狀態

-0state state

  1. NEW:新的連接請求
  2. ESTABLISHED:已建立的連接
  3. INVALID:無法識別的連接
  4. RELATED:相關的連接,當前連接是一個新請求,但附屬于某個已經存在的連接;
  5. UNTRACKED:未追蹤的連接。

state擴展:內核模塊裝載

  1. nf_conntrack
  2. nf_conntrack_ipv4

 

手動裝載:

  1. nf_conntrack_ftp
~]# modprobe nf_conntrack_ftp

state的連接記錄:

  1. 已經追中到的連接/proc/net/nf_conntrack
  2. 調整可記錄的連接數量最大值:/proc/sys/net/nf_conntrack_max
  3. 超長時長:/proc/sys/net/netfilter/*timeout*
允許所有主機里連接訪問192.168.124.3的22,80,139,445,3306端口
[[email protected] ~]# iptables -I INPUT -d 192.168.124.3 -p tcp -m multiport --dports 22,80,139,445,3306 -m state --state ESTABLISHED -j ACCEPT

放行所有狀態為以建立的連接
[[email protected] ~]# iptables -I OUTPUT -s 192.168.124.3 -m state --state ESTABLISHED -j ACCEPT
處理動作

-j targetname [per-target-options]

簡單target:

  • ACCEPT
  • DROP

擴展target:

  • REJECT –reject-with type

icmp-unreachable

icmp-host-unreachable

icmp-port-unreachable

icmp-proto-unreach-able

icmp-net-prohibited

icmp-host-prohibited

icmp-andmin-prohibited

LOG:

  1. –log-level 級別
  2. –log-prefix 標示

默認日志保存為/var/log/messages

[[email protected] ~]# iptables -I OUTPUT -s 192.168.199.124 -p icmp --icmp-type 0 -j REJECT --reject-with icmp-host-unreachable

LOG:

[[email protected] ~]# iptables -I OUTPUT -s 192.168.199.124 -p icmp --icmp-type 0 -j LOG
[[email protected] ~]# iptables -I OUTPUT -s 192.168.199.124 -p icmp --icmp-type 0 -j LOG --log-pefix "aaaa"

 

保存和載入規則:

保存規則:iptables-save > /PATH/TO/SOME_RULE_FILE

載入規則:iptables-restore < /PATH/FROM/SOME_RULE_FILE

-n,–noflush:不清楚原有規則

-t,–test:僅分析成規則集,但不提交

[[email protected] ~]# iptables-save > /tmp/a

[[email protected] ~]# iptables-restore < /tmp/a

centos 6 :

保存規則:
service iptables save保存規則于/etc/sysconfig/iptables 文件,覆蓋保存
重載規則:
service iptables restart 默認重載/etc/sysconfig/iptbales 文件中的規則。

默認文件:/etc/sysconfig/iptables-restore

實現iptables之SNAT源地址修改及DNAT目標地址修改和PNAT端口修改等應用

image

實現模式:

  • 網關策略

FORWARD鏈轉發策略(位于filter表)

需要注意請求報文和響應報文的規則方向。

如果要啟用conntrack(連接追蹤)機制,建議將雙方向的狀態為ESTABLISHED的報文直接放行。


NAT:位于nat表

  • 請求報文:設置策略規則

修改源地址:SNAT,MASQUERADE

修改目標地址: DNAT

  • 響應報文:由NAT的conntrack(連接追蹤)機制自動實現;

 

nat表:

SNAT:源地址修改,僅用在POTROUTING、INPUT(很少)和user—defined自定義鏈上

–to-source [ipaddr[-ipaddr]] 指定源地址(可范圍)地址1:地址2

  • DNAT:修改目標地址或端口,僅用在PREROUTING、OUTPUT和user-defined自自定義上。

     

     

     

     

     

    –to-destiantion [ipaddr[ipaddr[-ipaddr]][:port[-port]]

  • MASQUER ADE:僅在動態POSTROUTING中有效 動態IP地址。
3臺測試主機設置分別設置:
 A 內網主機
ens37
IP: 192.168.227.131

~]# route add default gw 192.168.227.130


B 路由主機

ens37
內網IP:192.168.227.130

eno16777736
外網IP:192.168.124.5

開啟核心轉發
~]# echo 1 > /proc/sys/net/ipv4/ip_forward 

關閉核心轉發
 ~]# echo 0 > /proc/sys/net/ipv4/ip_forward 

C 外網主機

ens33
IP:192.168.124.6

 ~]# route add -net 192.168.227.0/24 gw 192.168.124.5
~]# yum -y install httpd
~]# systemctl start httpd.service
 FORWARD 轉發控制

 

1、
路由主機上添加限制轉發(默認規則),內網主機A ping 外網主機C則不通。

~]# iptables -A FORWARD -j REJECT

2、
放行可訪問80端口進行轉發。
轉發出去
[[email protected] ~]# iptables -I FORWARD -s 192.168.227.0/24 -d 192.168.124.6 -p tcp --dport 80 -j ACCEPT

返回響應內容
[[email protected] ~]# iptables -I FORWARD 2 -d 192.168.227.0/24 -p tcp --sport 80 -j ACCEPT

內網主機A測試便可訪問外網C的httpd站點

[[email protected] ~]# curl http://192.168.124.6
<h1> hello world</h1>

3、使用 state 優化設置
清空規則保留默認規則

放行已經鏈接ESTABISHED的訪問
[[email protected] ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT

允許次ip段建立新連接80
[[email protected] ~]# iptables -I FORWARD 2 -s 192.168.227.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT

放行響應報文的時候盡量使用RELATED 以便保持連接

 

NAT表-SNAT
使用內網主機A ping 外網主機C ,外網主機抓包查看ip是否修改

內網主機A
ping 192.168.124.6

路由主機B
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.227.0/24 -p icmp --icmp-type 8 -j SNAT --to-source 192.168.124.5

外網主機C
[[email protected] ~]# tcpdump -i ens33 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
23:24:55.909879 IP 192.168.124.5  192.168.124.6: ICMP echo request, id 2733, seq 8, length 64
23:24:55.909926 IP 192.168.124.6  192.168.124.5: ICMP echo reply, id 2733, seq 8, length 64

顯示已經替換
NAT表-DNAT
1、主機A是內網服務器

~]# yum -y install httpd

2、主機B是負載均衡服務器

將源目標地址B修改唯內網主機A
[[email protected] ~]# iptables -t nat -I PREROUTING -d 192.168.124.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.227.131

3、主機C是外網客戶端

[[email protected] ~]# curl http://192.168.124.5

4、主機B

抓包內網網卡,顯示已經目標地址被修改

[[email protected] ~]# tcpdump -i ens37 -nn tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens37, link-type EN10MB (Ethernet), capture size 65535 bytes
11:55:31.423015 IP 192.168.124.6.49112  192.168.227.131.80: Flags [S], seq 3489069322, win 29200, options [mss 1460,sackOK,TS val 724261722 ecr 0,nop,wscale 7], length 0
11:55:31.425124 IP 192.168.227.131.80  192.168.124.6.49112: Flags [S.], seq 2010054297, ack 3489069323, win 14480, options [mss 1460,sackOK,TS val 5189745 ecr 724261722,nop,wscale 7], length 0

抓包外網網卡,顯示客戶端訪問地址和返回地址依然是,客戶端識別的地址。

[[email protected] ~]# tcpdump -i eno16777736 -nn tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno16777736, link-type EN10MB (Ethernet), capture size 65535 bytes
11:57:20.976822 IP 192.168.124.6.49116  192.168.124.5.80: Flags [S], seq 3823048712, win 29200, options [mss 1460,sackOK,TS val 724371284 ecr 0,nop,wscale 7], length 0
11:57:20.977415 IP 192.168.124.5.80  192.168.124.6.49116: Flags [S.], seq 72447982, ack 3823048713, win 14480, options [mss 1460,sackOK,TS val 5299296 ecr 724371284,nop,wscale 7], length 0

sudo

非登錄用戶下執行授權用戶的命令

 

格式:

sudo [COMMAND]

sudo [COMMAND] – [USER]

常用選項:

-l:command列出用戶能執行的命令

-k:清楚此緩存用戶認證密碼。

 

配置文件:

/etc/sudoers.d

也可以使用visudo直接編輯

授權機制:

users hosts=(runas) command

users:

username:用戶名

#uid:用戶ID

%groupname:用戶組名

%#gid:用戶組ID

user_alias:定義用戶別名

hsots:

ip:ip地址

hostname:主機名

Netaddr:網絡地址

host_alias:定義別名

runas:

runas_alias 

command:

command:命令

directory:目錄

sudoedit:

cmnd_alias:別名授權

授權示例:

1、root ALL=(ALL) ALL

解釋:用戶  所有終端=(所有用戶) 所有命令

2、%whell ALL=(ALL) ALL

解釋:whell 用戶組  所有終端=(所有用戶) 所有命令

3、自定義組

User_Alias NETADMIN=tom,jerry

cmnd_Alias NETADMIN=/usr/sbin/ip

解釋:自定義用戶組 NETADMIN (必須大寫),NETADMIN(用戶組)定義可使用權限,ip(必須是完整路徑)

tom ALL=(ALL) NETADMIN 

解釋:用戶所有終端=所有用戶 執行NETADMIN自定義組授權命令

授權限定機制:

Cmnd_Alias NETADMIN= /usr/sbin/ip, !/usr/bin/passwd [a-z|A-Z]*, !/usr/bin/passwd root

解釋:
*   /usr/sbin/ip 可訪執行命令。
*   !/usr/bin/passwd[a-z|A-Z]*:不允許passwd命令后帶有字母的命令。
*   /usr/bin/passwd root:不運行執行修改root密碼。

2、常用驗證驗證授權

2-1:tom ALL=(ALL) NOPASSWD: NETADMIN

解釋:用戶 所有終端=(所有用戶)無需輸入密碼(自定義組)

2-2:
tom ALL=(ALL) PASSWD: NETADMIN

解釋:用戶 所有終端=(所有用戶)需輸入密碼(自定義組)
 

用戶權限設定
添加用戶
[[email protected] ~]# useradd AAA
[[email protected] ~]# passwd AAA

編輯配置文件:
[[email protected] ~]# vim /etc/sudoers
root    ALL=(ALL)       ALL
AAA     ALL=(ALL)       /usr/sbin/useradd, /sbin/userdel ,/usr/bin/passwd 添加創建、刪除、修改密碼。

[[email protected] ~]# su - AAA 切換用戶

[[email protected] ~]$ sudo useradd BBB 添加用戶
[[email protected] ~]$ sudo passwd BBB 修改密碼
更改用戶 BBB 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。

[[email protected] ~]$ sudo userdel -r BBB   刪除用戶

[[email protected] ~]$ sudo ip  使用沒有添加的權限便會提示錯誤。
對不起,用戶 AAA 無權以 root 的身份在 MiWiFi-R3-srv 上執行 /sbin/ip。

用戶組權限設定
1、首先設定AAA 權限只有倆個
AAA     ALL=(ALL)       /usr/sbin/useradd, /usr/bin/passwd

2、重新登陸AAA用戶名,添加用戶BBB
[[email protected] ~]$ sudo useradd BBB

[[email protected] ~]$ sudo passwd BBB
更改用戶 BBB 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。

沒有權限執行以下權限。
[[email protected] ~]$ sudo userdel -r BBB
對不起,用戶 AAA 無權以 root 的身份在 MiWiFi-R3-srv 上執行 /sbin/userdel -r BBB。

3、將AAA 加入whell組(whell默認可執行所有命令)
切換root用戶 將AAA加入組

[[email protected] ~]$ su - root
密碼:
上一次登錄:一 9月 24 02:59:54 EDT 2018pts/0 上

[[email protected] ~]# usermod -a -G wheel AAA
[[email protected] ~]# exit
登出

4、切換至whell組,然后執行刪除BBB用戶 

[[email protected] ~]$ newgrp wheel
[[email protected] ~]$ sudo userdel -r BBB

將組內的用戶刪除

gpasswd -d AAA whell
禁止權限設定
編輯配置文件在命令路徑前面加入! 不能使用
[[email protected] ~]# visudo 
AAA     ALL=(ALL)       /usr/sbin/useradd, !/usr/bin/passwd

[[email protected] ~]$ sudo passwd BBB
對不起,用戶 AAA 無權以 root 的身份在 MiWiFi-R3-srv 上執行 /bin/passwd BBB。
按組添加用戶權限

1、編輯配置文件

[[email protected] ~]# visudo

User_Alias ABUSER=AAA,BBB                     設置自定義組                            
Cmnd_Alias AUSER=/usr/sbin/useradd, /usr/bin/passwd        設定組權限
Cmnd_Alias BUSER=/usr/sbin/userdel           設定組權限

AAA ALL=(ALL) AUSER    賦予用戶組權限
BBB ALL=(ALL) BUSER    賦予用戶組權限

ABUSER  ALL=(ALL) NOPASSWD: AUSER  設定識別權限 

2、添加用戶并修改密碼:

[[email protected] ~]$  sudo -k 清楚當前用戶的登陸驗證狀態
[[email protected] ~]$ sudo useradd CCC 建立用戶沒有提示輸入AAA的密碼

[[email protected] ~]$ sudo passwd CCC
更改用戶 CCC 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。

[[email protected] ~]$ su - BBB  刪除用戶命令時需要輸入BBB用戶密碼
密碼:

 

參考資料:馬哥筆記

原創文章,作者:N28_剛好遇到小熊貓,如若轉載,請注明出處:http://www.npownk.tw/124681

聯系我們

400-080-6560

在線咨詢

工作時間:周一至周五,9:30-18:30,節假日同時也值班

QR code
安徽十一选五分布走势