PythonはLinuxシステムのrootアカウントのパスワードを動的に更新し、通知SMSを送信します

 

        ## PythonはLinuxシステムのrootアカウントのパスワードを動的に更新し、通知メッセージを送信します 

あり、我々はより高いセキュリティを必要とするかもしれないいくつかの時間が主流のオペレーティングシステムとして、Linuxサーバは、システム全体のセキュリティを確保するために、頻繁な交換システムのrootアカウントのパスワードを要求され、パスワードの重要性は自明です。次に、設定したパスワードが複雑なために忘れてしまうことがあります。そのため、システムルートパスワードを動的に更新し、SMSを送信してシステム管理者に通知する必要があります。この機能を実現するために、以下の側面から進んでください。
まず、システムはシェルスクリプトを使用してパスワードを自動的に変更できるため、シェルスクリプトを使用してパスワードを更新するには、最初にランダムパスワードジェネレータが必要です。
次に、システム管理者が問い合わせるために、更新されたパスワードを記録する必要があります。
第3に、更新中に、パスワードを含み、パスワードが更新されたことを通知するショートメッセージ通知サービスを介してシステム管理者にショートメッセージを送信します。
上記の3つの分析ポイントに基づいて、スクリプト、コードブック、および一連のSMS通知サービスが必要であり、これらすべてをサーバーに実装できると結論付けました。以下で説明します。

    Linuxは強力な主流機能を備えたサーバーであることは言うまでもありません。その中には、システムに付属するパスワードを生成する方法がたくさんあります。1つはurandomを使用する方法、もう1つはOpenSSLを使用する方法です。

  •  `openssl rand -base64 12、このコマンドはLinuxで長さ12のランダムな文字列を生成でき、この値をパスワードとして使用できます。暗号化方式はbase64として指定されています。

  • openssl rand hex 12

  • このコマンドは、特殊文字を含む12ビットのランダムな文字列を生成します。暗号化形式は16進数です。

  • openssl rand hex 12-outパスワード

  • 12ビットの16進暗号化パスワードを生成し、passwordという名前のファイルに書き込みます

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

  • 猫/ 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 >>パスワード

このようにして、大文字と小文字、および長さ12の数字で構成されるパスワードが切り取られ、リダイレクトされて、password
==================という名前のファイルに書き込まれます。================================================== ================================================== ================================= ================= ================================= ================= ========

最初と2番目のステップが完了したので、これらをスクリプトにマージする必要があります。スクリプト名変更を呼び出すだけです。

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内



「========================================
次はオンラインのSMS通知サービスです多くのSMS通知サービスを比較したところ、Hazelnut SMSサービスの方が使いやすく、すぐに使用できることがわかりました。以下のURLを投稿してください。
http://sms_developer.zhenzikj.com/zhenzisms_user/login.#html、このURLで登録した後、SMSプラットフォームに
アクセスして、システムによって生成されたak、つまりアクセスコードとシークレットコードを確認する必要があります。 、およびこれら2つのコードは後で#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はSMS通知のクライアントファイルです。インポートされる最初のパッケージはSMSサーバーファイルです。2番目のパッケージはosです。パスワードを確認してメッ​​セージを送信するにはパスワードブックを開く必要があるため、3番目のパッケージは時間です。パッケージ。、シェルスクリプトを開始した後、5秒間待ってパスワードブックを同期し、最新のパスワードが取得されていることを確認します。中国語の部分は変更される場所です。上記のakコードはHazelのWebサイトで入手できます。(Hazel SMSプラットフォームは有料です。10元で200以上のSMSメッセージを送信できます。充電すると体力が増しますか?)

これらの4つのファイルmessage.py、password、change.sh zhenzismsclient.pyは単一のフォルダーに配置され、message.pyファイルが開始されるたびにmessage.pyファイルのパスワードが更新されます。同時に、更新されたパスワードはシステム管理者の携帯電話にプッシュされます。、Linuxシステムのスケジュールされたタスクのcrontabを使用して更新戦略を設計できます。

もちろん、このシステムにはまだ改善が必要な多くの領域があります。たとえば、パスワードはテキストではなくデータベースに保存され、パスワードはデータベースへのPython接続を介して読み取られます。4つのファイルはすべて相対パスを使用するため、同じフォルダに配置する必要があります。絶対パスに変更する場合は、changeshファイルとメッセージファイルのパスを1つずつ変更する必要があります。覚えておいてください!初めて使用する場合は、change.shスクリプトを実行し、password.txtファイルをチェックして、更新が成功したかどうかを確認します。

リンク:https 
://pan.baidu.com/s/1rHoNsJCAC-IRQ0h3vv-C8g抽出コード:1uky
 

おすすめ

転載: blog.csdn.net/alwaysbefine/article/details/105656123