Python 动态更新Linux系统root账号密码并发送通知短信

简介: Python 动态更新Linux系统root账号密码并发送通知短信

  ## Python 动态更新Linux系统root账号密码并发送通知短信

些时候我们可能需要比较高的安全,作为服务器的主流操作系统Linux更是需要经常的更换系统账号root密码以保证整个系统的安全,密码的重要性不言而喻。那,有时候会由于自己设置的密码比较复杂而忘记,因此,需要动态的自动更新系统root密码并发送短信提醒系统管理人员。实现这一功能从以下几个方面着手。
第一,系统自动更换密码可以使用shell脚本实现,因此首先需要一个随机的密码生成器,通过shell脚本更新密码。
第二,更新的密码需要记录以供系统管理人员查询。
第三,更新的同时,通过短信通知服务给系统管理人员发送短信,内容包括密码并提醒密码已更新。
根据以上三点分析我们得出需要一个脚本,一个密码本,一套短信通知服务,而这一切都可以在服务器上实现,下面,就来讲解。

   Linux作为服务器的主流功能强大自不必说,其中,系统自带的密码生成方式有很多种,一种是通过urandom,一种是OpenSSL

  • `openssl rand -base64 12,这条命令即可在Linux下生成长度为12的随机字符串,那么,我们取到这个值就可以作为密码了。加密方式指定为是base64。
  • openssl rand hex 12
  • 这个命令生成12位的随机带特殊字符的字符串,加密形式是hex
  • openssl rand hex 12 -out password
  • 生成12位的hex加密的密码并写入一个名字叫password的文件内

=============================================================================================

  • cat /dev/urandom

生成一个无限大的密码,包括特殊符号。想要使用这种方式,需要切割出来随机的需要的个数的字符,例如:

  • cat /dev/urandom |tr -dc 'a-zA-Z0-9' |head -c12

这个命令可以切割出随机的不包括特殊字符的12位字符串,这个就可以作为密码根据自己的密码策略,选择合适的长度,
切割出密码并写入文件

  • cat /dev/urandom |tr -dc 'a-zA-Z0-9'|head -c12 >>password

这样就切割出一个长度12的大小写字母和数字组成的密码,并且重定向写入一个名字为password的文件中

================================================================================================


第一步和第二步已经完成,现在需要把这些合并在一起写入一个脚本中,脚本名称就叫change吧

change.sh

#/usr/bin/bash
echo `cat /dev/urandom|tr -dc 'a-zA-Z0-9' |head -c6`>>password.txt
while read line
do
echo $line | passwd --stdin root > /dev/null
done<$1
#这个脚本是带参数的脚本,在脚本内,参数一般使用$1指定
#这个脚本的功能为在脚本当前目录下生成一个密码文件,然后读取密码文件最后一行
#将root密码静默修改,注意,password.txt文件可以指定路径,名称也可以随意
#注意,第一,密码本也就是password这个文件内容
#不能少于两行,第二,echo命令后跟的是反引号,以把cat命令生成的密码作为字符串存入文件
#改密码的时候为了隐藏输出,重定向到了null内

``========================================

接下来就是短信通知服务,网上比较了很多短信通知服务,发现榛子短信服务比较友好,拿来即用。下面贴网址。
http://sms_developer.zhenzikj.com/zhenzisms_user/login.#html,这个网址注册后,需要到短信平台查看系统生成的
ak,也就是access码和secret码,并且牢记,这两个码稍后会在#Python中用到。

==============================================

zhenzismsclient.py

 

import urllib.request
import urllib.parse
import ssl
class ZhenziSmsClient(object):
  def __init__(self, apiUrl, appId, appSecret):
    self.apiUrl = apiUrl
    self.appId = appId
    self.appSecret = appSecret
  def send(self, number, message, messageId=''):
    data = {
      'appId': self.appId,
      'appSecret': self.appSecret,
      'message': message,
      'number': number,
      'messageId': messageId
    }
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = urllib.request.Request(self.apiUrl+'/sms/send.do', data=data)
    context = ssl._create_unverified_context()
    res_data = urllib.request.urlopen(req, context=context)
    res = res_data.read()
    res = res.decode('utf-8')
    return res
  def balance(self):
    data = {
      'appId': self.appId,
      'appSecret': self.appSecret
    }
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = urllib.request.Request(self.apiUrl+'/account/balance.do', data=data)
    res_data = urllib.request.urlopen(req)
    res = res_data.read()
    return res
  def findSmsByMessageId(self, messageId):
    data = {
      'appId': self.appId,
      'appSecret': self.appSecret,
      'messageId': messageId
    }
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = urllib.request.Request(self.apiUrl+'/smslog/findSmsByMessageId.do', data=data)
    res_data = urllib.request.urlopen(req)
    res = res_data.read()
    return res
#短信平台提供的api接口,使用的是urllib爬虫连接的api

 

message.py

import zhenzismsclient as smsclient
import os
import time
#subprocess.Popen(['start','changepass.sh'],shell=/bin/bash)
os.popen('/usr/bin/bash change.sh password.txt')
print('===============================================')
time.sleep(5)
with open('password.txt','r+') as file:
    lines=file.readlines()
    last=lines[-1]
    print(type(last),last)
client = smsclient.ZhenziSmsClient('https://sms_developer.zhenzikj.com', 'ak码', 'ak码')
print(client.send('需要推送密码的手机号',last))
#这个是主程序入口,也就是说这个系统只需要运行这个文件。

message.py,是短信服务通知的客户端文件,导入的第一个包是短信服务端文件第二个包是os,由于需要打开密码本查看密码并发送短信用,第三个包是time包,在启动shell脚本后给五秒时间同步密码本,保证取得的是最新密码然后。中文部分,是需更改的地方,上面所提到的ak码在榛子的网站内有。(榛子短信平台是收费的,10元钱大概可以发送短信200余次,充钱能使你更强大??)

这四个文件,message.py ,password,change.sh zhenzismsclient.py 统一放在一个文件夹内,每启动一次message.py文件密码就更新一次,同时,更新后的密码推送到系统管理员手机上,可以通过Linux系统的计划任务crontab来设计更新策略。

当然,这个系统还是有很多需要改进的地方,比如说,密码不存入文本,存入数据库中,密码的读取通过Python连接数据库来完成。四个文件一定要放在同一个文件夹内,因为,都是用的相对路径,如果改成绝对路径,需要更改changesh文件和message文件内的路径,并一一对应。切记!!首次使用时要先运行一次change.sh脚本,并检查password.txt文件,看看更新成功没有。

链接:https://pan.baidu.com/s/1rHoNsJCAC-IRQ0h3vv-C8g

提取码:1uky

目录
相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
142 55
|
1月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
64 4
|
8天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
122 78
|
20天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
110 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
12天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
46 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
6天前
|
Linux Python
Linux 安装python3.7.6
本教程介绍在Linux系统上安装Python 3.7.6的步骤。首先使用`yum`安装依赖环境,包括zlib、openssl等开发库。接着通过`wget`下载Python 3.7.6源码包并解压。创建目标文件夹`/usr/local/python3`后,进入解压目录执行配置、编译和安装命令。最后设置软链接,使`python3`和`pip3`命令生效。
|
8天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
60 13
|
1天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
33 5
|
22天前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习的果蔬识别系统实现
果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
35 4
基于Python深度学习的果蔬识别系统实现
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
36 3