加密和安全

                           

需要介绍的内容:

  1. 安全机制

  2. 对称和非对称加密

  3. 散列算法

  4. gpg

  5. PKI和CA

  6. Openssl

  7. 证书管理

  8. ssh服务

  9. 轻量级自动化运维工具

  10. ssh端口转发

  11. dropbear安装

  12. aide

  13. sudo

  14. TCP Wrappers

  15. PAM模块

1、安全的各种机制

介绍linux专业技能之前需要了解下关于安全的东西!!!

1.1、墨菲定律

    墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择

主要内容:

任何事都没有表面看起来那么简单;

所有的事都会比你预计的时间长;

会出错的事总会出错;

如果你担心某种情况发生,那么它就更有可能发生;

1.2、安全机制

   信息安全防护的目标

   保密性( Confidentiality )完整性 (Integrity) 可用性 (Usability) 可控制性 (Controlability) 不可否认性 (Non-repudiation)

   安全防护环节

    物理安全:各种设备/主机、机房环境

系统安全:主机或设备的操作系统

应用安全:各种网络服务、应用程序

网络安全:对网络访问的控制、防火墙规则

数据安全:信息的备份与恢复、加密解密

管理安全:各种保障性的规范、流程、方法

1.3、安全

安全攻击: STRIDE

Spoofing 假冒

Tampering 篡改

Repudiation 否认

Information Disclosure 信息泄漏

Denial of Service 拒绝服务

Elevation of Privilege 提升权限

1.4、安全设计基本原则

  1. 使用成熟的安全系统 ;

  2. 以小人之心度输入数据;

  3. 外部系统是不安全的;

  4. 最小授权;

  5. 减少外部接口;

  6. 缺省使用安全模式;

  7. 安全不是似是而非;

  8. 从STRIDE思考;

  9. 在入口处检查;

  10. 从管理上保护好你的系统

1.5、安全算法

常用安全技术

  认证  授权 审计 安全通信

加密算法和协议

  对称加密;

公钥加密;

单向加密;

认证协议

Linux中查看服务:dig -t mx kingbase.com.cn

2、对称和非对称加密

2.1、对称加密算法

   加密和解密的密钥一样的,感觉像是镜像一样

   DES:Data Encryption Standard,56bits   之前是最强的加密算法

   3DES:

   AES:Advanced (128, 192, 256bits)   目前是最安全的加密算法

   Blowfish,Twofish     商业加密算法

   IDEA,RC6,CAST5

特性:

1、加密、解密使用同一个密钥,效率高

2、将原始数据分割成固定大小的块,逐个进行加密

缺陷: 密钥过多 ;密钥分发 ;数据来源无法确认

2.2、非对称加密算法

  公钥加密:密钥是成对出现

    公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

  特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

  功能:

  1. 数字签名:主要在于让接收方确认发送方身份

  2. 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

  3. 数据加密:适合加密较小数据

  缺点:密钥长,加密解密效率低下

  算法: RSA(加密,数字签名) DSA(数字签名) ELGamal   ,默认是RSA算法

非对称加密算法在当前是使用的最多的,所以展开来介绍非对称加密

基于一对公钥/密钥对:公钥用于加密,私钥用于解密

    实现加密的过程:

      1、接收者:生成公钥/密钥对:P(公开公钥public)和S(保密密钥secret)

      2、发送者:使用接收者的公钥来加密消息M,将P(M)发送给接收者

      3、接收者:使用密钥S来解密:M=S(P(M))

实现数字签名(用私钥加密称为数字签名)

 发送者:生成公钥/密钥对:P和S,使用密钥S来加密消息M ,发送给接收者S(M)

 接收者:使用发送者的公钥来解密M=P(S(M))

结合签名和加密

分离签名

3、散列算法

   3.1、RSA和DSA

   RSA:公钥加密算法是(美国麻省理工学院)开发的,RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目 前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于 一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

    DSA:DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多

   3.2、单向散列

