安全

~安全***: STRIDE Spoofing 假冒 Tampering 篡改 Repudiation 否认 Information Disclosure 信息泄漏 Denial of Service 拒绝服务 Elevation of Privilege 提升权限

对称加密算法 ~对称加密:加密和解密使用同一个密钥 DES:Data Encryption Standard,56bits 3DES: AES:Advanced (128, 192, 256bits) Blowfish,Twofish IDEA,RC6,CAST5 ~特性: 1、加密、解密使用同一个密钥,效率高 2、将原始数据分割成固定大小的块,逐个进行加密 ~缺陷: 1、密钥过多 2、密钥分发 3、数据来源无法确认

非对称加密 ~基于一对公钥/密钥对 •用密钥对中的一个加密,另一个解密 ~实现加密: •接收者 生成公钥/密钥对:P和S 公开公钥P,保密密钥S •发送者 使用接收者的公钥来加密消息M 将P(M)发送给接收者 •接收者 使用密钥S来解密:M=S(P(M))

单向散列 ~将任意数据缩小成固定大小的“指纹” •任意长度输入 •固定长度输出 •若修改数据,指纹也会改变(“不会产生冲突”) •无法从指纹中重新生成数据(“单向”) ~功能:数据完整性 ~常见算法 md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512 ~常用工具 •md5sum | sha1sum [ --check ] file •openssl、gpg •rpm -V

应用程序:RPM ~文件完整性的两种实施方式 ~被安装的文件 •MD5单向散列 •rpm --verify package_name (or -V) ~发行的软件包文件 •GPG公钥签名 •rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat* •rpm --checksig pakage_file_name (or -K)

使用gpg实现对称加密 ~对称加密file文件 gpg -c file ls file.gpg ~在另一台主机上解密file gpg -o file -d file.gpg

使用gpg工具实现公钥加密 ~在hostB主机上用公钥加密,在hostA主机上解密 ~在hostA主机上生成公钥/私钥对 gpg --gen-key ~在hostA主机上查看公钥 gpg --list-keys ~在hostA主机上导出公钥到wang.pubkey gpg -a --export -o wang.pubkey ~从hostA主机上复制公钥文件到需加密的B主机上 scp wang.pubkey hostB:

使用gpg工具实现公钥加密 ~在需加密数据的hostB主机上生成公钥/私钥对 gpg --list-keys gpg --gen-key ~在hostB主机上导入公钥 gpg --import wang.pubkey gpg --list-keys ~用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg gpg -e -r wangxiaochun file file file.gpg

使用gpg工具实现公钥加密 ~复制加密文件到hostA主机 scp fstab.gpg hostA: ~在hostA主机解密文件 gpg -d file.gpg gpg -o file -d file.gpg ~删除公钥和私钥 gpg --delete-keys wangxiaochun gpg --delete-secret-keys wangxiaochun

OpenSSL OpenSSL:开源项目 三个组件: openssl:多用途的命令行工具,包openssl libcrypto:加密算法库,包openssl-libs libssl:加密模块应用库,实现了ssl及tls,包nss openssl命令: 两种运行模式:交互模式和批处理模式 openssl version:程序版本号 标准命令、消息摘要命令、加密命令 标准命令:enc, ca, req, ...

openssl命令 对称加密: 工具:openssl enc, gpg 算法:3des, aes, blowfish, twofish enc命令: 帮助:man enc 加密: openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher 解密: openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile openssl ?

openssl命令 单向加密: 工具:md5sum, sha1sum, sha224sum,sha256sum… openssl dgst dgst命令: 帮助:man dgst openssl dgst -md5 [-hex默认] /PATH/SOMEFILE openssl dgst -md5 testfile md5sum /PATH/TO/SOMEFILE MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制 CBC-MAC HMAC:使用md5或sha1算法

openssl命令 ~生成用户密码: passwd命令: 帮助:man sslpasswd openssl passwd -1 -salt SALT(最多8位) openssl passwd -1 –salt centos ~生成随机数: 帮助:man sslrand openssl rand -base64|-hex NUM NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

