关于 Linux 运维中安全方面的一些笔记

举报
山河已无恙 发表于 2021/09/27 21:44:08 2021/09/27
【摘要】 写在前面笔记是报班整理的,适合温习,不适合新手。整理了一份,希望对小伙伴有帮助.生活加油,天天开心!博文主要围绕以几个方面:Linux基本防护:账户安全、文件系统安全、关闭不需要的服务用户切换与提权Vsu和sudo,sshdi访问控制加密与解密/对称加密、非对称加密、信息摘要AIDE入侵检测端口扫描 一、Linux基本防护一、Linux基本防护账户安全:设置账户有效期,锁定与解锁账户密码,...

写在前面


  • 笔记是报班整理的,适合温习,不适合新手。整理了一份,希望对小伙伴有帮助.
  • 生活加油,天天开心!博文主要围绕以几个方面:
    • Linux基本防护:账户安全、文件系统安全、关闭不需要的服务
    • 用户切换与提权Vsu和sudo,
    • sshdi访问控制
    • 加密与解密/对称加密、非对称加密、信息摘要
    • AIDE入侵检测
    • 端口扫描

一、Linux基本防护

一、Linux基本防护
账户安全:设置账户有效期,锁定与解锁账户密码,修
改登陆信息
文件系统安全:修改
文件 ATTR属性,设置mount挂载
关闭不需要的服务

设置账号有效期
使用chage工具
-d 0, 强制修改密码
-E yyyy-mm-dd,指定失效日期(-1 取消)

##创建账户dachui
[root@liruilong ~]# useradd dachui
####查看账户dachui的过期时间
[root@liruilong ~]# chage -l dachui
最近一次密码修改时间 :8月 18, 2020
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不 ##永不过期
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
###-E 指定账户dachui的过期时间
[root@liruilong ~]# chage -E 2029-10-01 dachui
[root@liruilong ~]# chage -l dachui
最近一次密码修改时间 :8月 18, 2020
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :10月 01, 2029 ##过期时间指定
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
###-E 后跟数字-1,代表取消账户的过期时间设置
[root@liruilong ~]# chage -E -1 dachui
[root@liruilong ~]# chage -l dachui
最近一次密码修改时间 :8月 18, 2020
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不 ##账户永不过期
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7

设置强制要求用户修改密码 -d 0 案例

########设置强制要求用户修改密码 -d 0 案例
##第一步:给用户dachui设置密码
[root@liruilong ~]# echo 123456 | passwd --stdin dachui
更改用户 dachui 的密码 。
passwd:所有的身份验证令牌已经成功更新。
##第二步:使用dachui用户远程本机
[root@liruilong ~]# ssh dachui@127.0.0.1
......
dachui@127.0.0.1 s password: #输入密码123456
[dachui@liruilong ~]$ #可以登录,ctrl + D 退出
##第三步:管理员设置dachui用户必须修改密码,否则无法登录
[root@liruilong ~]# chage -d 0 dachui
##第四步:重新使用dachui用户远程本机,需要重新设置密码
#因为是普通用户,权限低,所以密码必须是8位以上,字母和数字(tarena123)
[root@liruilong ~]# ssh dachui@127.0.0.1
dachui@127.0.0.1s password: #输入密码123456
You are required to change your password immediately (root enforced)
Last failed login: Tue Aug 18 08:38:45 CST 2020 from localhost on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Tue Aug 18 08:33:19 2020 from localhost
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user dachui.
Changing password for dachui.
(current) UNIX password: #输入以前的密码123456
New password: #设置新的密码为123,太过简单无法通过
BAD PASSWORD: The password is too similar to the old one
New password: #设置新的密码为654321,密码最少是8位
BAD PASSWORD: The password is shorter than 8 characters
New password: #设置新的密码:tarena123
Retype new password: #重新输入新密码:tarena123
passwd: all authentication tokens updated successfully.
Connection to 127.0.0.1 closed.
#第五步:重新使用账户dachui远程本机
[root@liruilong ~]# ssh dachui@127.0.0.1
dachui@127.0.0.1s password: #输入密码:tarena123
Last login: Tue Aug 18 08:38:49 2020 from localhost
[dachui@liruilong ~]$ #ctrl + D 登出

账号的锁定/解锁

使用passwd命令: -l 锁定、-u 解锁、-S 看状态

在这里插入图片描述