将任意数据缩小成固定大小的“指纹”, 任意长度输入 ; 固定长度输出;若修改数据,指纹也会改变(“不会产生冲突”);无法从指纹中重新生成数据(“单向”)

功能:数据完整性

常见加密算法:

  md5: 128bits、sha1: 160bits、sha224、sha256、sha384、sha512

常用工具

1、md5sum | sha1sum [ --check ] file

  2、openssl、gpg

  3、rpm -V

md5sum /etc/fstab > fstab.log

md5sum -c  fstab.log 比之前方便的多,不用眼睛盯着看

应用程序:RPM

   文件完整性的两种实施方式

   被安装的文件

MD5单向散列

rpm --verify package_name (or -V)

发行的软件包文件

GPG公钥签名

    默认是没有的,需要加入对方公钥来加密对方的key

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat* • (之前在软件安装部分讲过,验证安装来源的是否安全)

rpm --checksig pakage_file_name (or -K)

 密钥长时间不修改可能那个被恶意修改。所以需要密钥交换

4、使用gpg实现对称加密

 对称加密file文件

gpg -c file

ls file.gpg

  在另一台主机上解密file

      gpg -o file -d file.gpg

比如下面的操作:

gpg -c passwd

传输到另外一台

gpg -o file -d passwd.gpg  会弹出对话框,-o 会生成一个文件,如果不指定生成文件,就会打印在公屏上

 4.1、使用gpg工具实现公钥加密

   (1)、在hostB主机上用公钥加密,在hostA主机上解密

   (2)、在hostA主机上生成公钥/私钥对  gpg --gen-key

   (3)、在hostA主机上查看公钥   gpg --list-keys

   (4)、在hostA主机上导出公钥到 wang.pubkey  gpg -a --export -o wang.pubkey

   (5)、从hostA主机上复制公钥文件到需加密的B主机上

        scp wang.pubkey hostB:

   (6)、在需加密数据的hostB主机上生成公钥/私钥对

        gpg --list-keys

gpg --gen-key

   (7)、在hostB主机上导入公钥

        gpg --import wang.pubkey

gpg --list-keys

   (8)、用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

       gpg -e -r wangxiaochun file

 file file.gpg

(9)、复制加密文件到hostA主机

   scp fstab.gpg hostA:

(10)、在hostA主机解密文件

     gpg -d file.gpg

gpg -o file -d file.gpg

   (11)、删除公钥和私钥

       gpg --delete-keys wangxiaochun

gpg --delete-secret-keys wangxiaochun

5、PKI和CA

   中间人攻击:man-in-middle ,中间人会用自己的假公钥替换真公钥在与客户端进行信息传递,客户端以为是真正的服务端进行安全认证;man-in-middle与服务端认证时也是同样的道理

5.1、CA和证书

  PKI:Public Key Infrastructure 公钥认证机构

        签证机构:CA(Certificate Authority) 相当于国家的公安部

注册机构:RA

证书吊销列表:CRL

证书存取库:

  X.509:定义了证书的结构以及认证协议标准

主要规定内容有:版本号 序列号 签名算法 颁发者 有效期限 主体名称 主体公钥 CRL分发点 扩展信息 发行者签名

5.2、证书获取

  证书类型:

      证书授权机构的证书

服务器

用户证书

  获取证书两种方法:

   使用证书授权机构 生成证书请求(csr),将证书请求csr发送给CA ,CA签名颁发证书

   自签名的证书:自已签发自己的公钥

5.3、安全协议

 SSL:Secure Socket Layer,TLS: Transport Layer Security

      1995:SSL 2.0 Netscape

1996:SSL 3.0

1999:TLS 1.0

2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346

2008:TLS 1.2 当前使用

2015:TLS 1.3

功能:机密性,认证,完整性,重放保护

过程:分为握手阶段和应用阶段

    握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字 证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使 用的所有密钥都是通过MasterSecret生成

应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密 钥进行安全通信

5.4、SSL/TLS

 

Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身 份认证可选)、密钥交换

ChangeCipherSpec 协议:一条消息表明握手协议已经完成

Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别, fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续, 只是会给出错误警告

Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二 进制形式传输

