转载链接:https://blog.csdn.net/u011456940/article/details/57416526
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用.
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被×××者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
传输层协议:TCP,UDP,SCTP.传输层协议的每一种都会提供端口,端口是用来标识进程地址的,但是端口却是由内核上的传输层协议所提供,所以每一个进程所启动时,要想通过某地址与其他主机通信,他要向内核注册申请使用某端口,而且一旦注册使用以后他是独占使用的
进程间通信有多种方式,在同一主机上的进程间通信可以借助内核间的很多机制实现,如IPC机制,message queue(消息队列),shm(共享内存),semerphor(旗语)等等…
不同主机上的进程间通信用的最多的是早些时候tcp/ip协议中所研发的一种机制叫做基于socket的通信机制,socket是成对出现的;即ip+port.ip+port只是用来描述标识单个主机上的进程地址的,如果要真正产生通信他应该是两个主机上发进程间进行通讯,即客户端有ip+port服务端有ip+port(cip:port<–>sip:port)
两个主机间的进程通讯的时候发起的一方应该知道接收方的地址,而这个地址包含了ip和端口,那如何能得知地址呢.所以为了解决这样的问题,互联网名称地址解析机构就首先做出了假定(套接字通信在基于CS模式时服务器端要处于监听模式:所谓监听模式就表示打开ip和端口随时等待客户端请求),这就叫做监听模式;
监听模式:LISTEN机制
监听模式指的是无论有没有人访问他都要打开自己的进程,可以让他监听在某个ip+port上
SSL:secure sockets layer(安全的套接字层)
如果http协议调用了ssl协议,那么他就变成了https(http –>ssl–>https)
网络通信安全的目标是什么:
保密性:confidentiality
完整性:integrity 通信双方在实现通信时整个通信报文不能产生信息丢失,一旦信息丢失就基于其他机制让接收方知道.
可用性:availability 通信双方所产生的信息应当对授权实体可用,即加了密的数据对方最起码能够解密
网络安全通讯的×××类型:
威胁保密性的×××:窃听,通信量分析
威胁完整性的×××:更改,伪装,重放,否认
威胁可用性×××:拒绝服务(DoS)
为了实现安全目标并防范×××,就需要提供一些机制来完成抵御×××保证安全,这需要从很多层面来保证.这些层面主要是从两个层面来说;技术和服务
解决方案:
技术:加密和解密,服务:(用来抵御×××而提供的服务,也即使为了实现上述安全目标而特地设计的安全服务)
加密和解密:(技术)
传统加密方法:替代加密方法,置换加密方法
现代加密方法:现代块加密方法
服务:
认证机制
访问控制机制
在互联网通讯时通讯方如何与被通讯方安全交换密钥:密钥算法和协议就是为了解决密钥交换的服务
加密和解密以及实现服务功能当中所用到的密钥算法和协议:常见的有四大类;
对称加密:
常见的加密方式有:DES,3DES,AES,Blowfish,Twofish,TDEA,RC6,CAST5
特性:
加密和解密使用同一个密钥
将原始数据分割成为固定大小的块,逐个进行加密
缺陷:
密钥过多
密钥分发困难
公钥加密:密钥成对存在,分为公钥和与之配对的私钥.
公钥:从私钥中提取产生;可公开给所有人;pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
特点:
用公钥加密的数据只能使用与之配对的私钥解密;反之亦然
用途:
数字签名:主要作用在于让接收方确认发送方的身份
密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;以实现密钥交换
加密和发送过程:假如说A要和B进行通信,第一步A先生成一段数据,为了保证这段数据安全无误保密的送达给B,A要先用加密算法 计算出这段数据的特征码.
第二步A会用自己的私钥加密这段特征码并将结果附加在数据后面.
第三步A生成一个临时的对称密钥,并使用这个对称密钥加密整段数据(特征码+数据).
第四步A会获取到B的公钥,并用B的公钥加密刚才的临时性对称密钥,并附加在整段数据的后面,然后整体发送给B.
解密过程:第一步B先用自己的私钥去解密A发送过来的整段数据后面的对称密钥.
第二步用对称密钥解密A使用临时对称密钥加密的整段内容(数据+特征码).
第三步用A的公钥解密特征吗,如果能解密的话A的身份得到了验证.
第四步B用同样的对称加密算法去计算数据的特征码并与解密出来的特征码记性比较,
如果两个特征码相同,数据完整性得到了验证.所以这种手段保证了保密性和完整性同时也完成了身份验证.
数据加密
公钥加密当中常用的算法:RSA,DSA,ELGamal
DSS:数字签名标准
DSA:仅能实现签名,而不能实现加解密
RSA:既能签名,又能实现加解密
1
2
3
4
5
6
单向加密:提取数据指纹,只能加密,不能解密.
特性:定长输出,雪崩效应
功能:主要实现完整性验证
算法:
md5:消息摘要算法,5是版本号,128位定长输出
sha1:安全的哈希算法,1是版本号,160位定长输出
sha224,sha256,sha384,sha512
密钥交换:互联网密钥交换;常见的实现方法有两种;
公钥加密
DH算法
PKI:公钥基础设施:由四个组件组成
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:CB
证书
x509v3:定义了证书的结构以及认证协议标准
定义的证书应该有以下内容组成
证书版本号
序列号
签名算法ID
发行者的名称
有效期限
主体名称
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者的签名
SSL:安全套接字层:由网景公司1994年发布,他的1.0版本从来没有公开过,2.0版本在1995年发布,因为存在数个安全漏洞被3.0版本取代,而3.0在1991年发布,3.0版本被谷歌发现严重漏洞已经被禁用,目前处于临危状态,目前建议使用TLS1.2版本. TLS:传输层安全:由IETF1999年发布,2006年发布1.1版本
TLS采用了分层设计: 最底层:基础算法原语的实现 第二层:各种算法的实现 第三层:组合算法实现的半成品 第四层:用各种组件拼装而成的各种成品密码学协议软件
开源协议的实现:OpenSSL
linux系统实现上述的方案有两种:OpenSSL(ssl协议和加密解密库的实现),GPG(pgp协议的实现)
OpenSSL由三部分组成:
libencrypto:用于实现加密和解密的库
libssl:用于实现ssl通信安全机制的库
openssl多用途命令行工具
SSL会话主要三步:
客户端向服务器端索要并验正证书;
双方协商生成”会话密钥”
====此前两步被成为握手阶段====
双方采用”会话密钥”进行加密通信
在这三步操作当中,以HTTPD为例首先是客户端通过浏览器向服务器发送加密通信请求,这个加密通信请求就成为clienthello 的过程;也就是SSL握手过程的第一阶段;
SSL握手过程
第一阶段clienthello:在clienthello过程,客户端主要完成以下几个操作;
向服务器发送自己支持的协议版本,比如TLS1.2
客户端生成的一个随机数,稍后用于生成一个会话密钥
发送自己支持的各种加密算法,比如AES(对称加密算法),RSA(公钥加密算法)…
发送自己支持的压缩算法
第二阶段:serverhello:服务器端在收到客户端的请求之后要向客户端发出回应;回应主要有以下内容;
确认使用的加密通信协议版本,比如TLS1.2
服务器端生成一个随机数,稍后用于生成”会话密钥”
确认使用的加密方法
服务器证书
第三阶段:客户端收到服务器端的serverhello以后给出的回应;
验证服务器证书;在确认无误后取出其公钥;(发证机构,证书签名,证书完整性,证书持有者,证书有效期,吊销列表)
发送以下信息给服务器端
一个随机数:用于服务器公钥加密
编码变更通知:表示通信双方都用商定好的密钥进行通信;即随后的信息都将用双方商定好的加密方法和密钥发送.
客户端握手结束通知:
第四阶段:收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有用到的”会话密钥”;向客户端发送如下信息;
编码变更通知:表示通信双方都用商定好的密钥进行通信;即随后的信息都将用双方商定好的加密方法和密钥发送.
服务器端握手结束通知
OpenSSL的应用
它的组件:libcrypto,libssl主要由开发者使用,openssl;多用途命令行工具.
openssl:众多子命令,分为三类:标准命令,消息摘要(dgst子命令),加密命令(enc子命令)
标准命令:
消息摘要(dgst子命令)
加密命令(enc子命令)
对称加密:
工具:openssl enc 支持的算法:3des,aes,blowfish..
enc命令
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
单向加密:
工具:opssl dgst dgst,md5sum,sha1sum,…
dgst命令:计算文件特征码
~]# openssl dgst -md5 /path/to/somefile
生成用户密码的命令:
工具:passwd,openssl passwd
~]# openssl passwd -1 -salt SALT
生成随机数:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM
公钥加密:三种功能;
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl,gpg
数字签名:
算法:RSA,DSA,ELGamal
工具:openssl tsasutl,gpg
密钥解密:
算法:DH
如何生成密钥:
生成私钥:~]# (umask 077; openssl genrsa -out /path/to/private_key_file num_bits)
提出公钥:~]# openssl rsa -in /path/from/frivate_key_file -pubout
linux系统上的随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;
伪随机数不安全
熵池中随机数的来源:
硬盘io中断时间间隔;
键盘io中断时间间隔;
CA:公共信任的CA,私有CA
建立私有CA: openssl,OpenCA
openssl命令:
配置文件:/etc/pki/tls/openssl.cnf
构建私有CA:
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
步骤:
1)生成私钥:
~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自签证书:
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时使用
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签证操作,将直接生成签署过的证书
-days:证书的有效时长,单位是day
3)为CA提供所需的目录及文件
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书
4) 查看证书
~]# openssl x509 -text -in server.crt
步骤:(以httpd为例)
1)用到证书的主机生成证书签署请求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
3)将请求通过可靠方式发送给CA主机
~]# scp
4)在CA主机上签署证书
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看证书中的信息:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊销证书:
步骤:
1)客户端获取要吊销的证书的serial(序列号)(在使用证书的主机上执行)
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
2)CA端主机吊销证书
先根据客户端提交的serial和subject信息,对比其本机数据库index.txt中存储的是否一致
吊销:
# openssl ca -revoke /etc/pki/CA /newcerts/SERIAL.pem
其中的SERIAL要换成证书真正的序列号;
3)生成吊销证书的吊销编号(第一次吊销证书时执行)
#echo 01 > /etc/pki/CA/crlnumber
4)更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /path/from/crl_file.crl -noout -text
过程示例:
构建私有CA
1)主机生成私钥:
~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自签证书:
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时使用
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签证操作,将直接生成签署过的证书
-days:证书的有效时长,单位是day
3)为CA提供所需的目录及文件
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
要用到证书进行安全通信的服务器,需要向CA请求签署证书(以httpd为例)
1)用到证书的主机生成证书签署请求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成证书签署请求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3655
3)将请求通过可靠方式发送给CA主机
~]# scp
4)在CA主机上签署证书
~]# openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3655
查看证书中的信息:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
在CA主机签署证书
将证书发送给申请方,放在其对应的服务目录中
SSH
安全的shell协议,代替传统的不安全的远程登录,默认监听在tcp协议的22号端口,SSH协议的开源实现是基于OpenSSH这个软件,提供SSH服务的另外一个软件是dropbear,这是一个第三方提供的软件,没有rpm包,需要手动编译安装.
openssh
客户端:ssh,scp,sftp 服务端:sshd
ssh命令
格式: ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
X: 支持x11转发
-Y:支持信任x11转发
ForwardX11Trusted yes
-t: 强制伪tty分配
ssh -t remoteserver1 ssh remoteserver2
]# ssh -t 10.1.249.190 ssh 10.1.249.191
注意:当初次使用ssh命令连接至一个目标主机时,系统会把这个目标主机的信息保存至当前本机的连接用户的家目录的known_hosts文件中,
这个文件的作用是,当目标主机的信息发生了变化的时候会拒绝连接,比如伪装ip ,登录的时候会发出警告提示,()此次连接的IP和之前连接的ip不是同一台主机).
此种机制的实现是基于密钥对儿实现的,如果删除此文件即可连接.
ssh基于key的认证方式
(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ”] [-f “/root/.ssh/id_rsa”]
ssh-keygen –t rsa –P ‘’ -f “/root/.ssh/id_rsa”
ssh-keygen
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试
(4) 转化为openssh兼容格式(适合SecureCRT, Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令: #ssh-keygen –p
注意:如果在设定密钥密码的时候为密钥设定了密码的话,每次登录远程主机都要输入密钥密码.可以使用验证代理的方式解决此问题,如下;
验证代理( authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供
否则运行ssh-agent bash
钥匙通过命令添加给代理
ssh-add
SSH端口转发
什么是SSH端口转发? SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。 但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发 ,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道” ( tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通 道来进行传输而得名。例如, Telnet, SMTP, LDAP 这些 TCP 应用均 能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此 同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯 SSH 端口转发能够提供两大功能: • 加密 SSH Client 端至 SSH Server 端之间的通讯数据 • 突破防火墙的限制完成一些之前无法建立的 TCP 连接。
本地转发:
-L localport:host:hostport sshserver
ssh –L 9527:server1:23 -N server2
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到server2的ssh服务,再解密被转发到server1:23
data<–>localhost:9527<–>localhost:XXXXX<–>server2:22<–>server2:YYYYY<–>server1:23
选项:
-f 后台启用
-N 不开远程shell
-g 启用网关功能
远程转发:
-R sshserverport:host:hostport sshserver
ssh –R 9527:server1:23 –N server2
让server2侦听9527端口的访问,如有访问,就加密后转发请求到本机ssh服务,再由本机解密后转发到serve1:23
Data<–>server2:9527<–>server2:22<–>localhost:XXXXX<–>localhost:YYYYY<–>server1:23
动态端口转发
当用firefox访问internet时,本机的1080端口做为代理服务器, firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
在本机firefox设置代理proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
ssh服务器
服务器端:
sshd, 配置文件: /etc/ssh/sshdconfig
常用参数:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 0
UseDNS yes
限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroup
ssh服务的最佳实践
1、不要使用默认端口
2、禁止使用protocol version 1
3、限制可登录用户
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
6、仅监听特定的IP地址
7、基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
8、使用基于密钥的认证
9、禁止使用空密码
10、禁止root用户直接登录
11、限制ssh的访问频度和并发在线数
12、做好日志,经常分析
示例:设置可登录用户白名单;编辑配置文件]# vim /etc/ssh/sshd_config.添加白名单信息;
用户登录信息获取:
/var/log/wtmp:用户成功登录的日志信息
]# last
/var/log/btmp:用户登录尝试失败的日志信息
]# lastb
lastlog:每个用户最近一次成功登录的信息
scp命令
scp [options] SRC… DEST/
两种方式:
scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath
常用选项:
-C: 压缩数据流
-r: 递归复制
-p: 保持原文件的属性信息
-q: 静默模式
-P PORT: 指明remote host的监听的端口
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
rsync –av /etc server1:/tmp 复制目录和目录下文件
rsync –av /etc/ server1:/tmp 只复制目录下文件
比scp更快,只复制不同的文件
选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 把符号链接文件做为符号文件进行复制
-L 将软链接文件指向文件复制
-a 存档模式,相当于 –rlptgoD,但不保留ACL( -A)和SELinux属性(-X)
sftp命令:基于ssh的ftp协议
交互式文件传输工具
用法能和传统的ftp工具相似
利用ssh服务实现安全的文件上传和下载
使用ls cd mkdir rmdir pwd get put等指令,可用?获取帮助信息。
sftp [user@]host
sftp> help
AIDE
当一个者进入了你的系统并且种植了×××,通常会想 办法来隐蔽这个×××(除了×××自身的一些隐蔽特性外, 他会尽量给你检查系统的过程设置障碍),通常者会 修改一些文件,比如管理员通常用ps -aux来查看系统进 程,那么者很可能用自己经过修改的ps程序来替换掉 你系统上的ps程序,以使用ps命令查不到正在运行的××× 程序。如果者发现管理员正在运行crontab作业,也 有可能替换掉crontab程序等等。所以由此可以看出对于 系统文件或是关键文件的检查是很必要的。目前就系统完 整性检查的工具用的比较多的有两款: Tripwire和AIDE ,前者是一款商业软件,后者是一款免费的但功能也很强 大的工具。
• AIDE(Adevanced Intrusion Detection Environment) • 高级检测环境)是一个检测工具,主要用途是检查文件的 完整性,审计计算机上的那些文件被更改过了。 • AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配 置文件。 AIDE数据库能够保存文件的各种属性,包括:权限 (permission)、索引节点序号(inode number)、所属用户(user)、 所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间 (ctime)、最后访问时间(atime)、增加的大小以及连接数。 AIDE 还能够使用下列算法: sha1、 md5、 rmd160、 tiger,以密文形式 建立每个文件的校验码或散列号. • 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件 、邮件、 /proc文件系统、用户起始目录以及临时目录.
如何使用AIDE:
安装AIDE
yum install aide
修改AIDE配置文件
vim /etc/aide.conf (指定对哪些文件进行检测)
/test/chameleon R
/bin/ps R+a
/usr/bin/crontab R+a
/etc PERMS
!/etc/mtab #“ !”表示忽略这个文件的检查
R=p+i+n+u+g+s+m+c+md5 权限+索引节点+链接数+用
户+组+大小+最后一次修改时间+创建时间+md5校验值
NORMAL = R+rmd60+sha256
初始化默认的AIDE的库:
/usr/local/bin/aide –init
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
检测:
/usr/local/bin/aide –check
更新数据库
aide –up
切换身份
su 切换身份:su –l username –c ‘command’
sudo 命令
- sudo能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo可以提供日志,记录每个用户使用sudo操作
- sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
4.sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
5、通过visudo命令编辑配置文件,具有语法检查功能
配置文件: /etc/sudoers, /etc/sudoers.d/
时间戳文件: /var/db/sudo
日志文件: /var/log/secure
配置文件支持使用通配符glob:
? :前面的字符或词可出现一次或无- :前面的字符或词出现零次或多次
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]
配置文件规则有两类;
1、别名定义:不是必须的
2、授权规则:必须的
授权规则格式:
用户 登入主机=(代表用户) 命令
示例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命
别名:
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo别名和示例
别名有四种类型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias
别名格式: A-Z
别名定义:
Alias_Type NAME = item1, item2, item3 : NAME =item4, item5
示例1:
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
示例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
示例3
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=( root) NETCMD
示例4
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,
/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z],
!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,
PASSWD:/usr/sbin/userd
示例5
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
示例6
wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin/,!/usr/sbin/useradd
示例7
wang ALL=(ALL) /bin/cat /var/log/message
命令语法选项:
- :前面的字符或词出现零次或多次
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳,下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
如 -p ”password on %h for user %p”