linux pptpd账号同时登录的问题

最近搞了个云主机搭建个VPN服务器给自己用, 特别是在公共场所的wifi上网时, 很多APP, 或者网站是没有https的, 所以为了保证信息(主要是账号密码)的安全, 搭个私有vpn还是很有必要的. 在google上搜索 "linux pptpd配置" 可以找到很多相关的文章, 这里不说怎么搭建了. 这篇文章里主要是讲下同一个账号怎么防止多个用户同时登录使用(因为pptpd默认是可以同时登录的). 至于这个场景, 就是我有时候分配给别人一个vpn账号时不希望在多台电脑上同时使用.

找到"/etc/pptpd.conf"这个文件, 让下面这行生效:

# TAG: logwtmp
#       Use wtmp(5) to record client connections and disconnections.
#
logwtmp

这样的话所有vpn客户端连接到服务的时候, 都会在 /var/log/wtmp 这个文件下记录下用户的登入信息, 这是个二进制文件, 但是我们可以用 last 登令查看:

gg       ppp1         188.118.183.7      Sun Sep  7 00:19 - 00:19  (00:00)
sk       ppp0         193.112.13.7       Sun Sep  7 00:18 - 00:20  (00:01)

从上面我们知道有两个账号, gg 和 sk分别通过 188.118.183.7 和 188.118.183.7 这两个ip登录过. 所以我们这里可以通过用户的登录信息来阻止一个账号同一时刻都处于 still logged in 状态.

接下来, 我们要编辑 /etc/ppp/ip-up 这个文件, 在文件的末尾加上这么一段脚本:

sleep 2
PID=$(cat /var/run/$PPP_IFACE.pid)
if [ $PID ]
 then
    PROCCESS="$(last | grep ppp | grep still | grep $PPP_IFACE)"
    NAME=$(echo $PROCCESS |cut -d‘ ‘ -f1)
    NUMLOGINS="$(last | grep ppp | grep still | grep -c $NAME‘ ‘)"
    if [ $NUMLOGINS -gt 1 ]
        then
        kill $PID
    fi
fi

这里解释下这段脚本的意思. 变量 PPP_IFACE 就是当前登录的进程名称, 所以我们可以通过 /var/run/$PPP_IFACE.pid 找到当前登录用户的进程id号(服务器在每个客户端建立连接后都会用一个单独的进程来处理当前会话), PPP_IFACE一般像是 ppp0, ppp1...pppn这样的形式. 然后我们通过在上面说的 last 命令找出当前连接的用户名, cut -d ‘ ‘ -f1 就是从 last 输出中找到当前的登录用户名, 然后检查当前是否有相同的用户名登录了, 如果存在, 则结束当前的登录进程, 让刚建立起来的连接马上断开.

如果大家有更好的办法不妨留言告诉我下, 谢谢了.

参考: http://stackoverflow.com/questions/4396827/how-to-enable-disable-pptp-multi-login-of-a-same-account-on-linux

时间: 2024-08-08 13:55:11

linux pptpd账号同时登录的问题的相关文章

设置在 Ubuntu 12.04 中使用root 账号进行登录与修改 Linux 系统中的计算机名

3.设置在 Ubuntu 12.04 中使用root 账号进行登录 1.先设定一个 root 的密码,sudo passwd root 2.root 登录,su root 3.备份一下 lightgdm cp -p /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.bak 4.编辑 lightdm.conf sudo gedit /etc/lightdm/lightdm.conf 5.加: greeter-show-manual-login=

Linux系统账号安全控制

一.基本安全1.系统账号清理Linux中账号有root,手工创建的,维护系统运作的,和非登录用户,常见的非登录用户有bin.daemon.adm.mail.nobody.apache.mysql.ftp等,其中一部分很少用到,可以删除,如news.uucp.games.gopher.还有就是应用卸载后残留用户,需管理员手工删除,可以在/etc/passwd中查询grep "/sbin/nologin$" /etc/passwd有长期不使用账号的,不确定是否删除的,可以将用户锁定user

Linux/Centos7账号与权限管理(超详细实例操作)

Linux/Centos7账号与权限管理 管理用户账号.组账号 查询账号信息 设置文件和目录的权限 设置文件和目录的归属 一.前言概述 ? 作为多用户.多任务(Multi-Users,Multi-tasks)的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份.文件权限两个方面对资源进行限制.Linux基于用户身份对资源访问进行控制. 用户账号类别: 超级用户--root,权限最高 普通用户--自定义用户 匿名用户(nobody)类似于Windows中的Guest 程序用户--控

Linux 的账号与群组[转自vbird]

Linux 的账号与群组 管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的, 并且所有一般用户的账号申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个服务器主机的账号啦! 在管理 Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux 主机并不会直接认识你的『账号名称』的,他仅认识 ID 啊 (ID

Red Hat 6.0 Linux系统跳过登录界面直接进入系统

修改/etc/init/tty.conf文件将exec /sbin/mingetty $TTY改为exec /sbin/mingetty --autologin root $TTY 或者修改/etc/inittab文件将3改为1 参考网址: http://zhumeng8337797.blog.163.com/blog/static/10076891420112116236942/ http://zhumeng8337797.blog.163.com/blog/static/1007689142

【Linux系列】【基础版】认识Linux,以及安装登录CentOS

1. 认识Linux,以及安装登录CentOS 1.1 学习方法及工具介绍     1.1.1 定位         1.1.1.1 工作的地点选择,优先选择一线城市,机会多,学习的空间大:         1.1.1.2 目标选择,第一份工作拿多少?两年后呢?         1.1.1.3 合理安排时间         1.1.1.4 学习方法:                 1.1.1.4.1 预习 preview                 1.1.1.4.2 今日事,今日毕 th

linux下MySQL安装登录及操作

linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-client-4.0.16-0.i386.rpm 下载地址为:http://www.mysql.com/downloads/mysql-4.0.html, 打开此网页,下拉网页找到“Linux x86 RPM downloads”项,找到“Server”和“Client programs”项,下载需要的

Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能

第4章 为精简的Linux 系统增加用户登录功能 4.1下载mingetty和login程序源码 本文使用的CentOS 5.11的源代码都在官方源码网站http://vault.centos.org可以下载, 到http://vault.centos.org/5.11/os/Source/查找mingetty和login程序,如下图: ? ? mingetty和login程序分别属于mingetty-1.07-5.2.2和util-linux-2.13-0.59.el5_8软件包: [[ema

java web项目部署在linux系统出现第一次登录高延迟的问题

今天记录一下之前遇到的问题:项目部署在window登录能很快完成,部署到linux后,第一次登录过程变得很慢.通过查看系统日志,发现时间主要消耗在了创建session,并且定位到是SecureRandom的初始化问题,继续查看,发现session的id创建方式为uuid,到这里,熟悉linux的人就会明白问题在哪了.Java的UUID依赖于SecureRandom.nextBytes方法,而SecureRandom又依赖于操作系统提供的随机数源.在Linux系统下,它的默认依赖是/dev/ran