如何自动锁定VSFTP非活跃用户?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者生产环境有台老旧的FTP服务器,用户众多。由于此服务器将退役,因此我们需要识别出上面的非活跃用户并直接锁定。
于是我们整理此文。

2 最佳实践

2.1 创建管理脚本

vim ~/scripts/autoLockUser.sh

加入如下配置,

#!/bin/bash

xferLog="/var/log/xferlog"
xferLogLast="/var/log/xferlog-last"
passwdFile="/etc/passwd"
lockUserLog="/var/log/autoLockUser.log"
keepMonths="6"

if [ -f "$xferLogLast" ]; then
        cat /dev/null > "$xferLogLast"
fi

for i in $(seq $keepMonths -1 0); do
        egrepStr=`date '+... %b .. ..:..:.. %Y' -d "-$i month"`
        egrep "^$egrepStr" "$xferLog" >> "$xferLogLast"
done

users=`cat "$passwdFile" | cut -d":" -f1,6 | egrep -v ":/root|:/usr|:/bin|:/sbin|:/var|:/dev|:/etc|:/$" | cut -d':' -f1`
for user in $users; do
        if [ `id $user 2>&1 | grep "No such user" | wc -l` == 1 ]; then
                continue
        fi
        if [ `egrep " $user " "$xferLogLast" | wc -l` != 0 ]; then
                continue
        fi
        if [ `egrep " $user$" "$lockUserLog" | wc -l` != 0 ]; then
                continue
        fi

        #echo $user
        #continue
        usermod -L "$user"
        passwd -l "$user"
        usermod -s /sbin/nologin "$user"
        echo `date +"%Y-%m-%d %H:%M:%S"`" Locked User $user" >> "$lockUserLog"
done

以上主要参数定义如下,
– 第一个“fox”循环根据“keepMonths”整数值(多少个月)的配置筛选出“xferLog”的最后N个月的日志
– 第二个“fox”循环逐个用户查询它是否有匹配的日志记录,如果没有则执行锁定操作。

2.2 创建脚本触发

crontab -e

加入如下配置,

* * */1 * * sh ~/scripts/autoLockUser.sh
没有评论

发表回复

Bash
如何根据条件输出MySQL表Insert行?

1 前言 一个问题,一篇文章,一出故事。 笔者执行NextCloud的维护任务,需要从数据表中删除用 …

Cisco
如何Linux USB连接Cisco设备的vty端口?

1 前言 一个问题,一篇文章,一出故事。 笔者家里的机柜扩充设备,端口已经不够用了,因此在淘宝掏了一 …

Linux基础
如何将PV分区转换为QCOW2文件?

1 前言 一个问题,一篇文章,一出故事。 笔者今天想将一个系统分区转换成虚拟机的QCOW2文件,于是 …