####-S(大写) 查看用户dachui密码的状态
[root@liruilong ~]# passwd -S dachui
dachui PS 2020-08-18 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
###-l 锁定dachui账户
[root@liruilong ~]# passwd -l dachui
锁定用户 dachui 的密码 。
passwd: 操作成功
####-S(大写) 查看用户dachui密码的状态,密码被锁定,无法登录使用
[root@liruilong ~]# passwd -S dachui
dachui LK 2020-08-18 0 99999 7 -1 (密码已被锁定。)
###使用账户dachui远程本机,无法登录
[root@liruilong ~]# ssh dachui@127.0.0.1
dachui@127.0.0.1's password: #密码为: tarena123
Permission denied, please try again.
dachui@127.0.0.1's password:
###-u 解锁dachui账户
[root@liruilong ~]# passwd -u dachui
解锁用户 dachui 的密码。
passwd: 操作成功
###重新使用账户dachui远程本机,可以登录
[root@liruilong ~]# ssh dachui@127.0.0.1
dachui@127.0.0.1s password: #密码为: tarena123
Last failed login: Tue Aug 18 08:55:30 CST 2020 from localhost on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Tue Aug 18 08:46:50 2020 from localhost
[dachui@liruilong ~]$ #ctrl + D 退出登录
Connection to 127.0.0.1 closed.
#####-S(大写) 重新查看用户dachui密码的状态,已解锁
[root@liruilong ~]# passwd -S dachui
dachui PS 2020-08-18 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

强制定期修改密码

  • 配置文件 /etc/login.defs
  • 主要控制属性
主要控制属性
PASS_MAX_DAYS —》 用户密码的最长有效期
PASS_MIN_DAYS —》 用户密码的最短有效期
PASS_WARN_AGE —》 用户密码过期的前几天会发送警告信息
#######此管理用户密码的操作,只会对后面创建的用户生效,以前的则不影响
[root@liruilong ~]# vim /etc/login.defs
......
25 PASS_MAX_DAYS 60 #一个密码最长可以使用60天
26 PASS_MIN_DAYS 0 #一个密码最少要用多少天,否则无法修改,0不设置
27 PASS_MIN_LEN 5 #密码的最少长度为5
28 PASS_WARN_AGE 7 #密码过期的前7天,对用户发送警告信息
......
#####对当前用户的密码进行管理,/etc/shadow 为用户密码的配置文件
###用户密码的最长有效期为99999,可以直接修改配置文件对以前的用户进行密码管理
[root@liruilong ~]# cat /etc/shadow | head -3
root:$6$l2XJYza/aL1Ug4Ta$4kBxc4ED.pyWbBR5Yg3XVX/3lT3S0Efuh4eNxC83AdIlYDeEzcafsbV
8YkVo88T0W/vVDTxpYtiFceiUM9qQk0::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::

伪装登录提示

伪装登录提示
配置文件 /etc/issue、/etc/issue.net
分别使用于本地、远程登录
默认会提示内核、系统等版本信息

这个 centos7 可能有点问题,可以写到 .bashrc 文件里:.bashrc文件通常也是通过某个bash启动文件来运行的。因为.bashrc文件会运行两次:一次是 当你登入bash shell时,另一次是当你启动一个bash shell时。如果你需要一个脚本在两个时刻都得 以运行,可以把这个脚本放进该文件中。

#####修改本地用户登录的提示信息
[root@liruilong ~]# vim /etc/issue
Welcome to Tedu
#####修改网络用户登录的提示信息,远程登录时显示,ssh默认关闭此功能
##可以不修改
[root@liruilong ~]# vim /etc/issue.net
Welcome to Ted

在这里插入图片描述

文件系统安全

锁定/解锁保护文件

  • 文件属性控制chattr、lsattr
  • +、- 控制方式
    • 属性i不可变 (immutable)
    • 属性a: 仅可追加(append only)

在这里插入图片描述