5.5、HTTPS结构

https是相对于http协议相对安全,s在这里指的是TLS,在http应用层加了TLS,对文本数据进行加密处理后,成为二进制传输

  

5.6、HTTPS工作过程

 

6、OpenSSL

OpenSSL是一个开源项目

分为三个组件:

      openssl:多用途的命令行工具,包openssl

libcrypto:加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss

上面三个组件在ldd  openssl可以看到其依赖的这几个二进制程序,之前确实不懂

openssl命令:

  两种运行模式:交互模式和批处理模式

  openssl version:程序版本号

  标准命令、消息摘要命令、加密命令

       标准命令:enc, ca, req, ...

6.1、openssl命令

   6.1.1、对称加密:

    工具: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

   6.1.2、单向加密:

工具:md5sum,  sha1sum,  sha224sum, sha256sum…

     openssl dgs

dgst命令:

     帮助:man dgst

openssl dgst -md5 [-hex默认] /PATH/SOMEFILE

openssl dgst -md5 testfile md5sum /PATH/TO/SOMEFILE

MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现 网络通信中保证所传输数据的完整性机制

  6.1.3、生成用户密码

     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

  6.1.4、公钥加密

算法:RSA, ELGamal 工具:gpg, openssl rsautl(man rsautl)

  6.1.5、数字签名

 算法:RSA, DSA, ELGamal

6.1.6、密钥交换

      算法:dh

DSA:Digital Signature Algorithm

DSS:Digital Signature Standard

RSA:

6.1.7、生成密钥对:(查看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

6.1.8、随机数生成器:伪随机数字

键盘和鼠标,块设备中断

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机 数,非阻塞

ARM属于美国商业公司,

RISC-V: 开源

MIPS 之前很有名气的商业公司,逐渐没落

7、证书管理

   7.1创建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)

       生成自签名证书

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: 证书的保存路径