openssl命令 ~生成密钥对儿:man genrsa ~生成私钥 openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS (umask 077; openssl genrsa –out test.key –des 2048) openssl rsa -in test.key –out test2.key 将加密key解密 ~从私钥中提取出公钥 openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE openssl rsa –in test.key –pubout –out test.key.pub ~随机数生成器:伪随机数字 键盘和鼠标,块设备中断 /dev/random:仅从熵池返回随机数;随机数用尽,阻塞 /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

OpenSSL ~PKI:Public Key Infrastructure CA RA CRL 证书存取库 ~建立私有CA: OpenCA openssl ~证书申请及签署步骤: 1、生成申请请求 2、RA核验 3、CA签署 4、获取证书

创建CA和申请证书 ~创建私有CA: openssl的配置文件:/etc/pki/tls/openssl.cnf 三种策略:match匹配、optional可选、supplied提供 match:要求申请填写的信息跟CA设置信息必须一致 optional:可有可无,跟CA设置信息可不一致 supplied:必须填写这项申请信息, ~1、创建所需要的文件 touch /etc/pki/CA/index.txt 生成证书索引数据库文件 echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号 ~2、 CA自签证书 生成私钥 cd /etc/pki/CA/ (umask 066; openssl genrsa -out private/cakey.pem 2048)

创建CA和申请证书 ~生成自签名证书 openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem ~选项说明: -new:生成新证书签署请求 -x509:专用于CA生成自签证书 -key:生成请求时用到的私钥文件 -days n:证书的有效期限 -out /PATH/TO/SOMECERTFILE: 证书的保存路径

创建CA和申请证书 ~3、颁发证书 ~在需要使用证书的主机生成证书请求 给web服务器生成私钥 (umask 066; openssl genrsa –out /data/test.key 2048) 生成证书申请文件 openssl req -new -key /data/test.key -out /data/test.csr ~将证书请求文件传输给CA ~CA签署证书,并将证书颁发给请求者 openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100 注意:默认要求 国家,省,公司名称三项必须和CA一致

创建CA和证书管理 ~查看证书中的信息: openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates openssl ca -status SERIAL 查看指定编号的证书状态 ~4、吊销证书 ~在客户端获取要吊销的证书的serial openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject ~在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书: openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem ~指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行 echo 01 > /etc/pki/CA/crlnumber ~更新证书吊销列表 openssl ca -gencrl -out /etc/pki/CA/crl.pem ~查看crl文件: openssl crl -in /etc/pki/CA/crl.pem -noout -text

SSH ~ssh: secure shell, protocol, 22/tcp, 安全的远程登录 ~具体的软件实现: OpenSSH: ssh协议的开源实现,CentOS默认安装 dropbear:另一个开源实现 ~SSH协议版本 v1: 基于CRC-32做MAC,不安全;man-in-middle v2:双方主机协议选择安全的MAC方式 基于DH算法做密钥交换,基于RSA或DSA实现身份认证 ~两种方式的用户登录认证: 基于password 基于key

Openssh软件组成 ~OpenSSH介绍 ~相关包: openssh openssh-clients openssh-server ~工具: 基于C/S结构 Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, putty, securecrt, sshsecureshellclient Server: sshd

ssh客户端 ~客户端组件: ~ssh, 配置文件:/etc/ssh/ssh_config Host PATTERN StrictHostKeyChecking no 首次登录不显示检查提示 ~格式:ssh [user@]host [COMMAND] ssh [-l user] host [COMMAND] ~常见选项 -p port:远程服务器监听的端口 -b:指定连接的源IP -v:调试模式 -C:压缩方式 -X:支持x11转发 -t:强制伪tty分配 ssh -t remoteserver1 ssh -t remoteserver2 ssh remotes

基于key认证实现 ~基于密钥的认证: ~(1) 在客户端生成密钥对 ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"] ~(2) 把公钥文件传输至远程服务器对应用户的家目录 ssh-copy-id [-i [identity_file]] [user@]host ~(3) 测试 ~(4) 在SecureCRT或Xshell实现基于key验证 在SecureCRT工具—>创建公钥—>生成Identity.pub文件 转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys (5)重设私钥口令: ssh-keygen –p ~(6)验证代理(authentication agent)保密解密后的密钥 这样口令就只需要输入一次 在GNOME中,代理被自动提供给root用户 否则运行ssh-agent bash ~(7)钥匙通过命令添加给代理 ssh-add