######创建一个测试文件
[root@liruilong ~]# vim test.sh
hello the world
ni hao.
#########文件如果有i的属性,则对于此文件,增删改查均无法操作
##lsattr 查看文件的属性
[root@liruilong ~]# lsattr test.sh
---------------- test.sh
##chattr 给文件test.sh增加i的属性
[root@liruilong ~]# chattr +i test.sh
##查看文件test.sh属性
[root@liruilong ~]# lsattr test.sh
----i----------- test.sh
##测试,写入操作和删除操作都无法进行
[root@liruilong ~]# echo 123 > test.sh
-bash: test.sh: 权限不够
[root@liruilong ~]# rm -rf test.sh
rm: 无法删除"test.sh": 不允许的操作
##取消文件test.sh的i的属性,通过lsattr查看
[root@liruilong ~]# chattr -i test.sh
[root@liruilong ~]# lsattr test.sh
---------------- test.sh
#########文件如果有a的属性,则对于此文件,只能执行追加的操作
####对于日志文件执行a属性,防止内容被篡改
##给文件test.sh增加一个a属性,lsattr查看
[root@liruilong ~]# chattr +a test.sh
[root@liruilong ~]# lsattr test.sh
-----a---------- test.sh
###测试,追加内容的操作可以进行,写入,删除失败
[root@liruilong ~]# echo 123 >> test.sh
[root@liruilong ~]# echo 123 > test.sh
-bash: test.sh: 不允许的操作
[root@liruilong ~]# rm -rf test.sh
rm: 无法删除"test.sh": 不允许的操作
##取消文件test.sh的a的属性,通过lsattr查看
[root@liruilong ~]# chattr -a test.sh
[root@liruilong ~]# lsattr test.sh
---------------- test.sh

文件系统挂载熟悉

mount 挂载属性

  • noexec: 不可执行程序
  • noatime: 不更新文件的访问时间

noexec:
挂载设备时,添加此选项,则此设备中的所有程序均不可被执行(例如:病毒或木马)
noatime:
计算机中的文件都有访问时间(atime),修改时间(mtime);
挂载设备时,添加此选项,则所有文件的访问时间都不再被更新;
如果计算机中的a文件被用户访问,则a文件的atime就会被修改,对于web服务器而言,会有成千上万的
用户访问网页,则这个网页的atime就会被频繁修改,会消耗大量的CPU资源,需要在挂载的时候使用

#########boot分区挂载示例,其他挂载方法类似
[root@liruilong ~]# vim /etc/fstab
UUID=c120742d-5bdf-48c3-b830-3bfb3e796009 /boot xfs
defaults,noexec,noatime 0 0
###-o remount 重新挂载,让配置生效
[root@liruilong ~]# mount -o remount /boot/
###查看挂载的属性,/boot分区下,有了noexec,noatime
[root@liruilong ~]# mount
......
/dev/sda1 on /boot type xfs (rw,noexec,noatime,attr2,inode64,noquota)
......
#####定义一个不断输出a的脚本,赋予x执行权限,却无法运行
[root@liruilong ~]# vim /boot/test.sh
#!/bin/bash
while :
do
echo a
done
##必须是在/boot/目录下,执行脚本
[root@liruilong ~]# cd /boot
[root@liruilong boot]# chmod +x test.sh
[root@liruilong boot]# ./test.sh
-bash: ./test.sh: 权限不够

程序和服务控制

  • 禁用非必要的系统服务: 使用systemctl、chkconfig (centos6使用) 工具
  • 可选服务列表(选择进行关闭)
可选服务列表
cups.service 打印服务
postfix.service 邮件服务
NetworkManager.service 网络管理服务(network可以替代)
firewalld 防火墙 (iptables可以替代)
atd.service 一次性计划任务(crond可以替代)
bluetooth.service 蓝牙服务
autofs.service 自动挂载
pcscd.service 智能卡设备资源管理器
#####停止服务,并设置为开机不会自动启动
[root@liruilong ~]# systemctl stop firewalld
[root@liruilong ~]# systemctl disable firewalld

二、用户切换与提权

su切换用户身份

切换与提权的应用场景

  • 切换用户身份,When?:SSH远程管理/运维测试
  • 提升执行权限,when?:管理权限细分

su切换的基本用法:Substitube User,换人

  • 快速切换为指定的其他用户
  • 普通用户执行时,需验证目标用户的口令
  • root执行时,无需验证口令

命令格式

  • 用法1:su [-] [目标用户]
  • 用法2:su [-] -c “命令” [目标用户]

su操作示例

从普通用户切换为root,并登录新Shell环境,执行 su -,或者su - root,不指名目标用户时,默认视为root

