第十二周作业
`iptables 防火墙
iptbales是通过调用内核空间的netfiter来实现防火墙功能,在第三代版本后衍生出了五个钩子(hook)来进行约束访问控制。
chain 与 hook
五条钩子分别对应五条链(chain),而链则是iptables 命令约束的参数,链的名字必须大写
钩子【hiook】 | 链【chain】 | 功能: |
preouting | PREOUTING | 目标地址转化(DNAT) |
inout | INOUT | 处理输入数据包 |
forward | FORWARD | 处理数据包转发 |
output | OUTPUT | 处理输出数据包 |
postrouting | POSTROUTING | 源地址转换(SNAT) |
每条链所能实现的功能:
- raw:关闭nat表上启用的连接追踪机制;
- mangle:拆解报文,做出修改并重新封装起来;
- 用于修改源IP或目标IP,也可修改端口;
- filter:过滤,防火墙。
PREOUTING | INOUT | FORWARD | OUTPUT | POSTROUTING | |
raw | √ | √ | |||
mangle | √ | √ | √ | √ | √ |
nat | √ | √ | √ | ||
filter | √ | √ | √ |
链【chain】的优先级:图中蓝色文件至左而右标示
报文流向:
- 流入本机: PREROUTING–> INPUT
- 流出本机:OUTPUT –> POSTROUTING
- 转发:PREROUT –> FORWARD –> POSTROUING
路由器功能条件判断:
- 报文进入本通过网卡进入本机后;判断目标是否本机,如果不是则转发
- 报文离开本机前;判断经由哪个接口送往下一跳。
规则:
组成部分:根据规则匹配条件来尝试匹配报文,一旦匹配成功就有规则定义的处理动作做出处理;
匹配条件:
内建基本匹配条件:
扩展模块匹配条件;
处理动作:
内建基本处理动作
扩展处理动作;
自定义链处理机制;
iptbales 的链:内置链和自定义链
- 内置链:对应hook function
- 自定义链:用于内置链的扩展和补充,可实现更灵活的规则管理机制(需要被内置链调用)
添加规则时的注意:
- 要实现那哪种功能:判断添加到哪个表上。
- 报文流经的路径:判断添加到哪个链上,请求和响应方向是相仿。
链–规则次序,几位检查的次序,因此隐含一定的应用法则;
- 同类规则,匹配范围小的放上面;
- 不同的规则(访问不同的应用),匹配到报文频率较大的放到上边。
- 将那些可由一条规则藐视的多个规则合并起来;
- 设置默认策略。
删除自定义链要注意:
- 自定义链的应用引用要为0;
- 自定义链不可以有规则;
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标志在前,标示相反的意思。
允许连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/bin/bash # # 允许所有入站 # 允许所有出站 [root@node3 ~]# iptables -I INPUT -j ACCEPT [root@node3 ~]# iptables -I OUTPUT -j ACCEPT # 允许回环地址(本机访问自身端口) [root@node3 ~]# iptables -A INPUT -i lo -j ACCEPT # 允许指定IP.50访问本机.127的22端口放行 [root@node3 ~]# iptables -A INPUT -s 192.168.199.50/24 -d 192.168.199.127/24 -p tcp --dport 22 -j ACCEPT # 允许本机(注意源地址是本机)22好端口响应给.50的主机信息放行 [root@node3 ~]# 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端口 [root@node3 ~]# 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之间的所有端口放行 [root@node3 ~]# iptables -A INPUT -p tcp --dport 80:100 -j ACCEPT |
禁止连接
1 2 3 4 5 6 7 8 9 10 11 |
禁止所有入站 [root@node3 ~]# iptables -A INPUT -j REJECT 对方能接受到拒绝信息 [root@node3 ~]# iptables -A INPUT -j DROP 对方接收到不到拒绝信息,可以起到隐藏IP的功效 禁止100.0的IP段访问本机 [root@node3 ~]# iptables -A INPUT -s 192.168.100.0/24 -d 192.168.199.127 -j DROP 禁用所有转发 [root@node3 ~]# iptables -A FORWARD -j DROP |
查看命令
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@node3 ~]# iptables -vnL # 删除入站规则第一条 [root@node3 ~]# iptables -D INPUT 1 [root@node3 ~]# iptables -D OUTPUT 1 # 将指定规则的计数器归零: [root@localhost ~]# iptables -Z INPUT 2 [root@localhost ~]# iptables -Z OUTPUT 2 # 清空所有规则,误删后重新启动服务即可恢复 [root@localhost ~]# iptables -F |
在默认表filter表中添加自定义链:
1 2 3 4 5 6 7 8 9 10 11 |
添加自定义链: [root@localhost ~]# iptables -t filter -N root 引用自定义链 [root@node3 ~]# iptables -I INPUT -j root 删除自定义链 数字1是root位于的数字 [root@node3 ~]# iptables -D INPUT 1 删除自定义链:[确定自定义连没有被引用,才可删除] [root@localhost ~]# 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个;
- –source-ports,–sports port[,port | ,port:port] … :指定多个源端口;
- –destination-ports,–dports port[,port | port:port]… :指定多个目标端口;
允许访问主机192.168.124.4的 80,139,445,3306号端口
1 |
[root@MiWiFi-R3-srv ~]# iptables -I INPUT -d 192.168.124.4 -p tcp -m multiport --dports 80,139,445,3306 -j ACCEPT |
允许访问主机20-60端口
1 |
[root@MiWiFi-R3-srv ~]# iptables -I INPUT -d 192.168.124.4 -p tcp -m multiport --dports 20:60 -j ACCEPT |
iprange: 用来指定连续IP段的条件匹配。
- –src-range from [-to] 源地址
- –dst-range from [-to] 目标地址
允许192.168.124.1-50 IP段访问主机的udp 137端口
1 |
[root@MiWiFi-R3-srv ~]# 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端口
1 |
[root@MiWiFi-R3-srv ~]# 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: 时间限制
- –timestart hh:mm[:ss] 启示时间范围
- –timestop hh:mm[:ss] 结束时间范围(如果不指定则表示循环)
- –weekdays day[,day…] 周几
- -monthdays day[,day…] 每个月的几号
- –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明允许日期
- –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]] 直接指明禁止日期
CentOS6 默认是内核时间,CentOS 7 需呀–kerneltz 指明内核时区。
允许2018年2月1日-2018年8月31号 早上8点到下午5点访问
1 |
[root@MiWiFi-R3-srv ~]# 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点放行
1 |
[root@MiWiFi-R3-srv ~]# 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
- –algo{bm|kmp}算法
- –string pattern
- –hex-string pattern
- –from offset
- –to offset
创建一个web测试页面 内容是hello world,匹配到hello 拒绝访问,
1 2 3 4 5 6 |
[root@MiWiFi-R3-srv html]# cd /var/www/html [root@MiWiFi-R3-srv html]# vim index.html <h1> hello world </h1> [root@MiWiFi-R3-srv html]# iptables -R OUTPUT 1 -m string --algo kmp --string "hello" -j REJECT |
connlimit 限制但客户端最多可并发访问数量
- –connlimit-upto n 并发数量小于N上限
- –commlimit-above n 并发数量大于N是拒绝的
取决于默认规则是什么,默认规则是白名单,默认是拒绝的写成小于才允许,大于则不符合条件了,就被拒绝掉了,
默认规则是黑名单那就意味着默认是允许的,那就写成大于拒绝,那么小于的时候默认规则是允许的。
1 |
[root@MiWiFi-R3-srv conf.d]# iptables -R INPUT 1 -s 192.168.124.4 -d 192.168.124.3 -m connlimit --connlimit-upto 2 -j ACCEPT |
limit 数率限制 令牌桶算法;
- –limit rate [/second |/minute | /hour |/day] 数率
- –limit-burst number 令牌桶可以收集多少个令牌
1 2 3 |
[root@MiWiFi-R3-srv 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 [root@MiWiFi-R3-srv conf.d]# iptables -R OUTPUT 1 -s 192.168.124.3 -p icmp --icmp-type 0 -j ACCEPT |
state 是conntrack的一个子集用来追踪查看报文当前的连接状态
-0state state
- NEW:新的连接请求
- ESTABLISHED:已建立的连接
- INVALID:无法识别的连接
- RELATED:相关的连接,当前连接是一个新请求,但附属于某个已经存在的连接;
- UNTRACKED:未追踪的连接。
state扩展:内核模块装载
- nf_conntrack
- nf_conntrack_ipv4
手动装载:
- nf_conntrack_ftp
1 |
~]# modprobe nf_conntrack_ftp |
state的连接记录:
- 已经追中到的连接/proc/net/nf_conntrack
- 调整可记录的连接数量最大值:/proc/sys/net/nf_conntrack_max
- 超长时长:/proc/sys/net/netfilter/*timeout*
1 2 3 4 5 |
允许所有主机里连接访问192.168.124.3的22,80,139,445,3306端口 [root@MiWiFi-R3-srv ~]# iptables -I INPUT -d 192.168.124.3 -p tcp -m multiport --dports 22,80,139,445,3306 -m state --state ESTABLISHED -j ACCEPT 放行所有状态为以建立的连接 [root@MiWiFi-R3-srv ~]# 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:
- –log-level 级别
- –log-prefix 标示
默认日志保存为/var/log/messages
1 |
[root@localhost ~]# iptables -I OUTPUT -s 192.168.199.124 -p icmp --icmp-type 0 -j REJECT --reject-with icmp-host-unreachable |
LOG:
1 2 |
[root@localhost ~]# iptables -I OUTPUT -s 192.168.199.124 -p icmp --icmp-type 0 -j LOG [root@localhost ~]# 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:仅分析成规则集,但不提交
1 2 3 |
[root@node3 ~]# iptables-save > /tmp/a [root@node3 ~]# 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端口修改等应用
实现模式:
- 网关策略
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台测试主机设置分别设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
1、 路由主机上添加限制转发(默认规则),内网主机A ping 外网主机C则不通。 ~]# iptables -A FORWARD -j REJECT 2、 放行可访问80端口进行转发。 转发出去 [root@MiWiFi-R3-srv ~]# iptables -I FORWARD -s 192.168.227.0/24 -d 192.168.124.6 -p tcp --dport 80 -j ACCEPT 返回响应内容 [root@MiWiFi-R3-srv ~]# iptables -I FORWARD 2 -d 192.168.227.0/24 -p tcp --sport 80 -j ACCEPT 内网主机A测试便可访问外网C的httpd站点 [root@MiWiFi-R3-srv ~]# curl http://192.168.124.6 <h1> hello world</h1> 3、使用 state 优化设置 清空规则保留默认规则 放行已经链接ESTABISHED的访问 [root@MiWiFi-R3-srv ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT 允许次ip段建立新连接80 [root@MiWiFi-R3-srv ~]# iptables -I FORWARD 2 -s 192.168.227.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT |
放行响应报文的时候尽量使用RELATED 以便保持连接
NAT表-SNAT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
使用内网主机A ping 外网主机C ,外网主机抓包查看ip是否修改 内网主机A ping 192.168.124.6 路由主机B [root@MiWiFi-R3-srv ~]# 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 [root@localhost ~]# 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
1、主机A是内网服务器 ~]# yum -y install httpd 2、主机B是负载均衡服务器 将源目标地址B修改唯内网主机A [root@MiWiFi-R3-srv ~]# iptables -t nat -I PREROUTING -d 192.168.124.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.227.131 3、主机C是外网客户端 [root@localhost ~]# curl http://192.168.124.5 4、主机B 抓包内网网卡,显示已经目标地址被修改 [root@MiWiFi-R3-srv ~]# 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 抓包外网网卡,显示客户端访问地址和返回地址依然是,客户端识别的地址。 [root@MiWiFi-R3-srv ~]# 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
解释:用户 所有终端=(所有用户)需输入密码(自定义组)
用户权限设定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
添加用户 [root@MiWiFi-R3-srv ~]# useradd AAA [root@MiWiFi-R3-srv ~]# passwd AAA 编辑配置文件: [root@MiWiFi-R3-srv ~]# vim /etc/sudoers root ALL=(ALL) ALL AAA ALL=(ALL) /usr/sbin/useradd, /sbin/userdel ,/usr/bin/passwd 添加创建、删除、修改密码。 [root@MiWiFi-R3-srv ~]# su - AAA 切换用户 [AAA@MiWiFi-R3-srv ~]$ sudo useradd BBB 添加用户 [AAA@MiWiFi-R3-srv ~]$ sudo passwd BBB 修改密码 更改用户 BBB 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [AAA@MiWiFi-R3-srv ~]$ sudo userdel -r BBB 删除用户 [AAA@MiWiFi-R3-srv ~]$ sudo ip 使用没有添加的权限便会提示错误。 对不起,用户 AAA 无权以 root 的身份在 MiWiFi-R3-srv 上执行 /sbin/ip。 |
用户组权限设定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
1、首先设定AAA 权限只有俩个 AAA ALL=(ALL) /usr/sbin/useradd, /usr/bin/passwd 2、重新登陆AAA用户名,添加用户BBB [AAA@MiWiFi-R3-srv ~]$ sudo useradd BBB [AAA@MiWiFi-R3-srv ~]$ sudo passwd BBB 更改用户 BBB 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 没有权限执行以下权限。 [AAA@MiWiFi-R3-srv ~]$ sudo userdel -r BBB 对不起,用户 AAA 无权以 root 的身份在 MiWiFi-R3-srv 上执行 /sbin/userdel -r BBB。 3、将AAA 加入whell组(whell默认可执行所有命令) 切换root用户 将AAA加入组 [AAA@MiWiFi-R3-srv ~]$ su - root 密码: 上一次登录:一 9月 24 02:59:54 EDT 2018pts/0 上 [root@MiWiFi-R3-srv ~]# usermod -a -G wheel AAA [root@MiWiFi-R3-srv ~]# exit 登出 4、切换至whell组,然后执行删除BBB用户 [AAA@MiWiFi-R3-srv ~]$ newgrp wheel [AAA@MiWiFi-R3-srv ~]$ sudo userdel -r BBB 将组内的用户删除 gpasswd -d AAA whell |
禁止权限设定
1 2 3 4 5 6 |
编辑配置文件在命令路径前面加入! 不能使用 [root@MiWiFi-R3-srv ~]# visudo AAA ALL=(ALL) /usr/sbin/useradd, !/usr/bin/passwd [AAA@MiWiFi-R3-srv ~]$ sudo passwd BBB 对不起,用户 AAA 无权以 root 的身份在 MiWiFi-R3-srv 上执行 /bin/passwd BBB。 |
按组添加用户权限
1、编辑配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@MiWiFi-R3-srv ~]# 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、添加用户并修改密码: [AAA@MiWiFi-R3-srv ~]$ sudo -k 清楚当前用户的登陆验证状态 [AAA@MiWiFi-R3-srv ~]$ sudo useradd CCC 建立用户没有提示输入AAA的密码 [AAA@MiWiFi-R3-srv ~]$ sudo passwd CCC 更改用户 CCC 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [AAA@MiWiFi-R3-srv ~]$ su - BBB 删除用户命令时需要输入BBB用户密码 密码: |
参考资料:马哥笔记
原创文章,作者:N28_刚好遇到小熊猫,如若转载,请注明出处:http://www.178linux.com/124681