什么是SSH服务器?
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络---------------->SSH服务端
优点:
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
常见的ssh协议
客户端: Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。 Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。 执行"systemctl start sshd"命令即可启动sshd 服务 sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞) sshd服务的默认配置文件是/etc/ssh/sshd_config ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。
相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
服务名称:sshd 服务端主程序:/usr/sbin/sshd 服务端配置文件:/etc/ssh/sshd_config 客户端配置文件:/etc/ssh/ssh_config
远程管理linux系统基本上都要使用到ssh,原因很简单:telnet、FTP等传输方式是?以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
OpenSSH 常用配置文件有两个/etc/ssh/ssh_config 和/etc/sshd_config。 ssh_config:为客户端配置文件,设置与客户端相关的应用可通过此文件实现 sshd_config:为服务器端配置文件,设置与服务端相关的应用可通过此文件实现1.2 ssh原理 1.2.1公钥传输原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUWZYxts-1638865529526)(ssh远程登录协议和tcp wappers.assets/image-20210929010637581.png)]
-
客户端发起链接请求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
-
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都
会被加密
ssh加密通讯原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6Oj0e9g-1638865529528)(ssh远程登录协议和tcp wappers.assets/image-20210929010752126.png)]
(1)对称加密
1、概念
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
2、常用算法
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
3、特点
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
4、优缺点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担
(2)非对称加密
1、概念
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
2、常用算法
RSA(RSA algorithm):目前使用最广泛的算法
DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA
仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快
ECC(Elliptic curve cryptography,椭圆曲线加密算法)
ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA
的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障
3、原理
首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下
5、优缺点
相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
此本次实验中,我们用非对称加密算法ECDSA进行加密,为了方便用root用户,也可给其他普通用户配置
1.2.2登录#登录 方法一: ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port 当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。 例子: [root@ky15 ~]#ssh root@192.168.91.101 #默认使用22端口 root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码 The authenticity of host '192.168.91.101 (192.168.91.101)' can't be established. ECDSA key fingerprint is SHA256:o72+YjT+8laQRofsv2dFlcx099aeoI92rloek3ZVrUY. ECDSA key fingerprint is MD5:a7:9c:69:35:16:17:21:cb:0e:4f:0d:42:44:16:3a:f7. Are you sure you want to continue connecting (yes/no)? root@192.168.91.101's password: Last login: Tue Sep 28 22:23:52 2021 [root@ky15-1 ~]# #登录方法二 ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port -l :-l 选项,指定登录名称。 -p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录) 例子: [root@ky15 ~]#ssh -l root 192.168.91.101 root@192.168.91.101's password: Last login: Tue Sep 28 22:25:40 2021 from 192.168.91.100
TIPS:思考我们登录时怎么确认是不是我需要连接的服务器?
1.3服务端配置 1.3.1常用配置项:[root@ky15-1 ~]# vim /etc/ssh/sshd_config
Port 22 #生产建议修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
StrictModes yes #检查.ssh/文件的所有者,权限等
MaxAuthTries 6 #pecifies the maximum number of authentication
# ssh -o NumberOfPasswordprompts=8root@192.168.91.100需要配合这个选 项一起使用
attempts permitted per connection. once the number of failures reaches half this
value, additional failures are logged. The default is 6.
MaxSessions 10 #同一个连接最大会话
PubkeyAuthentication yes #基于key验证
PermitEmptyPasswords no #空密码连接
PasswordAuthentication yes #基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 #单位:秒
ClientAliveCountMax 3 #默认3
UseDNS yes #提高速度可改为no
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
ssh服务的最佳实践
- 建议使用非默认端口
- 禁止使用protocol version 1
- 限制可登录用户
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略
- 仅监听特定的IP地址
- 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志
全部配置项详细解释:
#############1. 关于 SSH Server 的整体设定############## #Port 22 ##port用来设置sshd监听的端口,为了安全起见,建议更改默认的22端口为5位以上陌生端口 #Protocol 2,1 Protocol 2 ##设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress用来设置sshd服务器绑定的IP地址 ##监听的主机适配卡,举个例子来说,如果您有两个 IP, 分别是 192.168.0.11 及 192.168.2.20 ,那么只想要 ###开放 192.168.0.11 时,就可以设置为:ListenAddress 192.168.0.11 ####表示只监听来自 192.168.0.11 这个 IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH #############2. 说明主机的 Private Key 放置的档案########## #ListenAddress :: ##HostKey用来设置服务器秘钥文件的路径 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key ##设置SSH version 1 使用的私钥 # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key ##设置SSH version 2 使用的 RSA 私钥 #HostKey /etc/ssh/ssh_host_dsa_key ##设置SSH version 2 使用的 DSA 私钥 #Compression yes ##设置是否可以使用压缩指令 # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h ##KeyRegenerationInterval用来设置多长时间后系统自动重新生成服务器的秘钥, ###(如果使用密钥)。重新生成秘钥是为了防止利用盗用的密钥解密被截获的信息。 #ServerKeyBits 768 ##ServerKeyBits用来定义服务器密钥的长度 ###指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV ##SyslogFacility用来设定在记录来自sshd的消息的时候,是否给出“facility code” 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。 #LogLevel INFO ##LogLevel用来设定sshd日志消息的级别 定义登录记录的等级 #################3.安全认证方面的设定################ #############3.1、有关安全登录的设定############### # Authentication: ##限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。 #LoginGraceTime 2m ##LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙 #PermitRootLogin yes ##PermitRootLogin用来设置能不能直接以超级用户ssh登录,root远程登录Linux很危险,建议注销或设置为no #StrictModes yes ##StrictModes用来设置ssh在接收登录请求之前是否检查用户根目录和rhosts文件的权限和所有权,建议开启 ###建议使用默认值"yes"来预防可能出现的低级错误。 #RSAAuthentication yes ##RSAAuthentication用来设置是否开启RSA密钥验证,只针对SSH1 #PubkeyAuthentication yes ##PubkeyAuthentication用来设置是否开启公钥验证,如果使用公钥验证的方式登录时,则设置为yes #AuthorizedKeysFile .ssh/authorized_keys ##AuthorizedKeysFile用来设置公钥验证文件的路径,与PubkeyAuthentication配合使用,默认值是".ssh/authorized_keys"。 ###该指令中可以使用下列根据连接时的实际情况进行展开的符号: %% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名 ####经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。 #############3.2、安全验证的设定############### # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no ##是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。 ###这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。出于安全考虑,建议使用默认值"no"。 # similar for protocol version 2 #HostbasedAuthentication no ##这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。 # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no ##IgnoreUserKnownHosts用来设置ssh在进行RhostsRSAAuthentication安全验证时是否忽略用户的“/$HOME/.ssh/known_hosts”文件 # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes ##IgnoreRhosts用来设置验证的时候是否使用“~/.rhosts”和“~/.shosts”文件 # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes ##PasswordAuthentication用来设置是否开启密码验证机制,如果用密码登录系统,则设置yes #PermitEmptyPasswords no #PermitEmptyPasswords用来设置是否允许用口令为空的账号登录系统,设置no #PasswordAuthentication yes ##是否允许使用基于密码的认证。默认为"yes"。 PasswordAuthentication yes # Change to no to disable s/key passwords ##设置禁用s/key密码 #ChallengeResponseAuthentication yes ##ChallengeResponseAuthentication 是否允许质疑-应答(challenge-response)认证 ChallengeResponseAuthentication no ########3.3、与 Kerberos 有关的参数设定,指定是否允许基于Kerberos的用户认证######## #Kerberos options #KerberosAuthentication no ##是否要求用户为PasswdAuthentication提供的密码必须通过Kerberos KDC认证,要使用Kerberos认证, ###服务器必须提供一个可以校验KDC identity的Kerberos servtab。默认值为no #KerberosOrLocalPasswd yes ##如果Kerberos密码认证失败,那么该密码还将要通过其他的的认证机制,如/etc/passwd ###在启用此项后,如果无法通过Kerberos验证,则密码的正确性将由本地的机制来决定,如/etc/passwd,默认为yes #KerberosTicketCleanup yes ##设置是否在用户退出登录是自动销毁用户的ticket #KerberosGetAFSToken no ##如果使用AFS并且该用户有一个Kerberos 5 TGT,那么开启该指令后, ###将会在访问用户的家目录前尝试获取一个AFS token,并尝试传送 AFS token 给 Server 端,默认为no ####3.4、与 GSSAPI 有关的参数设定,指定是否允许基于GSSAPI的用户认证,仅适用于SSH2#### ##GSSAPI 是一套类似 Kerberos 5 的通用网络安全系统接口。 ###如果你拥有一套 GSSAPI库,就可以通过 tcp 连接直接建立 cvs 连接,由 GSSAPI 进行安全鉴别。 # GSSAPI options #GSSAPIAuthentication no ##GSSAPIAuthentication 指定是否允许基于GSSAPI的用户认证,默认为no GSSAPIAuthentication yes #GSSAPICleanupCredentials yes ##GSSAPICleanupCredentials 设置是否在用户退出登录是自动销毁用户的凭证缓存 GSSAPICleanupCredentials yes # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication mechanism. # Depending on your PAM configuration, this may bypass the setting of # PasswordAuthentication, PermitEmptyPasswords, and # "PermitRootLogin without-password". If you just want the PAM account and # session checks to run without PAM authentication, then enable this but set # ChallengeResponseAuthentication=no #UsePAM no ##设置是否通过PAM验证 UsePAM yes # Accept locale-related environment variables ##AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。 ###[注意]只有SSH-2协议支持环境变量的传递。指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。 ####也可以使用多个 AcceptEnv 达到同样的目的。需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。 #####由于这个原因,该指令应当小心使用。默认是不传递任何环境变量。 AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL AllowTcpForwarding yes ##AllowTcpForwarding设置是否允许允许tcp端口转发,保护其他的tcp连接 #GatewayPorts no ##GatewayPorts 设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止 #############3.5、X-Window下使用的相关设定############### #X11Forwarding no ##X11Forwarding 用来设置是否允许X11转发 X11Forwarding yes #X11DisplayOffset 10 ##指定X11 转发的第一个可用的显示区(display)数字。默认值是 10 。 ###可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。 X11DisplayOffset 10 #X11UseLocalhost yes #################3.6、登入后的相关设定################# #PrintMotd yes ##PrintMotd用来设置sshd是否在用户登录时显示“/etc/motd”中的信息,可以选在在“/etc/motd”中加入警告的信息 #PrintLastLog yes #PrintLastLog 是否显示上次登录信息 #TCPKeepAlive yes ##TCPKeepAlive 是否持续连接,设置yes可以防止死连接 ###一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常! ####这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。在这个情况下,任何一端死掉后, SSH 可以立刻知道,而不会有僵尸程序的发生! #UseLogin no ##UseLogin 设置是否在交互式会话的登录过程中使用。默认值是"no"。 ###如果开启此指令,那么X11Forwarding 将会被禁止,因为login不知道如何处理 xauth cookies 。 ####需要注意的是,在SSH底下本来就不接受 login 这个程序的登入,如果指UsePrivilegeSeparation ,那么它将在认证完成后被禁用。 UserLogin no #UsePrivilegeSeparation yes ##UsePrivilegeSeparation 设置使用者的权限 #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes ##UseDNS是否使用dns反向解析 #PidFile /var/run/sshd.pid #MaxStartups 10 ##MaxStartups 设置同时允许几个尚未登入的联机,当用户连上ssh但并未输入密码即为所谓的联机, ###在这个联机中,为了保护主机,所以需要设置最大值,预设为10个,而已经建立联机的不计算入内, ####所以一般5个即可,这个设置可以防止恶意对服务器进行连接 #MaxAuthTries 6 ##MaxAuthTries 用来设置最大失败尝试登陆次数为6,合理设置辞职,可以防止攻击者穷举登录服务器 #PermitTunnel no ############3.7、开放禁止用户设定############ #AllowUsers<用户名1> <用户名2> <用户名3> ... ##指定允许通过远程访问的用户,多个用户以空格隔开 #AllowGroups<组名1> <组名2> <组名3> ... ##指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。 #DenyUsers<用户名1> <用户名2> <用户名3> ... ##指定禁止通过远程访问的用户,多个用户以空格隔开 #DenyGroups<组名1> <组名2> <组名3> ... ##指定禁止通过远程访问的组,多个组以空格隔开。 # no default banner path #Banner /some/path # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server ClientAliveInterval 3600 ClientAliveCountMax 01.3.2 使用秘钥对及免交互验证登录
原理:
- 用户/密码
- 基于秘钥
用户/密码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiyAqyJq-1638865529529)(ssh远程登录协议和tcp wappers.assets/image-20210929022951642.png)]
-
客户端发起ssh请求,服务器会把自己的公钥发送给用户
-
用户会根据服务器发来的公钥对密码进行加密
-
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登录方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-76ngHKgV-1638865529530)(ssh远程登录协议和tcp wappers.assets/image-20210929023241661.png)]
-
首先在客户端生成一对密钥(ssh-keygen)
-
并将客户端的公钥ssh-copy-id 拷贝到服务端
-
当客户端再次发送一个连接请求,包括ip、用户名
-
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生
成一个字符串,例如:kgc
-
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
[lisi@ky15-1 root]$ ssh-keygen --help unknown option -- - usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [lisi@ky15-1 root]$ ssh-keygen -t ecdsa #生成密钥文件 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/lisi/.ssh/id_ecdsa): Created directory '/home/lisi/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Passphrases do not match. Try again. Enter passphrase (empty for no passphrase): Enter same passphrase again: Passphrases do not match. Try again. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lisi/.ssh/id_ecdsa. Your public key has been saved in /home/lisi/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:hbO1nsVS739lrS+T4lMg4NbYihnyx96e0eYFgqP6eK4 lisi@ky15-1 The key's randomart image is: +---[ECDSA 256]---+ | | | .. | | .o=o . | | . . +*++.. | | o *S.+.+.. .| | +.+o * o. +| | .o .+ o.o+.| | o. . .=o.=..| | E=o .o.oo ++| +----[SHA256]-----+ [lisi@ky15-1 .ssh]$ cd ~ [lisi@ky15-1 .ssh]$ ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.91.100 #将公钥文件导入对方用户的 注意路径 #到对面服务器 [root@ky15 home]#cd zhangsan/ [root@ky15 zhangsan]#ls -a . .bash_history .bash_profile .cache .mozilla .. .bash_logout .bashrc .config .ssh [root@ky15 zhangsan]#cd .ssh/ [root@ky15 .ssh]#ls authorized_keys [root@ky15 .ssh]#cat authorized_keys ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKQSA9IyCq51N+pngvuFSwoBsWBlzBPn1/pI73wSB+onDfd9i81aTl+QBysQFrDfWUcxlCKniUOP0BewP5rxD+o= lisi@ky15-1 免交互登录 [lisi@ky15-1 .ssh]$ ssh-add Enter passphrase for /home/lisi/.ssh/id_ecdsa: Identity added: /home/lisi/.ssh/id_ecdsa (/home/lisi/.ssh/id_ecdsa) #此处输入此前的密码 [lisi@ky15-1 .ssh]$ ssh zhangsan@192.168.91.100 Last login: Wed Sep 29 00:24:26 2021 from 192.168.91.101 [zhangsan@ky15 ~]$ ssh-keygen -t ecdsa ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.91.100 ssh-add #与用户密码无关 #IP地址无关 #只与密钥对有关1.4ssh客户端
scp命令 —— 远程安全复制
sftp命令 —— 安全FTP上下载
格式:sftp user@host
[root@ky15-1 .ssh]# sftp root@192.168.91.100 [root@ky15-1 .ssh]# sftp -oPort=220 root@192.168.91.100 #如果修改了固定端口2.TCP Wrappers
在 Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、 HTTPD、OpenSSH 等。本节将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作 为应用服务与网络之间的一道特殊防线,提供额外的安全保障。
TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了
一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正
的服务程序,如图 4.3 所示。TCP Wrappers 还可以记录所有企图访问被保护服务的行为,
为管理员提供丰富的安全分析资料。
2.1策略的配置格式两个策略文件的作用相反,但配置记录的格式相同,如下所示。
服务程序列表:客户端地址列表
服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分 隔
(1)服务程序列表
服务程序列表可分为以下几类。
ALL:代表所有的服务
单个服务程序:如“vsftpd“
多个服务程序组成的列表:如“vsftpd,sshd”
2)客户端地址列表
客户端地址列表可分为以下几类。
- ALL:代表任何客户端地址。
- LOCAL:代表本机地址。
- 单个 IP 地址:如“192.168.4.4”
- 网络段地址:如“192.168.4.0/255.255.255.0”
- 以“.”开始的域名:如“.bdqn.com”匹配 bdqn.com 域中的所有主机。
- 以“.”结束的网络地址:如“192.168.4.”匹配整个 192.168.4.0/24 网段
- 嵌入通配符“”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2”
- 匹配以 10.0.8.2 开头的所有 IP 地址。不可与以“.”开始或结束的模式混用
- 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”
#注意sshd_config的黑白名单 [root@ky15 ~]#vim /etc/ssh/sshd_config [root@ky15 ~]#ls /etc/host host.conf hostname hosts hosts.allow hosts.deny [root@ky15 ~]#vim /etc/hosts.allow #配置格式 服务:地址(客户端) #添加 sshd:192.168.91.101 [root@ky15 ~]#vim /etc/hosts.deny sshd:ALL3轻量级自动化运维工具pssh
EPEL源中提供了多个自动化运维工具
-
pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh
和scp的多个并行工具,项目:http://code.google.com/p/parallel-ssh/
-
pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程
主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh,项目:
https://pdsh.googlecode.com/
-
mussh:Multihost SSH wrapper,是一个shell脚本,允许使用命令在多个主机上通过ssh执行命
令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码,项目:
http://www.sourceforge.net/projects/mussh
pssh 命令选项如下:
-H:主机字符串,内容格式”[user@]host[:port]” -h file:主机列表文件,内容格式”[user@]host[:port]” -A:手动输入密码模式 -i:每个服务器内部处理信息输出 -l:登录使用的用户名 -p:并发的线程数【可选】 -o:输出的文件目录【可选】 -e:错误输出文件【可选】 -t:TIMEOUT 超时时间设置,0无限制【可选】 -O:SSH的选项 -P:打印出服务器返回信息 -v:详细模式 --version:查看版本
安装需要配置开发源
[root@ky15-1 yum.repos.d]# cd /etc/yum.repos.d
[root@ky15-1 yum.repos.d]# vim CentOS-base.repo
#最后一行添加
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
[root@ky15-1 yum.repos.d]#yum clean all
#清除缓存
[root@ky15-1 yum.repos.d]# pssh
[root@ky15-1 yum.repos.d]# ssh-keygen
#一路回车
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.91.102
[root@ky15-1 yum.repos.d]# ssh-copy-id 192.168.91.105
#上传秘钥对
[root@ky15-1 yum.repos.d]# pssh -H 192.168.91.102 hostname -i
[1] 02:10:10 [SUCCESS] 192.168.91.102
#管理多台,写入一个文件
[root@ky15-1 yum.repos.d]#vim hosts.txt
[root@ky15-1 yum.repos.d]#cat hosts.txt
10.0.0.8
10.0.0.6
[root@ky15-1 yum.repos.d]#pssh -h hosts.txt -i hostname
#或者
[root@ky15-1 yum.repos.d]# pssh -H "192.168.91.102 192.168.91.105" -i cat /etc/passwd
[1] 02:19:32 [SUCCESS] 192.168.91.102
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[2] 02:19:32 [SUCCESS] 192.168.91.105
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
4selinux
4.1什么是selinux
SELinux,Security Enhanced Linux 的缩写,也就是安全强化的 Linux,是由美国国家安全局(NSA)联合其他安全机构(比如 SCC 公司)共同开发的,旨在增强传统 Linux 操作系统的安全性,解决传统 Linux 系统中自主访问控制(DAC)系统中的各种权限问题(如 root 权限过高等)。
SELinux 项目在 2000 年以 GPL 协议的形式开源,当 Red Hat 在其 Linux 发行版本中包括了 SELinux 之后,SELinux 才逐步变得流行起来。现在,SELinux 已经被许多组织广泛使用,几乎所有的 Linux 内核 2.6 以上版本,都集成了 SELinux 功能。
对于 SELinux,初学者可以这么理解,它是部署在 Linux 上用于增强系统安全的功能模块。
说到这里,读者有必要详细地了解一下这两个访问控制系统的特点:
-
自主访问控制系统(Discretionary Access Control,DAC)
是 Linux 的默认访问控制方式,也就是依据用户的身份和该身份对文件及目录的 rwx 权限来判断是否可以访问。不过,在 DAC 访问控制的实际使用中我们也发现了一些问题:
- root 权限过高,rwx 权限对 root 用户并不生效,一旦 root 用户被窃取或者 root 用户本身的误操作,都是对 Linux 系统的致命威胁。
- Linux 默认权限过于简单,只有所有者、所属组和其他人的身份,权限也只有读、写和执行权限,并不利于权限细分与设定。
- 不合理权限的分配会导致严重后果,比如给系统敏感文件或目录设定 777 权限,或给敏感文件设定特殊权限——SetUID 权限等。
-
强制访问控制(Mandatory Access Control,MAC)是通过 SELinux 的默认策略规则来控制特定的进程对系统的文件资源的访问。也就是说,即使你是 root 用户,但是当你访问文件资源时,如果使用了不正确的进程,那么也是不能访问这个文件资源的。
这样一来,SELinux 控制的就不单单只是用户及权限,还有进程。每个进程能够访问哪个文件资源,以及每个文件资源可以被哪些进程访问,都靠 SELinux 的规则策略来确定。
不过,系统中有这么多的进程,也有这么多的文件,如果手工来进行分配和指定,那么工作量过大。所以 SELinux 提供了很多的默认策略规则,这些策略规则已经设定得比较完善,我们稍后再来学习如何查看和管理这些策略规则。
这里举一个例子,假设 apache 上发现了一个漏洞,使得某个远程用户可以访问系统的敏感文件(如 /etc/shadow)。如果我们的 Linux 中启用了 SELinux,那么,因为 apache 服务的进程并不具备访问 /etc/shadow 的权限,所以这个远程用户通过 apache 访问 /etc/shadow文件就会被 SELinux 所阻挡,起到保护 Linux 系统的作用。
4.2 selinux作用传统的 Linux 系统安全,采用的是 DAC(自主访问控制方式),而 SELinux 是部署在 Linux 系统中的安全增强功能模块,它通过对进程和文件资源采用 MAC(强制访问控制方式)为 Linux 系统提供了改进的安全性。
需要注意的是,SELinux 的 MAC 并不会完全取代 DAC,恰恰相反,对于 Linux 系统安全来说,它是一个额外的安全层,换句话说,当使用 SELinux 时,DAC 仍然被使用,且会首先被使用,如果允许访问,再使用 SELinux 策略;反之,如果 DAC 规则拒绝访问,则根本无需使用 SELinux 策略。
例如,若用户尝试对没有执行权限(rw-)的文件进行执行操作,那么传统的 DAC 规则就会拒绝用户访问,因此,也就无需再使用 SELinux 策略。
相比传统的 Linux DAC 安全控制方式,SELinux 具有诸多好处,比如说:
- 它使用的是 MAC 控制方式,这被认为是最强的访问控制方式;
- 它赋予了主体(用户或进程)最小的访问特权,这也就意味着,每个主体仅被赋予了完成相关任务所必须的一组有限的权限。通过赋予最小访问特权,可以防止主体对其他用户或进程产生不利的影响;
- SELinux 管理过程中,每个进程都有自己的运行区域(称为域),各进程仅运行在自己的域内,无法访问其他进程和文件,除非被授予了特殊权限。
- SELinux 可以调整到 Permissive 模式,此模式允许查看在系统上执行 SELinux 后所产生的印象。在 Permissive 模式中,SELinux 仍然会记录它所认为的安全漏洞,但并不会阻止它们。
有关 SELinux 模式设置等内容,后续章节会详细介绍。
其实,想要了解 SELinux 的优点,最直接的办法就是查看当 Linux 系统上没有运行 SELinux 时会发生什么事情。
例如,Web 服务器守护进程(httd)正在监听某一端口上所发生的事情,而后进来了一个请求查看主页的来自 Web 浏览器的简单请求。由于不会受到 SELinux 的约束,httpd 守护进程听到请求后,可以完成以下事情:
- 根据相关的所有者和所属组的rwx权限,可以访问任何文件或目录;
- 完成存在安全隐患的活动,比如允许上传文件或更改系统显示;
- 可以监听任何端口的传入请求。
但在一个受 SELinux 约束的系统上,httpd 守护进程受到了更加严格的控制。仍然使用上面的示例,httped仅能监听 SELinux 允许其监听的端口。SELinux 还可以防止 httpd 访问任何没有正确设置安全上下文的文件,并拒绝没有再 SELinux 中显式启用的不安全活动。
因此,从本质上讲,SELinux 最大程序上限制了 Linux 系统中的恶意代码活动。
4.3SELinux 的工作模式在解释 SELinux 的工作模式之前,先解释几个概念。
-
主体(Subject):就是想要访问文件或目录资源的进程。想要得到资源,基本流程是这样的:由用户调用命令,由命令产生进程,由进程去访问文件或目录资源。在自主访问控制系统中(Linux 默认权限中),靠权限控制的主体是用户;而在强制访问控制系统中(SELinux 中),靠策略规则控制的主体则是进程。
-
目标(Object):这个概念比较明确,就是需要访问的文件或目录资源。
-
策略(Policy)
:Linux 系统中进程与文件的数量庞大,那么限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,那么 SELinux 的可用性就会极低。还好我们不用手工定义规则,SELinux 默认定义了两个策略,规则都已经在这两个策略中写好了,默认只要调用策略就可以正常使用了。这两个默认策略如下:
-targeted:这是 SELinux 的默认策略,这个策略主要是限制网络服务的,对本机系统的限制极少。我们使用这个策略已经足够了。
-mls:多级安全保护策略,这个策略限制得更为严格。
-
安全上下文(Security Context):每个进程、文件和目录都有自己的安全上下文,进程具体是否能够访问文件或目录,就要看这个安全上下文是否匹配。如果进程的安全上下文和文件或目录的安全上下文能够匹配,则该进程可以访问这个文件或目录。当然,判断进程的安全上下文和文件或目录的安全上下文是否匹配,则需要依靠策略中的规则。举个例子,我们需要找对象,男人可以看作主体,女人就是目标了。而男人是否可以追到女人(主体是否可以访问目标),主要看两个人的性格是否合适(主体和目标的安全上下文是否匹配)。不过,两个人的性格是否合适,是需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断的(安全上下文是否匹配是需要通过策略中的规则来确定的)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTZYZqFy-1638865529530)(ssh远程登录协议和tcp wappers.assets/image-20210929005610599.png)]
解释一下这张示意图:当主体想要访问目标时,如果系统中启动了 SELinux,则主体的访问请求首先需要和 SELinux 中定义好的策略进行匹配。如果进程符合策略中定义好的规则,则允许访问,这时进程的安全上下文就可以和目标的安全上下文进行匹配;如果比较失败,则拒绝访问,并通过 AVC(Access Vector Cache,访问向量缓存,主要用于记录所有和 SELinux 相关的访问统计信息)生成拒绝访问信息。如果安全上下文匹配,则可以正常访问目标文件。当然,最终是否可以真正地访问到目标文件,还要匹配产生进程(主体)的用户是否对目标文件拥有合理的读、写、执行权限。
我们在进行 SELinux 管理的时候,一般只会修改文件或目录的安全上下文,使其和访问进程的安全上下文匹配或不匹配,用来控制进程是否可以访问文件或目录资源;而很少会去修改策略中的具体规则,因为规则实在太多了,修改起来过于复杂。不过,我们是可以人为定义规则是否生效,用以控制规则的启用与关闭的。
SELinux 的工作模式
SELinux 提供了 3 种工作模式:Disabled、Permissive 和 Enforcing,而每种模式都为 Linux 系统安全提供了不同的好处。
Disable工作模式(关闭模式)在 Disable 模式中,SELinux 被关闭,默认的 DAC 访问控制方式被使用。对于那些不需要增强安全性的环境来说,该模式是非常有用的。
例如,若从你的角度看正在运行的应用程序工作正常,但是却产生了大量的 SELinux AVC 拒绝消息,最终可能会填满日志文件,从而导致系统无法使用。在这种情况下,最直接的解决方法就是禁用 SELinux,当然,你也可以在应用程序所访问的文件上设置正确的安全上下文。
需要注意的是,在禁用 SELinux 之前,需要考虑一下是否可能会在系统上再次使用 SELinux,如果决定以后将其设置为 Enforcing 或 Permissive,那么当下次重启系统时,系统将会通过一个自动 SELinux 文件重新进程标记。
关闭 SELinux 的方式也很简单,只需编辑配置文件 /etc/selinux/config,并将文本中 SELINUX= 更改为 SELINUX=disabled 即可,重启系统后,SELinux 就被禁用了。
Permissive工作模式(宽容模式)在 Permissive 模式中,SELinux 被启用,但安全策略规则并没有被强制执行。当安全策略规则应该拒绝访问时,访问仍然被允许。然而,此时会向日志文件发送一条消息,表示该访问应该被拒绝。
SELinux Permissive 模式主要用于以下几种情况:
审核当前的 SELinux 策略规则;
测试新应用程序,看看将 SELinux 策略规则应用到这些程序时会有什么效果;
解决某一特定服务或应用程序在 SELinux 下不再正常工作的故障。
某些情况下,可使用 audit2allow 命令来读取 SELinux 审核日志并生成新的 SELinux 规则,从而有选择性地允许被拒绝的行为,而这也是一种在不禁用 SELinux 的情况下,让应用程序在 Linux 系统上工作的快速方法。
Enforcing工作模式(强制模式)从此模式的名称就可以看出,在 Enforcing 模式中, SELinux 被启动,并强制执行所有的安全策略规则。
SELinux 提供了 3 种工作模式:Disabled、Permissive 和 Enforcing,而每种模式都为 Linux 系统安全提供了不同的好处。
Disable工作模式(关闭模式)在 Disable 模式中,SELinux 被关闭,默认的 DAC 访问控制方式被使用。对于那些不需要增强安全性的环境来说,该模式是非常有用的。
例如,若从你的角度看正在运行的应用程序工作正常,但是却产生了大量的 SELinux AVC 拒绝消息,最终可能会填满日志文件,从而导致系统无法使用。在这种情况下,最直接的解决方法就是禁用 SELinux,当然,你也可以在应用程序所访问的文件上设置正确的安全上下文。
需要注意的是,在禁用 SELinux 之前,需要考虑一下是否可能会在系统上再次使用 SELinux,如果决定以后将其设置为 Enforcing 或 Permissive,那么当下次重启系统时,系统将会通过一个自动 SELinux 文件重新进程标记。
关闭 SELinux 的方式也很简单,只需编辑配置文件 /etc/selinux/config,并将文本中 SELINUX= 更改为 SELINUX=disabled 即可,重启系统后,SELinux 就被禁用了。
Permissive工作模式(宽容模式)在 Permissive 模式中,SELinux 被启用,但安全策略规则并没有被强制执行。当安全策略规则应该拒绝访问时,访问仍然被允许。然而,此时会向日志文件发送一条消息,表示该访问应该被拒绝。
SELinux Permissive 模式主要用于以下几种情况:
审核当前的 SELinux 策略规则;
测试新应用程序,看看将 SELinux 策略规则应用到这些程序时会有什么效果;
解决某一特定服务或应用程序在 SELinux 下不再正常工作的故障。
某些情况下,可使用 audit2allow 命令来读取 SELinux 审核日志并生成新的 SELinux 规则,从而有选择性地允许被拒绝的行为,而这也是一种在不禁用 SELinux 的情况下,让应用程序在 Linux 系统上工作的快速方法。
Enforcing工作模式(强制模式)从此模式的名称就可以看出,在 Enforcing 模式中, SELinux 被启动,并强制执行所有的安全策略规则。
4.4切换模式[root@localhost ~]# getenforce #查询SELinux的运行模式 Enforcing #当前的SELinux是强制模式 [root@localhost ~]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 24 Policy from config file: targeted [root@localhost ~]# setenforce 0 #切换成宽容模式 [root@localhost ~]# getenforce Permissive [root@localhost ~]# setenforce 1 #切换成强制模式 [root@localhost ~]# getenforce Enforcing [root@localhost ~]#vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@localhost ~]# setenforce 0
#切换成宽容模式
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# setenforce 1
#切换成强制模式
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]#vim /etc/selinux/config
This file controls the state of SELinux on the system. SELINUX= can take one of these three values: enforcing - SELinux security policy is enforced. permissive - SELinux prints warnings instead of enforcing. disabled - No SELinux policy is loaded.SELINUX=disabled
SELINUXTYPE= can take one of three two values: targeted - Targeted processes are protected, minimum - Modification of targeted policy. only selected processes are protected. mls - Multi Level Security protection.SELINUXTYPE=targeted