#####创建新的用户jerry,并设置密码为123456
[root@liruilong ~]# useradd jerry
[root@liruilong ~]# echo 123456 | passwd --stdin jerry
更改用户 jerry 的密码 。
passwd:所有的身份验证令牌已经成功更新。
###从root用户切换到jerry用户
[root@liruilong ~]# su - jerry
###查看当前当前登录的用户身份为jerry,普通用户的权限很低
[jerry@liruilong ~]$ whoami
jerry
[jerry@liruilong ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[jerry@liruilong ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[jerry@liruilong ~]$ exit #退出jerry用户登录状态
logout
#####创建新的用户tom,并设置密码为123456
[root@liruilong ~]# useradd tom
[root@liruilong ~]# echo 123456 | passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
###从root用户切换到jerry用户,管理员切换成普通用户身份不需要密码
[root@liruilong ~]# su - jerry
上一次登录:二 818 10:21:41 CST 2020pts/0 上
###从jerry用户切换到tom用户,普通用户身份的切换需要输入密码
[jerry@liruilong ~]$ su - tom
Password: #输入tom用户的密码
[tom@liruilong ~]$ exit #退出tom用户的登录
logout
[jerry@liruilong ~]$ exit #退出jerry用户的登录
logout
###从root用户切换到jerry用户,管理员切换成普通用户身份不需要密码
[root@liruilong ~]# su - jerry
上一次登录:二 818 10:23:02 CST 2020pts/0 上
###su - 后面不跟用户,则默认是切换到root用户下
[jerry@liruilong ~]$ su -
Password: #输入管理员root的密码
Last login: Tue Aug 18 10:23:53 CST 2020 on pts/0
[root@liruilong ~]# exit #退出,回到jerry用户下
[jerry@liruilong ~]$ exit #退出,回到最出的root解释器下

root以指定的普通用户身份执行任务:以用户tom的身份创建目录,以用户tom的身份执行管理员操作会出错

###-c 以普通用户jerry的身份执行一条命令
[root@liruilong ~]# su - jerry -c "touch /tmp/test.txt"
##查看文件的属性
[root@liruilong ~]# ll /tmp/test.txt
-rw-rw-r-- 1 jerry jerry 0 818 10:25 /tmp/test.txt
####错误,普通用户没有权利去重启sshd服务
[root@liruilong ~]# su - tom -c "systemctl restart sshd"
Error creating textual authentication agent:
......

分析su切换的使用情况:安全日志 /var/log/secure,记录su验证、Shell开启与关闭

[root@liruilong ~]# tail -4 /var/log/secure
Aug 18 10:25:03 localhost su: pam_unix(su-l:session): session opened for user
jerry by root(uid=0)
Aug 18 10:25:03 localhost su: pam_unix(su-l:session): session closed for user
jerry
Aug 18 10:40:50 localhost su: pam_unix(su-l:session): session opened for user
tom by root(uid=0)
Aug 18 10:40:51 localhost su: pam_unix(su-l:session): session closed for user
tom

sudo 提升执行权限

sudo提权的基本用法

  • Super or another Do,超级执行:管理员预先为用户设置执行许可,被授权用户有权执行授权的命令,验证自己的口令
  • 执行提权命令: 用法: sudo 提权命令
  • 查看提权命令: 用法:sudo -l

在这里插入图片描述

配置sudo提权

修改方法

  • 推荐:visudo
  • 其他:vim /etc/sudoers ---> wq!(强制保存并退出)授权记录格式`

在这里插入图片描述

用户或组
#指定给特定用户授权或者组(多个用户属于一个组)
#指定给组授权时,组的前面必须加 %,例如:%wheel

主机列表
#允许哪些客户机可以通过这个用户登录本机去执行命令,例如:ALL(指所有客户机)
提权身份
#给第一列的用户赋予权限,例如:(root)

[NOPASSWD]:命令列表 #前半部分是不需要密码执行命令;后半部分是要执行的命令,且;命令要写绝
对路径

%wheel ALL=(root) ALL #给wheel组中的所有用户,赋予root的权限,让其可以在任何主机上以root的身份去执行任何命令

在这里插入图片描述

允许mike以root权限执行 /sbin/ 下的所有命令,但是,禁止修改eth0网卡的参数

/sbin/* #模糊匹配,/sbin/下的所有命令都可以用sudo提权使用
!/sbin/ifconfg etho #! 代表取反,该命令不能被sudo提权使用
####sudo 提权,让普通用户jerry可以执行systemctl restart sshd 命令
[root@liruilong ~]# id jerry
uid=1002(jerry) gid=1002(jerry)=1002(jerry)
####通过which命令,获取systemctl的绝对路径
[jerry@liruilong ~]# which systemctl
/bin/systemctl
###最后一行追加,允许jerry用户,可以以任何人的身份,从任何客户端,执行此命令
##立刻生效
[root@liruilong ~]# visudo
......
jerry ALL=(ALL) /usr/bin/systemctl
######测试,验证
##切换到jerry用户下
[root@liruilong ~]# su - jerry
上一次登录:二 818 10:50:16 CST 2020pts/0 上
####使用sudo提权命令,重启sshd服务
[jerry@liruilong ~]$ sudo systemctl restart sshd
[sudo] password for jerry: ##jerry用户密码:123456
Sorry, try again.
###sudo -l 查看jerry用户可以执行的sudo提权命令
[jerry@liruilong ~]$ sudo -l
......
User jerry may run the following commands on liruilong:
(ALL) /usr/bin/systemctl

wheel组的用户无需验证可执行所有命令

####通过which命令,获取parted分区命令的绝对路径
[root@liruilong ~]# which parted
/usr/sbin/parted
###最后一行追加,允许tom用户,可以以任何人的身份,从任何客户端,无密码使用parted命令
##立刻生效
[root@liruilong ~]# visudo
......
jerry ALL=(ALL) /usr/bin/systemctl
tom ALL=(ALL) NOPASSWD:/usr/sbin/parted
######测试,验证
##切换到tom用户下
[root@liruilong ~]# su - tom
上一次登录:二 818 10:40:50 CST 2020pts/0 上
##sudo提权后,tom用户下,查看磁盘/dev/sda的分区情况
[tom@liruilong ~]$ sudo parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 21.5GB 20.4GB primary lvm
[tom@liruilong ~]$ exit #退出tom用户登录

分析sudo提权的使用情况: 修改全局配置,启动日志Defaults logfile="/var/log/sudo"

##########修改全局配置,启动的日志,该日志记录sudo提权的使用情况
##最后一行添加:Defaults logfile="/var/log/sudo"
[root@liruilong ~]# visudo
......
jerry ALL=(ALL) /usr/bin/systemctl
tom ALL=(ALL) NOPASSWD:/usr/sbin/parted
Defaults logfile="/var/log/sudo"
########验证日志信息,需先执行一次提权命令
[root@liruilong ~]# su - tom
上一次登录:二 818 10:56:52 CST 2020pts/0 上
##sudo提权后,tom用户下,查看磁盘/dev/sda的分区情况
[tom@liruilong ~]$ sudo parted /dev/sda print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 21.5GB 20.4GB primary lvm
[tom@liruilong ~]$ exit #退出tom用户的登录状态
######查看日志,看看sudo提权的使用信息
[root@liruilong ~]# cat /var/log/sudo
Aug 18 13:02:12 : jerry : TTY=pts/0 ; PWD=/home/jerry ; USER=root ;
COMMAND=/bin/systemctl restart sshd
Aug 18 13:18:34 : tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ;
COMMAND=/sbin/parted /dev/sda print

三、sshd访问控制

SSH基本防护

SSH防护概述

  • 存在的安全隐患
    • 密码嗅探、键盘记录
    • 暴力枚举账号、猜解密码
  • 常见的防护措施
    • 用户限制、黑白名单
    • 更改验证方式(密码 --> 密钥对)
    • 防火墙…

sshd基本安全配置

配置文件 /etc/ssh/sshd_config

  • Port 3389 //改用非标准端口
  • ListenAddress 192.168.168.174
  • PermitrootLogin //禁止root登录
#####修改ssh配置时,先备份sshd主配置文件
[root@liruilong ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
####修改虚拟机ssh远程连接得端口为3389
[root@liruilong ~]# vim /etc/ssh/sshd_config
17 Port 3389
##重启sshd服务
[root@liruilong ~]# systemctl restart sshd
#xshell测试使用ssh远程时必须加端口号3389
[c:\~]$ ssh root@192.168.2.100 3389
####用户只能通过192.168.2.100这个IP地址远程liruilong这台虚拟机
[root@liruilong ~]# vim /etc/ssh/sshd_config
20 ListenAddress 192.168.2.100
##重启sshd服务,虚拟机新添加网卡配置其他IP地址测试
[root@liruilong ~]# systemctl restart sshd
#xshell测试使用ssh远程时必须加端口号3389
[c:\~]$ ssh root@192.168.2.100 3389
#####禁止root远程登录虚拟机liruilong
[root@liruilong ~]# vim /etc/ssh/sshd_config
38 PermitRootLogin no
##重启sshd服务,xshell使用root远程登录liruilong失败
[root@liruilong ~]# systemctl restart sshd
#####xshell以普通用户jerry的身份可以登录liruilong虚拟机
##使用su -切换成root身份,或者使用sudo提权命令
[c:\~]$ ssh jerry@192.168.2.100 3389 #密码123456
[tom@liruilong ~]$
[tom@liruilong ~]$ su - root #su - 切换root用户
密码: #输入root密码
[root@liruilong ~]#
  • 配置文件 /etc/ssh/sshd_config
    • UseDNS no //不解析客户机地址
    • LoginGraceTime 1m //登录限时
    • MaxAuthTries 3//每连接最多认证次数

UseDNS no #不对客户机进行域名解析,访问网站的普通用户是没有域名的,不需要解析
LoginGraceTime 1m #用户在ssh远程服务器时,如果1分钟内用户没有输入用户名和密码,则断开连接

#########举例演示
##登录限时修改为10s,真实环境需要长一点
[root@liruilong ~]# vim /etc/ssh/sshd_config
37 LoginGraceTime 10s
115 UseDNS no
##重启sshd服务
[root@liruilong ~]# systemctl restart sshd
###使用xshell远程连接时,不输入密码,等待10s中,会出现连接关闭的提示
[c:\~]$ ssh jerry@192.168.2.100 3389
Connection closing...Socket close.

MaxAuthTries 3 : #用户远程服务器时,密码错误,可以尝试多少次

#这里的3不是指的3次,是一个概数,需要不断尝试错误连接,来得出这里得数字
#########举例演示
##修改连接认证次数为3
[root@liruilong ~]# vim /etc/ssh/sshd_config
40 MaxAuthTries 3
##重启sshd服务
[root@liruilong ~]# systemctl restart sshd
##使用xshell远程连接,输入错误密码,输入两次就会出现连接端口的提示
[c:\~]$ ssh jerry@192.168.2.100 3389
Connection closing...Socket close.

ssh经常一段时间就断掉解决办法去掉注释,改成

vim /etc/ssh/sshd_config

ClientAliveInterval 30
ClientAliveCountMax 86400

这两行的意思分别是

  1. 、客户端每隔多少秒向服务发送一个心跳数据
  2. 、客户端多少秒没有相应,服务器自动断掉连接

重启sshd服务

#service sshd restart
  • sshd黑/白名单配 配置文件 /etc/ssh/sshd_config
    • DenyUsers USER1 USER2 …
    • AllowUsers USER1@HOST USER2 …
    • DenyGroups GROUP1 GROUP2 …
    • AllowGroups GROUP1 GROUP2 …
#####设置黑白名单时,如果要允许或拒绝多个用户,用户之间以空格作为分隔符
DenyUsers #设置黑名单,拒绝某些用户登录本机
AllowUsers #设置白名单,允许某些用户登录本机
DenyGroups #设置黑名单,拒绝一个或多个用户组登录本机
AllowGroups #设置白名单,允许一个或多个用户组登录本机
AllowUsers USER1@HOST #设置白名单,允许用户USER1从HOST这台主机登录本机

应用示例:仅允许一部分用户(从指定地点)登入,其他任何用户均禁止登入

####使用xshell让用户jerry使用3389端口登录
[c:\~]$ ssh jerry@192.168.2.100 3389
[jerry@liruilong ~]$ su - root #切换为root身份
[jerry@liruilong ~]#
#######设置白名单,仅允许tom可以ssh远程登录服务器,其他任何用户都无法登录
##如果设置的是白名单,则不需要设置黑名单了,默认是拒绝其他用户远程登录
[root@liruilong ~]# vim /etc/ssh/sshd_config
42 AllowUsers tom
##重启sshd服务
[root@liruilong ~]# systemctl restart sshd
######xshell远程测试
##jerry无法再登录了
[c:\~]$ ssh jerry@192.168.2.100 3389 #登录密码123456
##tom用户可以远程登录
[c:\~]$ ssh tom@192.168.2.100 3389 #登录密码 123456
[tom@liruilong ~]$

```bash
#######设置黑名单,仅拒绝tom通过ssh远程登录服务器,其他用户都允许
[root@liruilong ~]# vim /etc/ssh/sshd_config
42 DenyUsers tom
##重启sshd服务
[root@liruilong ~]# systemctl restart sshd
######xshell远程测试
##tom无法再登录了
[c:\~]$ ssh tom@192.168.2.100 3389 #登录密码123456
##jerry用户可以远程登录
[c:\~]$ ssh jerry@192.168.2.100 3389 #登录密码 123456
[tom@liruilong ~]$
#######设置黑名单,拒绝用户tom从IP地址为192.168.2.1的主机,来远程服务器svr7
[root@svr7 ~]# vim /etc/ssh/sshd_config
42 DenyUsers tom@192.168.2.1
##重启sshd服务
[root@svr7 ~]# systemctl restart sshd

SSH密钥对验证

sshd验证方式控制

  • 口令验证::检查登录用户的口令是否一致:密码验证:#当windows被攻击,系统被植入木马,容易被攻击者从键盘记录等方式中获取密码
  • 密钥验证:检查客户端私钥与服务器上的公钥是否匹配:密钥验证:#密钥验证的安全度很高;#不会有输入密码的过程,键盘工具方式无效;
  • PasswordAuthentication yes #ssh支持密码验证
47 AuthorizedKeysFile .ssh/authorized_keys ##指定公钥的存放位置,在用户的家目录
下的.ssh目录中的authorized_keys文件中

密钥对验证的实现思路

在这里插入图片描述

  • 第一步:客户机创建密钥对,私钥文件:id_rsa 公钥文件: id_rsa.pub;
  • 第二步: 客户机上传公钥到服务器上用户的家目录下 ./ssh/authorized_keys文件;
    ssh-copy-id 命令,会自动将公钥放到指定用户家目录的对应文件中

创建SSH密钥对:使用工具 ssh-keygen

  • 可以手动指定加密算法(-t rsa 或 -t dsa)
  • 若不指定,默认采用RSA加密
######非交互的方式创建密钥对
[root@svr7 ~]# ssh-keygen -N '' -f /root/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+pb7aZI5xtlulc1Z3MQjjsNGLu5mbCHxU5JfPtWOe+w root@svr7
The keys randomart image is:
+---[RSA 2048]----+
| . |
| . . .o|
| = o .o+|
| . + B o .=|
| S * ++.= |
| o = .oo= .|
| ..+*o. .o |
| .@*+. . o|
| o*O+ oE|
+----[SHA256]-----+
###密钥对会生成在/root/.ssh/目录下
[root@svr7 ~]# ls /root/.ssh/
id_rsa id_rsa.pub known_hosts

部署SSH公钥

#方法一:将公钥通过ssh-copy-id放到192.168.2.200的服务器上
[root@svr7 ~]# ssh-copy-id root@192.168.2.200
#查看公钥文件的保存路径
[root@client ~]# ls /root/.ssh/
authorized_keys

四、加密与解密

加解密概述

加密目的及方式

  • 确保数据的机密性对称加密:
    • 加密/解密用同一个密钥
    • 非对称加密:加密/解密用不同的密钥(公钥、私钥)
  • 保护信息的完整性(常用于做数据完整性校验)
    • 信息摘要:基于输入的信息生成长度较短、位数固定的散列值

常见的加密算法

  • 对称加密
    • DES,Data Encryption Standard
    • AES,Advanced Encryption Standard
  • 非对称加密
    • RSA,Rivest Shamirh Adleman
    • DSA,Digital Signature Algorithm
  • Hash散列技术,用于信息摘要
    • MD5, Message Digest Algorithm 5 : 根据输入的文本(长度不限) ,生成固定长度(比如128位)的摘要文本
    • SHA, Secure Hash Algorithm1 : 只要输入的文本不同,则生成的摘要文本也不一样

MD5完整性检验

  • 使用md5sum校验工具
    • 生成MD5校验值
    • 与软件官方提供的校验值比对

在这里插入图片描述

GPG加解密厂具

GnuPG简介

GnuPG,GNU Privacy Guard : http://www.gnupg.org/ 最流行的数据加密、数字签名工具软件

########查看gpg的版本,以及支持的算法
[root@node1 ~]# gpg --version
gpg (GnuPG) 2.0.22
libgcrypt 1.5.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
支持的算法:
公钥:RSA, ?, ?, ELG, DSA
对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。