惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园 - 聂微东
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
博客园 - 司徒正美
爱范儿
爱范儿
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
博客园 - 【当耐特】
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
人人都是产品经理
人人都是产品经理
V
V2EX

OSU Open Source Lab

Data Center Migration Update and Fundraising Campaign | OSU Open Source Lab OSL Infrastructure Migration: A Move to Oregon's State Data Center | OSU Open Source Lab Featured: Strong support stabilizes funding for the Open Source Lab | OSU Open Source Lab We're Hiring: Join the OSU Open Source Lab as a Student Systems Engineer! | OSU Open Source Lab Forging Our Future: OSL's Path to Sustainability – A Call for Smart Solutions and Enduring Support | OSU Open Source Lab Future of OSL in Jeopardy | OSU Open Source Lab Now Providing Access to POWER10 for Open Source Projects | OSU Open Source Lab FTP Server Rebuild - March 2024 | OSU Open Source Lab On Leaving the Open Source Lab, Jonathan Frederick | OSU Open Source Lab Reflections on My Time at the Open Source Lab, Travis Whitehead | OSU Open Source Lab OSL Alumnus Matthew Johnson on working at Tesla | OSU Open Source Lab Hiring two DevOps student positions | OSU Open Source Lab TDS Telecom Support of OSU Open Source Lab Tops $5 Million | OSU Open Source Lab Goodbye Letter from Graduating Senior, Cody Holliday | OSU Open Source Lab Mohamed Eldebri on OSL's participation in the Corvallis Maker Fair | OSU Open Source Lab Cody Holliday on the Department of Energy Cyber Defense Competition 2018 | OSU Open Source Lab OSL's Cody Holliday Wins Regional DOE Cyber Defense Competition | OSU Open Source Lab OSL Alumnus Alex Plovi sells CoreOS to RedHat | OSU Open Source Lab Changing the World, One Line of Code at a Time | OSU Open Source Lab Jonathan Frederick on Packer Templates project at the OSL | OSU Open Source Lab Ganeti Production Rebuild - Dec 11-15 & 18-19, 2017 | OSU Open Source Lab Thank You for Supporting our Crowdfunding Campaign! | OSU Open Source Lab A Message from the Director | OSU Open Source Lab New Project: polr | OSU Open Source Lab Donate to Our Crowdfunding Campaign! | OSU Open Source Lab Cody Holliday on Why we should stop using C | OSU Open Source Lab Amanda Kelner on Graduating | OSU Open Source Lab Beaver BarCamp 17: New Horizons | OSU Open Source Lab New Project: libpng Now Mirrored on ftp.osuosl.org | OSU Open Source Lab Network Outage 2016-12-17 Post-mortem | OSU Open Source Lab
Vim Trick FTW! | OSU Open Source Lab
2014-06-11 · via OSU Open Source Lab

Vim Trick FTW!

Recently, I learned a useful Vim trick. One of our hosted clients has a Dokuwiki instance that we help manage, and they were having problems with a lot of spam user accounts being created. We added a CAPCHA to the wiki to make it less convenient for new spammers to join, but there were a lot of bad accounts already existing. By “a lot,” I mean there were 112,808 accounts listed in users.auth.php, and only about a dozen real project personnel using the wiki on a regular basis.

To clean it out, we decided the best course of action would be deleting every account except those with admin privileges, because most of the real humans were in the admin group and those who weren’t could get the project leader to re-add their accounts. The benefit of clearing out a hundred thousand spammers would, in this case, outweigh the inconvenience of manually recreating a couple of real accounts.

It turns out that DokuWiki’s interface isn’t set up to bulk delete users based on group membership – one really shouldn’t get that many spammers in to begin with, so this is an unusual case. However, I’m not forced to use only the graphical interface. DokuWiki’s configurations are stored in .php files in /var/www/wikiname/conf. Each line in users.auth.php represents one user account, and is of the form user:MD5password:Real Name:email:groups,comma,separated.

I was familiar with the Vim command :d/pattern/g to delete all lines containing a pattern, but this time I needed to delete all lines that didn’t have ‘admin’ in them. A little research revealed the command :v/pattern/d, which deletes all lines except those which match the pattern. Since many of the spammers (73 out of our 112,808, but still too many to hand-delete each) were using admin@ email addresses, simply deleting all the lines without ‘admin’ in them wasn’t good enough. Instead, since I know all the users in the admin group have their group permissions in the form “admin,user,” the command that removed everyone except the admin users was :v/admin,user/d.

If you’re newer to the Bash shell, you may be wondering how I got the specific numbers of spammers. I made a backup of the users.auth.php file before deleting users, just in case the client changed their mind. Since DokuWiki had automatically created a users.auth.php.bak, I created my own backup of the users.auth with cp users.auth.php users.auth.php.bak2. Now I can look back at the user list full of spammers and say wc -l users.auth.php.bak2 to count the lines in it (since there’s one account per line) and grep admin@ users.auth.php.bak2 | wc -l to count how many of the former users had admin@ email addresses.