出于安全的考虑,我们对于有的服务器,必须要采用更高级别的安全策略。比如:当系统有用户登录时能及时发出提醒邮件。
今天考虑用脚本的方式,实现了一个类似的功能,经过测试开算不错,需要注意如下:
一、Linux系统中有一个/etc/bashrc文件,当登录时及每次打开新的shell时,该文件被读取并且执行。所以,我们写入一个如下的脚本:
1
2
|
#vim /etc/bashrc /bin/sh /opt/work/record_loging_user .sh |
二、record_loging_user.sh shell脚本的作用时纪录登录用户的用户名、UID、还有登录IP等相关环境变量,并且出发发送邮件脚本(pymail.py)
1
2
3
4
5
6
7
8
9
|
#!/bin/sh #Record the login user's informations export PATH= '/root/.rbenv/shims:/root/.rbenv/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/app/git/bin' tdate=` date +%F_%T` contents= "DATE:$tdate UID:$UID USERNAME:$USER IP:$SSH_CONNECTION" /usr/bin/python /opt/work/pymail .py <<! $contents exit ! |
三、pymail.py脚本用于通过163的邮箱发送报警邮件。需要注意如下:
1、导入MIMEText、MIMEMultipart模块时,需要通过如下方式导入。否则由于老版本python写法的原因,会报错“ImportError: No module named mime.text”
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
2、用raw_input的方法能够读取整个控制台的输入,这样的做法不必要用python中参数赋值的方式去实现。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/usr/bin/env /opt/python2.7/bin/python #-*- coding: utf-8 -*- import sys import os import re import socket import smtplib, mimetypes from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart #from email.mime.text import MIMEText #if len(sys.argv) != 2: # sys.exit("Input your E-mail message") html_content = raw_input () msg = MIMEMultipart() msg[ 'From' ] = "send@163.com" mailadd = 'iaskjob@163.com' msg[ 'To' ] = ";" .join(mailadd) msg[ 'Subject' ] = "Mail Alarm!-----" if len (html_content) = = 0 : txt = MIMEText( "NULL,This a test email" ) else : txt = MIMEText(html_content, 'html' ) msg.attach(txt) smtp = smtplib.SMTP() smtp.connect( 'smtp.163.com' ) smtp.ehlo() smtp.set_debuglevel( 0 ) smtp.login( 'send@163.com' , 'sendpasswd' ) r = smtp.sendmail( 'renaizhu3@163.com' ,mailadd, msg.as_string())
|