scp命令 ~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)

轻量级自动化运维工具 ~pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具 项目:http://code.google.com/p/parallel-ssh/ ~pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 pdsh可以使用几种不同的远程shell服务,包括标准的“rsh”,Kerberos IV和ssh 项目: https://pdsh.googlecode.com/ ~mussh:Multihost SSH wrapper,是一个shell脚本,允许您使用一个命令在多个主机上通过ssh执行命令或脚本。 mussh可使用ssh-agent和RSA / DSA密钥,以减少输入密码 项目:http://www.sourceforge.net/projects/mussh ~说明:以上工具都包含在EPEL源中

pssh工具 ~选项如下: --version:查看版本 -h:主机文件列表,内容格式”[user@]host[:port]” -H:主机字符串,内容格式”[user@]host[:port]” -A:手动输入密码模式 -i:每个服务器内部处理信息输出 -l:登录使用的用户名 -p:并发的线程数【可选】 -o:输出的文件目录【可选】 -e:错误输出文件【可选】 -t:TIMEOUT 超时时间设置,0无限制【可选】 -O:SSH的选项 -P:打印出服务器返回信息 -v:详细模式

pssh示例 ~通过pssh批量关闭seLinux pssh -H root@192.168.1.10 -i ‘sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’ ~批量发送指令 pssh -H root@192.168.1.10 -i setenforce 0 pssh -H wang@192.168.1.10 -i hostname ~当不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令 pssh -H wang@192.168.1.10 -A -i hostname ~将标准错误和标准正确重定向都保存至/app目录下 pssh -H 192.168.1.10 -o /app -e /app -i “hostname

pscp.pssh命令 ~pscp.pssh功能是将本地文件批量复制到远程主机 ~pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote ~pscp-pssh选项 -v 显示复制过程 -r 递归复制目录 ~将本地curl.sh 复制到/app/目录 pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/ pscp.pssh -h host.txt /root/test/curl.sh /app/ ~将本地多个文件批量复制到/app/目录 pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/ ~将本地目录批量复制到/app/目录 pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

pslurp命令 ~pslurp功能是将远程主机的文件批量复制到本地 ~pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名) ~pslurp选项 -L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称 -r 递归复制目录 ~批量下载目标服务器的passwd文件至/app下,并更名为user pslurp -H 192.168.1.10 -L /app /etc/passwd user

SSH端口转发 ~本地转发: -L localport:remotehost:remotehostport sshserver ~选项: -f 后台启用 -N 不打开远程shell,处于等待状态 -g 启用网关功能 ~示例 ssh –L 9527:telnetsrv:23 -Nfg sshsrv telnet 127.0.0.1 9527 当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23 data <---> localhost:9527 <---> localhost:XXXXX <---> sshsrv:22 <-->sshsrv:YYYYY <--> telnetsrv:23

SSH端口转发 ~远程转发: -R sshserverport:remotehost:remotehostport sshserver ~示例: ssh –R 9527:telnetsrv:23 –Nf sshsrv 让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23 Data <-->sshsrv:9527 <--> sshsrv:22 <--> localhost:XXXXX <-->localhost:YYYYY <-->telnetsrv:23

SSH端口转发 ~动态端口转发: ~当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet ssh -D 1080 root@sshserver -fNg 在本机firefox设置代理socket proxy:127.0.0.1:1080 curl --socks5 127.0.0.1:1080 http://www.google.com

X 协议转发 ~所有图形化应用程序都是X客户程序 •能够通过tcp/ip连接远程X服务器 •数据没有加密机,但是它通过ssh连接隧道安全进行 ~ssh -X user@remotehost gedit remotehost主机上的gedit工具,将会显示在本机的X服务器上 传输的数据将通过ssh连接加密

chrony chrony 的优势: 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用 能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟 chrony官网:https://chrony.tuxfamily.org chrony官方文档:https://chrony.tuxfamily.org/documentation.html

