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 输出中找到当前的登录用户名, 然后检查当前是否有相同的用户名登录了, 如果存在, 则结束当前的登录进程, 让刚建立起来的连接马上断开.
如果大家有更好的办法不妨留言告诉我下, 谢谢了.
----------------------------分隔线-------------------
今天发现登录vpn有的网站不能上, 感觉很奇怪, 通过在vpn服务上直接curl或者wget都可以正常下载网页. 然后通过wireshark拦截, 所有的ppp包也是正常compressed的. google了发现可能是vpn连接的MTU设置有问题, 可以在/etc/ppp/ip-up里添加一句脚本在初始化ppp连接时修改mtu值:
ifconfig $1 mtu 1500 # 其中$1即新建的连接接口
linux pptpd账号同时登录的问题的更多相关文章
- Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)
一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全.为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器),以便在账号和密码之间再增加一个验证码, ...
- mongodb副本集加分片集群安全认证使用账号密码登录
mongodb副本集加分片集群搭建网上资料有很多.粘贴一个写的比较好的.副本集加分片搭建 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用账号密码登录. 默认的mongodb是 ...
- Linux的账号口令机制及其爆破
账号保存 谈到linux的账号认证,其实就是如何保存于通过口令(password)鉴别,这里首先要将两个文件,一个是/etc/passwd,另外一个是/etc/shadow. /etc/passwd文 ...
- linux备忘录-账号管理与ACL权限设定
知识 账号管理中的一些文件结构 /etc/passwd 每一行的内容都为下面结构 账号名称:密码:UID:GID:用户信息说明:家目录:shell ---- UID ---- -- 0 -> 代 ...
- Linux学习-什么是登录档
CentOS 7 登录档简易说明 登录档的重要性 为什么说登录文件很重要, 解决系统方面的错误: 用 Linux 这么久了,你应该偶而会发现系统可能会出现一些错误,包括硬件捉不到或者是某些系 统服务无 ...
- 在linux上使用ssh登录服务器,Linux权限
本文是作者原创,版权归作者所有.若要转载,请注明出处 ssh为Secure Shell(安全外壳协议)的缩写. 很多ftp.pop和telnet在本质上都是不安全的. 我们使用的Xshell6就是基于 ...
- Linux—禁止用户SSH登录方法总结
Linux-禁止用户SSH登录方法总结 一.禁止用户登录 1.修改用户配置文件/etc/shadow 将第二栏设置为"*",如下.那么该用户就无法登录.但是使用这种方式 ...
- linux查看ssh用户登录日志与操作日志
linux查看ssh用户登录日志与操作日志 2013-11-01转载 ssh用户登录日志 linux下登录日志在下面的目录里: 代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...
- Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录
应广大服务器客户要求一至反应Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录,出现列表超时的情况,特提供以下解决方案: 1. IIS FTP用户解决方法: 在防火 ...
随机推荐
- 【POJ】3207 Ikki's Story IV - Panda's Trick
http://poj.org/problem?id=3207 题意:一个圆上顺时针依次排列着标号为1-n的点,这些点之间共有m条边相连,每两个点只能在圆内或者圆外连边.问是否存在这些边不相交的方案.( ...
- c#的学习
C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp".C#是一种安全的.稳定的.简单 ...
- js小效果-全选
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- JSONP的小示例
jQuery中JSONP的两种实现方式: 都很简单,所以直接上代码! 前台代码如下: <script type="text/javascript"> $(functio ...
- jquery中prop()方法和attr()方法的区别浅析
官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该用attr(),什么时候该用prop()呢 jquery1.6中新加了一个方法pr ...
- Java.lang.NoSuchFieldError: INSTANCE异常
解决方案: java.lang.NoSuchFieldError: INSTANCE异常. 1.jar包重复了. 2.版本还不相同,如果包的版本不同也会报相应的错,不过一般情况自己导入的jar包主要看 ...
- oracle中删除表中某字段出现重复的信息 保留其中一条
记得以前有个同事问过我这个,说是以前面试的时候碰到的问题,下面我介绍三种方法. 首先我们在这里创建一个测试表添加相应的测试数据. create table test (id number,name ...
- NGUI之Slider,最简单的方法做进度条。
既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...
- FIO 测试磁盘iops 以及读写
最近在做mariadb的性能,感觉io 有瓶颈,就使用fio 来测试一下磁盘.下文为转载文章(温馨提示:此命令很伤硬盘,测试前请备份数据,- -我就写坏了一个.) FIO 是测试IOPS的非常好的工具 ...
- Layer弹窗组件
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. Layer的开发手册和下载地址 http://layer ...