(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一致

  查看证书中的信息:

  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

如下是一个搭建CA的`过程;

   1 建立CA

   (umask 077;openssl genrsa -out private/cakey.pem 4096)

  openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650  <<EOF                        CN/pki/CA/private/cacert.pem -days 3650  <<EOF

beijing

beijing

kingbase

database

ca.kingbase.com

admin@kingbase.com

EOFin@kingbase.com

EOF

   在CA服务器端;新建CA数据库

touch /etc/pki/CA/index.txt

CA服务器端新建证书序列号

echo 0F > /etc/pki/CA/serial

      上述两个文件需要新建,否则在步骤3  CA服务器颁发证书时候会报错

2 申请

   利用公钥生成私钥

(umask 066;openssl genrsa  -out app.key 1024)

 生成证书

 openssl req -new -key app.key  -out app.csr

 上传到CA服务器(此操作中119为CA服务器)

scp /data/app.csr  root@192.168.48.119:/data

   3 颁发证书

openssl ca -in /data/app.csr -out /etc/pki/CA/certs/app.crt -days 100

8、ssh服务和dropbear

   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

 8.1、Openssh软件组成

    OpenSSH介绍:openssh分为openssh、客户端(openssh-clients)和服务端(openssh-server)

配置文件的路径:

    工具:C/S模式

    Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, putty, securecrt, sshsecureshellclient

Server: sshd

8.2、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分配

sh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3

只要不是最后一个就得加-t

  

      1、允许实现对远程系统经验证地加密安全访问

      2、当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub (CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的 ~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接

    8.3、公钥交换

       客户端和服务端首次连接时,内部的认证流程

(1)、客户端发起链接请求

(2)、服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)

(3)、客户端生成密钥对

(4)、客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密

(5)、客户端发送加密后的值到服务端,服务端用私钥解密,得到Res

(6)、服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到 客户端公钥)

(7)、最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥, 之后的所有通讯都会被加密

8.4、ssh加密通讯

   8.5、ssh服务登录验证

     ssh服务登录验证方式:用户/口令;基于密钥

     基于用户和口令登录验证

       (1)、客户端发起ssh请求,服务器会把自己的公钥发送给用户

      (2)、用户会根据服务器发来的公钥对密码进行加密

      (3)、加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确, 则用户登录成功

    

     基于用户名口令登录验证

    

   基于密钥登录验证

  

基于密钥的登录方式

1 首先在客户端生成一对密钥(ssh-keygen)

2 并将客户端的公钥ssh-copy-id 拷贝到服务端

3 当客户端再次发送一个连接请求,包括ip、用户名

4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的 IP和用户,就会随机生成一个字符串,例如:magedu

5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的 字符串发送给服务端

7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

  基于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验证

  (5)重设私钥口令: ssh-keygen –p

(6)验证代理(authentication agent)保密解密后的密钥 这样口令就只需要输入一次 在GNOME中,代理被自动提供给root用户 否则运行ssh-agent bash

(7)钥匙通过命令添加给代理 ssh-add

8.6、 scp命令

   scp [options] SRC... DEST/

   对于scp来说,无论是本机向远程传输、还是远程向本机传输,始终遵从 源----目,且需要知道的是,也可以远程向远程也可以传输,下面的截图就是远程向远程传输信息

两种方式: scp [options] [user@]host:/sourcefile /destpath

           scp [options] /sourcefile [user@]host:/destpath

常用选项:

           -C 压缩数据流

-r 递归复制

-p 保持原文件的属性信息

-q 静默模式

-P PORT 指明remote host的监听的端口

8.7、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)

8.8、sftp命令

    交互式文件传输工具

用法和传统的ftp工具相似

利用ssh服务实现安全的文件上传和下载

使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息

例如下面截图;

9、轻量级自动化运维工具

  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密 钥,以减少输入密码

  项目:MUltihost SSH Wrapper download | SourceForge.net

  说明:以上工具都包含在EPEL源中

 9.1、pssh工具

   选项如下:

--version:查看版本

-h:主机文件列表,内容格式”[user@]host[:port]”

-H:主机字符串,内容格式”[user@]host[:port]”

-A:手动输入密码模式

-i:每个服务器内部处理信息输出

-l:登录使用的用户名

-p:并发的线程数【可选】

-o:输出的文件目录【可选】

-e:错误输出文件【可选】

-t:TIMEOUT 超时时间设置,0无限制【可选】

-O:SSH的选项

-P:打印出服务器返回信息

-v:详细模式

示例:

 通过pssh批量关闭seLinux

  pssh -H root@192.168.1.10 -i ‘sed -i

"/^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”

9.2、pscp.pssh命令(pscp是pssh里面的一部分,就相当于openssh与scp是一样的对应关系,我理解是这样的!!!)

   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/

   

9.3、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(本地名)

   选项:

     -L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称

     -r 递归复制目录

   批量下载目标服务器的passwd文件至/app下,并更名为user

pslurp -H 192.168.1.10 -L /app /etc/passwd user

10、ssh端口转发(这块不懂,视频还得看!!!!)

   SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了 相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet, SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信 息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使 用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

   SSH 端口转发能够提供两大功能:

     (1)、加密 SSH Client 端至 SSH Server 端之间的通讯数据

(2)、突破防火墙的限制完成一些之前无法建立的 TCP 连接

   本地转发

     -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

     远程转发:

       -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

动态端口转发:

   当用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

 10.1、X 协议转发

    所有图形化应用程序都是X客户程序

• 能够通过tcp/ip连接远程X服务器

• 数据没有加密机,但是它通过ssh连接隧道安全进行

ssh -X user@remotehost gedit

remotehost主机上的gedit工具,将会显示在本机的X服务器上 传输的数据将通过ssh连接加密

10.2、ssh服务器

 服务器端:sshd, 配置文件: /etc/ssh/sshd_config

vim  /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

  • 以下两个参数是优化ssh连接的方法,非常好用;

UseDNS no       将ip地址解析成名字

GSSAPIAuthentication   与认证有关

    修改完以后,需要重启ssh服务

systemctl restart sshd

  • 限制可登录用户的办法:

  AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

需要注意的是,配置文件里面大小写是不敏感的

测试指定ip地址连接ssh

  

保存退出以后,重启服务

此时查看端口状态,只有119的22端口号

测试另一台机器通过ssh连接,拒绝连接状态

   查看失败登陆的信息lastb

arp -n 查看MAC地址和ip信息

10.3、ssh服务的最佳实践

    1、建议使用非默认端口

2、禁止使用protocol version 1

3、限制可登录用户

4、设定空闲会话超时时长

5、利用防火墙设置ssh访问策略

6、仅监听特定的IP地址

7、基于口令认证时,使用强密码策略 tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs

8、使用基于密钥的认证

9、禁止使用空密码

10、禁止root用户直接登录

11、限制ssh的访问频度和并发在线数

12、经常分析日志

11、编译安装dropbear示例

ssh协议的另一个实现:dropbear

dropbear编译安装:

首先百度打开dropbear官网,linux需要有上网的功能

  1. 下载安装包:

wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2020.81.tar.bz2

  1. 下载gcc编译环境

yun install gcc  -y

3、解压文件

mv dropbear-2020.81.tar.bz2  /data/

   tar xvf dropbear-2020.81.tar.bz2

  1. 安装前一般需要查看 README INSTALL,参考里面内容对后续make  make install有帮助

  2. 具体参数可以根据实际需要,下面是简单的例子(bin路径下执行)

./configure  --prefix=/app/dropbear --sysconfdir=/etc/dropbear  --disable-zlib

  1. make

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

  1. make install

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

  1. 方便操作,可以将dropbear写入环境变量

  1. 创建配置文件,默认不存在需手动编辑

mkdir /etc/dropbear

9、 创建基于rsa算法的私钥

dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

10、查看dropbear服务的整个目录结构

         11、默认是通过后台启动

     dropbear  -p 9527

12、使用另一台机器测试通过dropbear来访问

13、另外dropbear 的帮助手册 dropbear –help

14、使用前台启动,另一台机器ssh连接并且打印连接信息

  

   15、同时在搭有dropbear的机器上,也可以充当客户端dbclient,来访问别(没有安装dropbear)的机器

  

   16、如果卸载了服务,但是还有缓存

  

12、AIDE:文件完整性校验

当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马 (除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍), 通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用 ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab 作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或 是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有 两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很 强大的工具

  12.1、AIDE主要介绍

    1、主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了

    2、AIDE能够构造一个指定文件的数据库,它使用aide.conf 作为其配置文件。AIDE数据库能够保存文件的各种属性, 包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件 大小、最后修改时间(mtime)、创建时间(ctime)、最后 访问时间(atime)、增加的大小以及连接数。AIDE还能够 使用下列算法:sha1、md5、rmd160、tiger,以密文 形式建立每个文件的校验码或散列号

      

    3、这个数据库不应该保存那些经常变动的文件信息,例如: 日志文件、邮件、/proc文件系统、用户起始目录以及临 时目录

yum install aide -y

修改配置文件

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

  查看软件包的文件列表

    rpm -ql aide

示例如下:

   配置文件

  

   

   aide  --init 初始化,保存监控文件信息

mv aide.db.new.gz  aide.db.gz

aide –check

    更新aide数据库

aide  --update

13、sudo更改身份(提升普通用户权限)

  su 切换身份:su –l username –c ‘command’

  13.1、sudo介绍

    来自sudo包,具体可以查看man 5 sudoers

(1)、sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使 用 sudo,会提示联系管理员

(2)、sudo可以提供日志,记录每个用户使用sudo操作

(3)、sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权 限和使用的主机

(4)、sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入 场券”

(5)、通过visudo命令编辑配置文件,具有语法检查功能

   visudo -c 检查语法

   visudo -f /etc/sudoers.d/test

13.2、sudo具体配置

  配置文件:/etc/sudoers, /etc/sudoers.d/

  时间戳文件:/var/db/sudo

  日志文件:/var/log/secure

  配置文件支持使用通配符glob

     ? 任意单一字符

* 匹配任意长度字符

[wxc] 匹配其中一个字符

[!wxc] 除了这三个字符的其它字符

\x 转义

[[alpha]] 字母 示例: /bin/ls [[alpha]]*

      配置文件规则有两类

          1、别名定义:不是必须的

2、授权规则:必须的

sudo 使普通用户具有管理员权限

且/etc/sudoers 里面定义授权规则

授权规则格式:

     用户 登入主机=(代表用户) 命令

     user host=(runas) command

    示例: root ALL=(ALL) ALL  在配置文件里面有这个,是为了万一root被篡改不是管理员以后,可以再设置回来

    格式说明:

user: 运行命令者的身份

host: 通过哪些主机

(runas):以哪个用户的身份

command: 运行哪些命令

13.3、sudo别名和示例

别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias

别名格式:[A-Z]([A-Z][0-9]_)*

别名定义:

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

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

示例5

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

示例6

wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd

      示例7

        Defaults:wang runas_default=tom

wang ALL=(tom,jerry) ALL

      示例8

      wang ALL=(ALL) /bin/cat /var/log/messages* ( 这里存在安全漏洞)

授权某个用户权限,代表root,在某个主机,执行所有操作(command)

参考标准配置,加策略;

ttyang  192.168.48.119=(root) /bin/mount /dev/sr0 /mnt

visudo和vim /etc/sudoers 等价,且visudo具有检查功能

此处需要注意的是,在配置文件里面的配置的策略要和外边执行的内容一致,在使用ttyang用户挂载时加了个 /

如果要加其他策略,逗号分开 ,此处省略 * ,代表可以取消本机上任何磁盘的挂载

此时取消挂载,然后查看挂载情况

Ubuntu系统中

只需要加入sudo组里面就可以执行sudo命令

  而对于centos来说,加入wheel组里面就可以执行sudo

加入将用户加入wheel组即可使用sudo

/etc/sudoers 文件的结尾可以看出来,可以在/etc/sudoers.d目录下,文件名称无要求,写入策略也可以

测试ttyang是否可以具有sudo权限

13.4、sudo命令

   前提是被sudo授权,或者是在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 改变询问密码的提示符号

14、TCP_Wrappers的使用

    14.1、TCP_Wrappers介绍

      工作在第四层(传输层)的TCP协议

      对有状态连接的特定服务进行安全检测并实现访问控制

      以库文件形式实现

      某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对 libwrap进行编译的

     判断服务程序是否能够由tcp_wrapper进行访问控制的方法:

      ldd /PATH/TO/PROGRAM|grep libwrap.so

strings PATH/TO/PROGRAM|grep libwrap.so

    14.2配置参考以及使用

      配置文件:/etc/hosts.allow, /etc/hosts.deny

      帮助参考:man 5 hosts_access,man 5 hosts_options

      检查顺序:hosts.allow,hosts.deny(系统默认先在allow文件中查看,如果allow中允许,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      

      客户端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

内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID

FTP分为客户端和服务端,以学习环境为例服务端装在centos7上,客户端装在centos6上

      服务端:

yum install vsftpd  -y

          systemctl status vsftpd.service

      客户端:

          yum install ftp -y

      测试连通性(在客户端测试)

    

EXCEPT用法:     

例子:

 示例:只允许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

   14.3、[:options]选项

帮助:man 5 hosts_options

deny 主要用在/etc/hosts.allow定义“拒绝”规则

如:vsftpd: 172.16. :deny

allow 主要用在/etc/hosts.deny定义“允许”规则

如:vsftpd:172.16. :allow

    spawn 启动一个外部程序完成执行的操作

twist 表示不用vsftpd服务,而用twist后面的行为代替,并且在客户端端打印信息,而非服务器端

vsftpd: 172.16. :twist /bin/echo “connection prohibited”

  测试工具:

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”

15、PAM认证

  PAM:Pluggable(可插拔的) Authentication Modules

  认证库:文本文件,MySQL,NIS,LDAP等

  (1)、Sun公司于1995 年开发的一种与认证相关的通用框架机制

  (2)、PAM 是关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开;

(3)、使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无 需更改服务程序 ;

(4)、一种认证框架,自身不做认证

15.1、PAM认证机制

 PAM是一个接口库,读取配置文件,将应用程序和相应的PAM服务模块联系起来,提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如: telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM 配置文件来制定不同应用程序的不同认证策略;无论是API、还是SPI的开发人员,只需要调用此动态库就行

15.2、PAM架构

对于运维工程师来说,我们只是系统管理员的身份,但需要了解其原理

15.2、PAM认证机制

PAM相关文件

模块文件目录:/lib64/security/*.so

环境相关的设置:/etc/security/

主配置文件:/etc/pam.conf,默认不存在

为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

注意:如/etc/pam.d存在,/etc/pam.conf将失效

15.3、PAM认证原理

  PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so

     PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于 /etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证

 

15.4、PAM认证机制

 PAM认证过程:

1.使用者执行/usr/bin/passwd 程序,并输入密码

2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文 件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会 搜寻/etc/pam.d/passwd此设置文件

3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进 行验证 4.将验证结果回传给passwd这个程序,而passwd这个程序会根据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 用来传递给该模块的参数

Auth 账号的认证和授权

Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某 个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用 户的位置(例如:root用户只能从控制台登录)

Password 用户修改密码时密码复杂度检查机制等功能

Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作, 如:记录打开/关闭数据的信息,监视目录等

-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是 安装在系统上的模块有用

展开来讲Control:

    PAM库如何处理与该服务相关的PAM模块成功或失败情况

两种方式实现:

    简单和复杂

简单方式实现:一个关健词实现

    required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该 模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序,即为必要条件

    requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返 回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程 序。是一个必要条件

    sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执 行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件

    optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用, 其返回值一般被忽略

     include: 调用其他的配置文件中定义的配置信息

      复杂详细实现:使用一个或多个“status=action”

      [status1=action1 status2=action …]

Status:检查结果的返回状态

Action:采取行为 ok,done,die,bad,ignore,reset

ok 模块通过,继续检查

done 模块通过,返回最后结果给应用

bad 结果失败,继续检查

die 结果失败,返回失败结果给应用

ignore 结果忽略,不影响最后结果

reset 忽略已经得到的结果

展开来讲module-path: 模块路径

相对路径:

 /lib64/security目录下的模块可使用相对路径;

如:pam_shells.so、pam_limits.so

绝对路径:

模块通过读取配置文件完成用户对系统资源的使用控制

/etc/security/*.conf

        注意:修改PAM配置文件将马上生效

        建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

        Arguments 用来传递给该模块的参数

      

       PAM文档说明

        /user/share/doc/pam-*

rpm -qd pam

man –k pam_

man 模块名 如man rootok

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_securetty.so

功能:只允许root用户在/etc/securetty列出的安全终端上登陆

示例:允许root在telnet登陆

vi /etc/pam.d/remote #auth required pam_securetty.so

#将这一行加上注释

或者/etc/securetty文件中加入

pts/0,pts/1…pts/n

模块:pam_nologin.so

功能:

如果/etc/nologin文件存在,将导致非root用户不能登陆

如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin 文件内容,并拒绝登陆

模块: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>

         

<domain>应用于哪些对象

   Username 单个用户

   @group 组内所有用户

   * 所有用户

  限制的类型

Soft 软限制,普通用户自己可以修改

Hard 硬限制,由root用户设定,且通过kernel强制生效

- 二者同时限定

  <item>限制的资源

     nofile 所能够同时打开的最大文件数量,默认为1024

     nproc 所能够同时运行的进程的最大数量,默认为1024

  <vaule>指定具体值

    

限制用户最多打开的文件数和运行进程数

/etc/pam.d/system-auth

    session required pam_limits.so

vim /etc/security/limits.conf

    apache – nofile 10240 用户apache可打开10240个文件

    student hard nproc 20 用户student不能运行超过20个进程

ab 测试并发数

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值