[工具] Shell 监控普通登录记录 (排除 SFTP 登录记录只监控普通登录记录)

注意:

在排除 SFTP 登录记录只监控普通登录记录前要先开启 SFTP 日志:

正文:

介绍

基本信息

作者:朱明宇
名称:监控普通登录记录 (排除 SFTP 登录记录只监控普通登录记录)
作用:监控普通登录记录 (排除 SFTP 登录记录只监控普通登录记录)

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本
4. 普通登录记录会同时记录在系统日志和 $logfile 里

脚本分割线里的变量

1. logfile=logfile.txt #用户保存记录的文件
2. prompt=”and no sftp info” #记录里普通登录记录的文件

脚本

#!/bin/bash

####################### Separator ########################

logfile=logfile.txt
prompt="and no sftp info"

####################### Separator ########################

checktime=`date +%Y-%m-%dT%H -d "-1 day"`

for i in `cat -n /var/log/messages | grep $check_time | grep 'Started Session' | grep -v 'root' | awk '{print $1}'`

do
   line=`sed -n $[i]p /var/log/messages`
   time=`echo $line | awk '{print $1}'`
   session=`echo $line | awk '{print $6}'`
   user=`echo $line | awk '{print $9}'`
   user=${user%.}

   message="ACCESS CHECK LOG: Time:$time Session:$session $user has accessed `hostname`, $prompt"

   let sftpline=i+3

   sed -n $[sftpline]p /var/log/messages | grep sftp-server &> /dev/null
   if [ $? -ne 0 ];then
           echo $message
           echo $message >> $logfile.txt
           logger $message
   fi
   echo
done

[步骤] SFTP 日志的开启

# vim /etc/sshd/sshd_config

如果是 CentOS Linux & RHEL,将以下内容:

......
Subsystem       sftp    /usr/libexec/openssh/sftp-server
......

修改为:

......
Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO
......

如果是 openSUSE & SLES, 将以下内容:

......
Subsystem       sftp    /usr/lib/ssh/sftp-server
......

修改为:

......
Subsystem       sftp    /usr/lib/ssh/sftp-server -l INFO
......

(补充:此时当通过 SFTP 登录系统时,系统日志记录文件 /var/log/messages 里登录记录后面会紧跟一行带 sftp-server 的记录)

[步骤] SFTP 的搭建 (限制 SFTP 用户可以进入的目录和禁止 SFTP 用户 SSH 登录版)

步骤一:限制 SFTP 用户可以进入的目录

1.1 限制 SFTP 用户可以进入的目录

# vim /etc/ssh/sshd_config

如果是 RHEL & CentOS Linux,将以下内容:

......
Subsystem       sftp    /usr/libexec/openssh/sftp-server
......

修改为:

......
# Subsystem       sftp    /usr/libexec/openssh/sftp-server
......

如果是 openSUSE & SLES, 将以下内容:

......
Subsystem       sftp    /usr/lib/ssh/sftp-server
......

修改为:

......
# Subsystem       sftp    /usr/lib/ssh/sftp-server
......

并添加以下内容:

......
Subsystem       sftp    internal-sftp
ChrootDirectory /%u
ForceCommand    internal-sftp -m 770
AllowTcpForwarding no
X11Forwarding no


补充:
1) 这里以
SFTP 用户可以进入的目录只能为 /<user>
SFTP 上传的文件默认权限是 770 (-m 770 参数也可以使用 -u 770 替代,但是 -u 参数有时候会不起作用)
为例
2) 其它配置方案可以参考

1.2 让限制 SFTP 用户可以进入的目录的设置生效

# systemctl restart sshd

步骤二:禁止 SFTP 用户 SSH 登录

2.1 创建 SFTP 用户

# useradd sftpuser

(补充:这里以创建名为 sftpuser 的用户为例)

2.2 禁止 SFTP 用户 SSH 登录

# usermod -s /bin/false sftpuser

(补充:这里以将用户 sftpuser 的解释器修改成 /bin/false 为例)

或者:

# usermod -s /sbin/nologin sftpuser

(补充:这里以将用户 sftpuser 的解释器修改成 /sbin/nologin 为例)

2.3 给 SFTP 用户设置密码

# passwd sftpuser

(补充:这里以给 sftpuser 用户设置密码为例)

2.4 创建 SFTP 用户的 SFTP 目录

2.4.1 创建 SFTP 用户的 SFTP 目录
# mkdir /sftpuser

(补充:因为在本文步骤 1.1 中,设置的 SFTP 用户的目录是 /<user>,且在本文步骤 2.1 中创建的用户名是 sftpuser,所以这里的 SFTP 目录是 /sftpuser)

2.4.2 设置此 SFTP 目录的所属主为 root
# chown root: /sftpuser

(注意:SFTP 目录以及所有 SFTP 目录的父目录的所属主必须是 root,权限最高只能是 755 或者 750,否则就算此目录的所属主是此 SFTP 用户,此用户在登录时也会报错)

2.4.3 设置此 SFTP 目录的权限为 755
# chmod 755 /sftpuser

(注意:SFTP 目录以及所有 SFTP 目录的父目录的所属主必须是 root,权限最高只能是 755 或者 750,否则就算此目录的所属主是此 SFTP 用户,此用户在登录时也会报错)