chrony ~包:chrony ~两个主要程序:chronyd和chronyc chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿 chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可在一台不同的远程计算机上工作 ~服务unit 文件: /usr/lib/systemd/system/chronyd.service ~监听端口: 323/udp,123/udp ~配置文件: /etc/chrony.conf

配置文件chrony.conf ~server - 可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度 ~driftfile - 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿 ~rtcsync - 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC) ~allow / deny - 指定一台主机、子网,或者网络以允许或拒绝访问本服务器 ~cmdallow / cmddeny - 可以指定哪台主机可以通过chronyd使用控制命令 ~bindcmdaddress - 允许chronyd监听哪个接口来接收由chronyc执行的命令 ~makestep - 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时调整系统时钟 ~local stratum 10 - 即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端

chronyc命令 ~chronyc命令 ~help命令可以查看更多chronyc的交互命令 ~accheck 检查是否对特定主机可访问当前服务器 ~activity 显示有多少NTP源在线/离线 ~sources [-v] 显示当前时间源的同步信息 ~sourcestats [-v]显示当前时间源的同步统计信息 ~add server 手动添加一台新的NTP服务器 ~clients 报告已访问本服务器的客户端列表 ~delete 手动移除NTP服务器或对等服务器 ~settime 手动设置守护进程时间 ~sracking 显示系统时间信息

chronyc示例 [root@centos7 ~]#chronyc chrony version 3.2 Copyright (C) 1997-2003, 2007, 2009-2017 Richard P. Curnow and others chrony comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public License version 2 for details. chronyc> clients Hostname NTP Drop Int IntL Last Cmd Drop Int Last

192.168.8.7 18 0 6 - 17 0 0 - - 192.168.8.6 14 0 6 - 56 0 0 - - chronyc> activity 200 OK 1 sources online 0 sources offline 0 sources doing burst (return to online) 0 sources doing burst (return to offline) 0 sources with unknown address chronyc> sources -v 210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | |
MS Name/IP address Stratum Poll Reach LastRx Last sample

^? 192.168.8.100 3 8 1 338 -40ms[ -40ms] +/- 237ms

公共NTP服务 ~pool.ntp.org:项目是一个提供可靠易用的NTP服务的虚拟集群cn.pool.ntp.org,0-3.cn.pool.ntp.org ~阿里云公共NTP服务器 Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com windows类: time.pool.aliyun.com ~大学ntp服务 s1a.time.edu.cn 北京邮电大学 s1b.time.edu.cn 清华大学 s1c.time.edu.cn 北京大学 ~国家授时中心服务器 210.72.145.44

时间工具 ~timedatectl ~查看日期时间、时区及NTP状态:timedatectl ~查看时区列表:timedatectl list-timezones ~修改时区:timedatectl set-timezone Asia/Shanghai ~修改日期时间:timedatectl set-time "2017-01-23 10:30:00" ~开启NTP: timedatectl set-ntp true/flase ~system-config-date:图形化配置chrony服务的工具

ssh服务器 ~服务器端:sshd, 配置文件: /etc/ssh/sshd_config ~常用参数: ~Port ~ListenAddress ip ~LoginGraceTime 2m ~PermitRootLogin yes ~StrictModes yes 检查.ssh/文件的所有者,权限等 ~MaxAuthTries 6 ~MaxSessions 10 同一个连接最大会话 ~PubkeyAuthentication yes ~PermitEmptyPasswords no ~PasswordAuthentication yes

常用参数 ~GatewayPorts no ~ClientAliveInterval 单位:秒 ~ClientAliveCountMax 默认3 ~UseDNS yes ~GSSAPIAuthentication yes 提高速度可改为no ~MaxStartups 未认证连接最大值,默认值10 ~Banner /path/file ~限制可登录用户的办法: AllowUsers user1 user2 user3 DenyUsers AllowGroups DenyGroups

编译安装dropbear示例 ~ssh协议的另一个实现:dropbear ~源码编译安装: •1、安装开发包组:yum groupinstall “Development tools” •2、下载dropbear-2017.75.tar.bz2 •3、tar xf dropbear-2017.75.tar.bz2 •4、less INSTALL README •5、./configure •6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" •7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

