# env
[工具] Shell 批量检查多个远程服务器的多个用户信息
介绍
基本信息
作者:朱明宇
名称:批量检查多个远程服务器的多个用户信息
作用:批量检查多个远程服务器的多个用户信息
使用方法
1. 将此脚本和清单 $serveraccountfile 文件放在同一目录下
2. 清单 $serveraccountfile 里每个服务器名和用户名以空格相隔占用 1 行
3. 给脚本分割线里的变量赋值
4. 给此脚本添加执行权限
5. 执行此脚本
脚本分割线里的变量
serveraccountfile=serveraccountfile.txt #记录服务器名和用户名的清单,每个服务器名和用户名以空格相隔占用 1 行
command=”chage -l” #检查用户信息的命令
注意
此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器,并且可以通过 sudo 获得 su 的 root 权限
脚本
#!/bin/bash
####################### Separator ########################
serveraccountfile=serveraccountfile.txt
command="chage -l"
####################### Separator ########################
sumline=$(cat $serveraccountfile | wc -l)
for i in $(seq 1 $sumline)
do
servername=$(sed -n $[i]p $serveraccountfile | awk '{print $1}')
accountname=$(sed -n $[i]p $serveraccountfile | awk '{print $2}')
ssh $servername "sudo su - root -c \"$command $accountname\""
done
[步骤] Linux SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm) 的设置 (Ciphers 参数、MACs 参数和 KexAlgorithms 参数的设置) (RHEL 8 版)
正文:
步骤一:确定 CRYPTO_POLICY 参数没有生效
# vim /etc/sysconfig/sshd
确保部分内容如下:
......
# CRYPTO_POLICY=
......
步骤二:在 /etc/crypto-policies/back-ends/opensshserver.config 配置文件中确认要使用的 Ciphers、MACs 和 KexAlgorithm 参数
2.1 备份 /etc/crypto-policies/back-ends/opensshserver.config 配置文件
# cp /etc/crypto-policies/back-ends/opensshserver.config /etc/crypto-policies/back-ends/opensshserver.config.backup
2.2 修改 /etc/crypto-policies/back-ends/opensshserver.config 配置文件
# vim /etc/crypto-policies/back-ends/opensshserver.config
添加需要使用的 SSH 算法 (algorithms) 和加密方式 (ciphers):
(内容略)
(注意:如果需要使用的 SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm) ,已包含在其中了则可以不用添加)
2.3 显示目前正在被使用的 SSH 算法 (algorithms) 和加密方式 (ciphers)
# printf "%s\n" $(source /etc/crypto-policies/back-ends/opensshserver.config; echo $CRYPTO_POLICY) | cut -c3-
Ciphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc
MACs=hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512
GSSAPIKexAlgorithms=gss-curve25519-sha256-,gss-nistp256-sha256-,gss-group14-sha256-,gss-group16-sha512-,gss-gex-sha1-,gss-group14-sha1-
KexAlgorithms=curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
HostKeyAlgorithms=ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com
PubkeyAcceptedKeyTypes=ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com
CASignatureAlgorithms=ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-256,rsa-sha2-512,ssh-rsa
(补充:这里以显示 RHEL 8 默认使用的 SSH 加密方式 (cipher)、信息验证代码 (message authentication code) 和算法 (algorithm) 为例)
步骤三:让在 /etc/crypto-policies/back-ends/opensshserver.config 配置文件中添加要使用的 SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm) 生效
# systemctl restart sshd
步骤四:测试 SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm)
4.1 测试 SSH 加密方式 (ciphers)
4.1.1 测试某个 SSH 加密方式 (cipher)
# ssh -vv -oCiphers=3des-cbc -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 3des-cbc SSH 加密方式 (cipher) 为例)
4.1.2 测试多个 SSH 加密方式 (cipher)
# ssh -vv -oCiphers=3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 3des-cbc、aes128-cbc、aes192-cbc 和 aes256-cbc SSH 加密方式 (cipher) 为例)
4.2 测试 SSH 信息验证代码 (message authentication code)
4.2.1 测试某个 SSH 信息验证代码 (message authentication code)
# ssh -vv -oMACs=hmac-md5 -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 hmac-md5 SSH 信息验证代码 (message authentication code) 为例)
4.2.2 测试多个 SSH 信息验证代码 (message authentication code)
# ssh -vv -oMACs=hmac-md5,hmac-md5-96,hmac-sha1,hmac-sha1-96,hmac-md5-etm@openssh.com,hmac-md5-96-etm@openssh.com -oPort=22 192.168.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22,有没有启用 hmac-md5、hmac-md5-96、hmac-sha1、hmac-sha1-96、hmac-md5-etm@openssh.com 和 hmac-md5-96-etm@openssh.com SSH 信息验证代码 (message authentication code) 为例)
4.3 显示所有在使用的 SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm)
4.3.1 使用 sshd 命令显示所有在使用的加密方式 (cipher) 、信息验证代码 (message authentication code)
# sshd -T | egrep -i "ciphers|macs"
4.3.2 使用 nmap 命令显示所有在使用的 SSH 加密方式 (cipher) 、信息验证代码 (message authentication code) 和算法 (algorithm)
# nmap --script ssh2-enum-algos -sV -p 22 127.0.0.1
(补充:这里以测试 IP 地址是 192.168.0.1,端口号是 22 为例)
参考文献:
https://access.redhat.com/solutions/4410591
https://access.redhat.com/solutions/4278651
[内容] Linux 功能的限制
正文:通过 /etc/security/access.conf 文件实现 Linux 功能使用的限制
# vim /etc/security/access.conf
添加以下内容:
......
+ : root : LOCAL
+ : zhumingyu : ALL
+ : @cron : ALL
- : ALL : ALL
(
补充:这里以
1) 允许 root 用户使用本地的所有功能
2) 允许 zhumingyu 用户使用所有功能
3) 允许 cron 功能被所有用户使用
4) 其它所有的功能或用户都被禁止
为例
)
补充:使 /etc/security/access.conf 文件的配置失效
# vim /etc/pam.d/crond
将部分内容修改如下:
......
#account required pam_access.so
......
[步骤] Linux 内核的修复
步骤一:挂载官方镜像
(步骤略)
步骤二:登录拯救模式
2.1 选择通过光盘启动
(步骤略)
2.2 进入拯救模式
(步骤略)
2.3 登录拯救模式
rescue login:root
步骤三:在救援模式确定系统的根 “/” 目录分区
(步骤略)
(
补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定
)
步骤四:在救援模式将系统的分区挂载到救援模式的 /mnt 目录
4.1 在救援模式将系统的根 “/” 分区挂载到救援模式的 /mnt 目录
tty1:rescue:~ # mount <root spartition> /mnt
(
补充:
1) 如果是物理分区,系统的根 “/” 分区就在救援模式的 /dev/ 目录里,例如救援模式的 /dev/sda1
2) 如果是逻辑分区,Rocky Linux & RHEL 的系统根 “/” 分区就是救援模式里的 /dev// 例如救援模式里的 /dev/vg/lv,openSUSE & SLES 的系统根 “/” 分区就是救援模式里的 /dev/mapper/- 例如救援模式里的 /dev/mapper/vg-lv
)
4.2 在救援模式将救援模式的 /dev 目录关联到救援模式的 /mnt/dev 目录
tty1:rescue:~ # mount --rbind /dev /mnt/dev
(
补充:
1) 此时所有对救援模式的 /mnt/dev 目录的访问都会变成对救援模式的 /dev 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:
tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done
)
4.3 在救援模式将救援模式的 /proc 目录关联到救援模式的 /mnt/proc 目录
tty1:rescue:~ # mount --rbind /proc /mnt/proc
(
补充:
1) 此时所有对救援模式的 /mnt/proc 目录的访问都会变成对救援模式的 /proc 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:
tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done
)
4.4 在救援模式将救援模式的 /sys 目录关联到救援模式的 /mnt/sys 目录
tty1:rescue:~ # mount --rbind /sys /mnt/sys
(
补充:
1) 此时所有对救援模式的 /mnt/sys 目录的访问都会变成对救援模式的 /sys 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:
tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done
)
4.5 在救援模式将救援模式的 /run 目录关联到救援模式的 /mnt/run 目录 (选做)
tty1:rescue:~ # mount --rbind /run /mnt/run
(补充:此时所有对救援模式的 /mnt/run 目录的访问都会变成对救援模式的 /run 目录的访问)
步骤五:将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录
5.1 将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录
tty1:rescue:~ # chroot /mnt
(补充:这里以 /mnt 作为系统根 “/” 目录为例)
5.2 在系统模式挂载所有需要开机自动挂载的目录
bash-4.3# mount -a
5.3 在系统模式确认当前根 “/” 目录下的目录
bash-4.3# ls
bin boot dev home lib lib64 mnt opt proc root run sbin selinux srv sys tmp usr var
(补充:这里显示的是常见的 Linux 根 “/” 目录 下的目录)
步骤六:重装 /boot 目录
6.1 在救援模式创建 /mnt/bin 目录
tty1:rescue:~ # mkdir /mnt/bin
6.2 在救援模式挂载官方镜像
6.2.1 在救援模式创建用于挂载镜像的 /media 目录
tty1:rescue:~ # mkdir /media
6.2.2 在救援模式挂将官方镜像挂载到 /media 目录
tty1:rescue:~ # mount /dev/dvd /media
6.3 在救援模式安装 kernel-default 软件
6.3.1 在救援模式拷贝 kernel-default 的 RPM 文件 (软件包) 到当前目录
tty1:rescue:~ # cp /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm .
(补充:这里以拷贝 /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm 为例)
6.3.2 在救援模式安装 kernel-default 的 RPM 文件 (软件包)
tty1:rescue:~ # rpm -ivh kernel-default-3.10.0-693.el7.x86_64.rpm
(补充:这里以安装 /media/suse/x86_64/kernel-default-3.10.0-693.el7.x86_64.rpm 为例)
6.4 将 GRUB2 安装到对应硬盘
6.4.1 在系统模式确定系统的 GRUB2 目录分区
(步骤略)
(
补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定
)
6.4.2 在系统模式修复 GRUB2
bash-4.3# grub2-install <disk which GRUB2 in>
6.5 生成 /boot/grub2/grub.cfg
bash-4.3# grub2-mkconfig -o /boot/grub2/grub.cfg
步骤七:重启系统
7.1 从当前系统的根 “/” 目录切换回救援模式的根 “/” 目录
bash-4.3# exit
7.2 重启系统
tty1:rescue:~ # reboot
补充:boot 分区的文件系统损坏的情况
如果以上步骤都不起作用,且 /boot 是单独分区的话,则可能是 boot 分区的文件系统损坏,可以尝试以下补充:
1) 重复本文步骤五和之前步骤的内容
2) 将 /boot 目录里的内容全部拷贝出来
3) 取消挂载 /boot 目录的分区
4) 将挂载 /boot 目录的分区重新格式化成 ext4 格式
5) 格式化后分区的 UUID 会改变,所以需要更新 /etc/fstab 文件中挂载 /boot 目录分区的 UUID
6) 将格式化后的分区重新挂载 /boot 目录
7) 将刚刚从 /boot 目录拷贝出来的内容拷贝回 /boot 目录
8) 重复此文的步骤六
(注意:不建议使用 Btrfs 文件系统给 /boot 目录分区)
参考文献:
https://www.suse.com/support/kb/doc/?id=000018770