dropbear ~启动ssh服务: •8、ls /usr/local/sbin/ /usr/local/bin/ •9、/usr/local/sbin/dropbear -h •10、mkdir /etc/dropbear •11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048 •12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key •13、dropbear -p :2222 -F –E #前台运行 dropbear -p :2222 #后台运行 ~客户端访问: •14、ssh -p 2222 root@127.0.0.1 •15、dbclient -p 2222 root@127.0.0.1

AIDE ~安装 yum install 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 ~初始化默认的AIDE的库: /usr/local/bin/aide --init ~生成检查数据库(建议初始数据库存放到安全的地方) cd /var/lib/aide mv aide.db.new.gz aide.db.gz ~检测: /usr/local/bin/aide --check ~更新数据库 aide --update

更改身份 ~su 切换身份:su –l username –c ‘command’ ~sudo •来自sudo包,man 5 sudoers •sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员 •sudo可以提供日志,记录每个用户使用sudo操作 •sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机 •sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券” •通过visudo命令编辑配置文件,具有语法检查功能 visudo -c 检查语法 visudo -f /etc/sudoers.d/test

sudo ~配置文件:/etc/sudoers, /etc/sudoers.d/ ~时间戳文件:/var/db/sudo ~日志文件:/var/log/secure ~配置文件支持使用通配符glob ? 任意单一字符

  • 匹配任意长度字符 [wxc] 匹配其中一个字符 [!wxc] 除了这三个字符的其它字符 \x 转义 [[alpha]] 字母 示例: /bin/ls [[alpha]]* ~配置文件规则有两类 1、别名定义:不是必须的 2、授权规则:必须的

sudoers ~授权规则格式: 用户 登入主机=(代表用户) 命令 ~示例: 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 NAME1 = item1, item2, item3 : NAME2 = item4, item5 ~示例1: Student ALL=(ALL) ALL %wheel ALL=(ALL) ALL ~示例2: student ALL=(root) /sbin/pidof,/sbin/ifconfig %wheel ALL=(ALL) NOPASSWD: ALL

sudo示例 ~示例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

sudo示例 ~示例4 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/userdel ~示例5 Defaults:wang runas_default=tom wang ALL=(tom,jerry) ALL ~示例6 wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd ~示例7 wang ALL=(ALL) /bin/cat /var/log/messages

sudo命令 ~ls -l /usr/bin/sudo ~sudo –i –u wang 切换身份 ~sudo [-u user] COMMAND -V 显示版本信息等配置信息 -u user 默认为root -l,ll 列出用户在主机上可用的和被禁止的命令 -v 再延长密码有效期限5分钟,更新时间戳 -k 清除时间戳(1970-01-01),下次需要重新输密码 -K 与-k类似,还要删除时间戳文件 -b 在后台执行指令 -p 改变询问密码的提示符号 示例:-p ”password on %h for user %p:”

TCP_Wrappers的使用 ~配置文件:/etc/hosts.allow, /etc/hosts.deny ~帮助参考:man 5 hosts_access,man 5 hosts_options ~检查顺序:hosts.allow,hosts.deny(默认允许) 注意:一旦前面规则匹配,直接生效,将不再继续 ~基本语法: ~daemon_list@host: client_list [ :options :option… ] ~Daemon_list@host格式 ~单个应用程序的二进制文件名,而非服务名,例如vsftpd ~以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd ~ALL表示所有接受tcp_wrapper控制的服务程序 ~主机有多个IP,可用@hostIP来实现控制 如:in.telnetd@192.168.0.254

TCP_Wrappers的使用 ~客户端Client_list格式 ~以逗号或空格分隔的客户端列表 ~基于IP地址:192.168.10.1 192.168.1. ~基于主机名:www.magedu.com .magedu.com 较少用 ~基于网络/掩码:192.168.0.0/255.255.255.0 ~基于net/prefixlen: 192.168.1.0/24(CentOS7) ~基于网络组(NIS 域):@mynetwork ~内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID ~EXCEPT用法: 示例: vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1

示例 ~示例:只允许192.168.1.0/24的主机访问sshd /etc/hosts.allow sshd: 192.168.1. /etc/hosts.deny sshd :ALL ~示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务 /etc/hosts.allow vsftpd,in.telnetd: 192.168.1. /etc/host.deny vsftpd,in.telnetd: ALL

TCP_Wrappers的使用 ~[:options]选项: ~帮助:man 5 hosts_options deny 主要用在/etc/hosts.allow定义“拒绝”规则 如:vsftpd: 172.16. :deny allow 主要用在/etc/hosts.deny定义“允许”规则 如:vsftpd:172.16. :allow spawn 启动一个外部程序完成执行的操作 twist 实际动作是拒绝访问,使用指定操作替换当前服务,标准输出和ERROR发送到客户端,默认至/dev/null ~测试工具: tcpdmatch [-d] daemon[@host] client -d 测试当前目录下的hosts.allow和hosts.deny

示例 ~sshd: ALL :spawn echo "$(date +%%F) login attempt from %c to %s,%d" >>/var/log/sshd.log ~说明: ~在/etc/hosts.allow中添加,允许登录,并记录日志 ~在/etc/hosts.deny中添加,拒绝登录,并记录日志 ~%c 客户端信息 ~%s 服务器端信息 ~%d 服务名 ~%p 守护进程的PID ~%% 表示% ~vsftpd: 172.16. :twist /bin/echo “connection prohibited”

PAM认证机制 ~PAM相关文件 ~模块文件目录:/lib64/security/*.so ~环境相关的设置:/etc/security/ ~主配置文件:/etc/pam.conf,默认不存在 ~为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME ~注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM认证机制 ~通用配置文件/etc/pam.conf格式 application type control module-path arguments ~专用配置文件/etc/pam.d/* 格式 type control module-path arguments ~说明: ~服务名(application) telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务 ~模块类型(module-type) ~control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况 ~module-path 用来指明本模块对应的程序文件的路径名 ~Arguments 用来传递给该模块的参数

PAM模块示例 ~模块:pam_shells ~功能:检查有效shell ~man pam_shells ~示例:不允许使用/bin/csh的用户本地登录 vim /etc/pam.d/login auth required pam_shells.so vim /etc/shells 去掉 /bin/csh useradd –s /bin/csh testuser testuser将不可登录 tail /var/log/secure

PAM模块示例 ~模块:pam_limits.so ~功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间 ~修改限制的实现方式: ~(1) ulimit命令,立即生效,但无法保存 -n 每个进程最多的打开的文件描述符个数 -u 最大用户进程数 -S 使用 soft(软)资源限制 -H 使用 hard(硬)资源限制 ~(2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf ~配置文件:每行一个定义; <domain> <type> <item> <value>

编译安装 第一步:下载 dropbear-2019.78.tar.bz2包,解压 tar xvf dropbear-2019.78.tar.bz2 解压到当前目录 cd dropbear-2019.78 进入该目录 第二步 :编译安装 ./configure --prefix=/app/dropbear --sysconfdir=/etc/dropbear --disable-zlib --prefix=/app/dropbear 指定安装位置 --sysconfdir=/etc/dropbear 指定配置文件位置 --disable-zlib 关闭zlib功能 make && make install 编译并且安装 第三步:编译完成后,进入安装的指定目录内 cd /app/dropbear 需要注意的是: 在INSTALL文件中,我们需要生成key,并且指定目录,之后才能启动服务 内容如下: To run the server, you need to generate server keys, this is one-off: ./dropbearkey -t rsa -f dropbear_rsa_host_key ./dropbearkey -t dss -f dropbear_dss_host_key ./dropbearkey -t ecdsa -f dropbear_ecdsa_host_key 我们需要手动创建key文件, mkdir /etc/dropbear ./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key 第四步:启动dropbear 注意: dropbear开启时后台开启的,由于在本机上已经有ssh服务了,22端口已经被openssh占用,所以,我们需要指定一个端口 dropbear -p 2222 (要确保此端口没有被使用) 启动服务 dropbear -p 2222 -FE 前台执行,可以将错误日志显示在桌面上 dbclient是客户端工具 dbclient 指定要连接的主机IP 默认连接的是22端口,我们也可以直接指定端口 -p port 第五步: 关闭dropbear ps aux | grep dropbear kill PID