用Linux Shell脚本轻松管理Radius服务器

简介:

公司的无线环境采用mac地址认证的方式,mac地址被绑定到Radius的users配置文件中,将注册了的mac地址作为用户名和密码。为了方便的管理这些mac地址,自己写了一个shell脚本来管理。

shell脚本所特有的强大文本处理能力和各种命令函数的组合,使得管理员的工作能轻松不少。

下面就列出该脚本的功能以示参考:

  1. 添加mac地址

  2. 删除mac地址

  3. 查找mac地址

  4. 去除重复mac地址

  5. 检查mac地址合法性

  6. TODO,导入导出mac地址,添加注释

其中用到的Shell脚本技术包括但不限于:

  1. 文本文件的列处理和行处理,如sed、awk等命令

  2. 字符串查找、过滤、大小写转换,bash和grep等命令

  3. 获取、计算、比较字符串长度,bash和wc等命令

  4. mac地址正则表达式的处理和类型转换

  5. shell编程操作、包括文件包含、函数、参数传递、返回值等

  6. 其他

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#!/bin/bash
#
 
# Source function library.
/etc/rc .d /init .d /functions
 
RADIUSD= /usr/sbin/radiusd
LOCKF= /var/lock/subsys/radiusd
CONFIG= /etc/raddb/radiusd .conf
USERCONFIG= /etc/raddb/users
 
[ -f $RADIUSD ] ||  exit  0
[ -f $CONFIG ] ||  exit  0
[ -f $USERCONFIG ] ||  exit  0
 
RETVAL=0
 
OPERATION=$1
MACADDRESS=$2
 
function  help()
{
     clear
     echo  $ ""
     echo  $ "===================================================================================="
     echo  $ "For Radius on Fedora/CentOS/RadHat Linux Server, Written by Chris"
     echo  $ "===================================================================================="
     echo  $ "A tool to manage Radius server"
     echo  $ ""
     echo  $ "Usage: $0 {find|add|modify|delete|check|remove|start|stop|status|restart|reload} mac"
     #TODO
     echo  $ "Usage: $0 {import|export|debug}"
     echo  $ ""
     echo  $ "For more information please contract dgdenterprise@gmail.com"
     echo  $ "===================================================================================="
     echo  $ ""
     exit  1
}
 
function  mac()
{
     if  [ -z $MACADDRESS ]; then
         echo  $ "no mac address is signed! "
         echo  $ "\$2 is $MACADDRESS"
         exit  1
     else
                 if  [[  "${#MACADDRESS}"  !=  "12"  ]] && [[  "${#MACADDRESS}"  !=  "17"  ]] ; then
             echo  "mac length is ${#MACADDRESS}"
                         echo  "mac address is illegal! "
             exit  1
#                else
#                        echo $"mac which you input is $MACADDRESS"
                 fi
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p'
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p'
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{12}/p'
         if  [[ ` echo  $MACADDRESS |  grep  -` ]]; then
             PROMAC=` echo  $MACADDRESS |  sed  -nr  '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p'  tr  '[:upper:]'  '[:lower:]'  sed  's/-//g' `
         elif  [[ ` echo  $MACADDRESS |  grep  :` ]]; then
             PROMAC=` echo  $MACADDRESS |  sed  -nr  '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p'  tr  '[:upper:]'  '[:lower:]'  sed  's/://g' `
         else
             PROMAC=` echo  $MACADDRESS |  tr  '[:upper:]'  '[:lower:]' `
         fi
         echo  $PROMAC
     fi
}
 
function  find ()
{
     MAC=`mac`
     echo  $ "accepted mac is $MAC"
     if  [[ ` grep  $MAC $USERCONFIG` ]];  then
         MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
         #echo $MACLINE
         MACLINECOUNT=$( echo  $MACLINE |  wc  -w)
         #echo $MACLINECOUNT
         if  [[  "$MACLINECOUNT"  !=  "1"  ]]; then
             echo  $ "ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"
             exit  1
         fi
         echo  $ "Successfully find $MAC in $MACLINE line of file $USERCONFIG! "
         echo
         REVAL=$?
     else
         echo  $ "Can not find $MAC in file $USERCONFIG! "
         echo
         exit  1
         REVAL=$?
     fi
}
 
function  add()
{
     MAC=`mac`
     echo  $ "accepted mac is $MAC"
     #find $MAC
     LINENUM=` grep  -n  "Cleartext-Password :='"  $USERCONFIG |  grep  - v  \ # | head -n1 | awk -F ":" '{print $1}'`
     SEDOPERATION=$LINENUM "a"
     sed  -i  "$SEDOPERATION $MAC    Cleartext-Password :='$MAC'"  $USERCONFIG
     find  $MAC
     restart
}
 
function  modify()
{
     MAC=`mac`
     find  $MAC
     #TODO
     
}
 
function  delete()
{
         MAC=`mac`
         echo  $ "accepted mac is $MAC"
         if  [[ ` grep  $MAC $USERCONFIG` ]];  then
                 MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
                 ##echo $MACLINE
                 #MACLINECOUNT=$(echo $MACLINE | wc -w)
                 ##echo $MACLINECOUNT
                 #if [[ "$MACLINECOUNT" != "1" ]];then
                 #        echo $"ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"
                 #        exit 1
                 #fi
                 echo  $ "Successfully find $MAC in $MACLINE line of file $USERCONFIG! "
         echo  $ "It will be deleted! "
         sed  -i  "$MACLINE d"  $USERCONFIG
         #TODO
         echo  $ "If you see 'Can not find $MAC in file $USERCONFIG! ', it means successfully! "
         find  $MAC
                 echo
                 REVAL=$?
         else
                 echo  $ "Can not find $MAC in file $USERCONFIG! "
                 echo
                 REVAL=$?
         fi
}
 
function  check()
{
     MAC=`mac`
     find  $MAC
     remove $MAC
}
 
function  remove()
{
     MAC=`mac`
         echo  $ "accepted mac is $MAC"
     #TODO
     #echo $"backuped file to file $FILENAME"
         if  [[ ` grep  $MAC $USERCONFIG` ]];  then
                 MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
                 #echo $MACLINE
                 MACLINECOUNT=$( echo  $MACLINE |  wc  -w)
                 #echo $MACLINECOUNT
                 if  [[  "$MACLINECOUNT"  ==  "1"  ]]; then
                         echo  $ "WARNNING, this mac $MAC is good record, no duplicate record has found! "
                         exit  0
                 fi
     TOREMOVE= "$MAC    Cleartext-Password :='$MAC'"
     sed  -i  "/^$TOREMOVE$/d"  $USERCONFIG
     add $MAC
     fi
}
 
function  restart()
{
     service radiusd restart
}
 
function  reload()
{
     service radiusd reload
}
 
function  status()
{
     service radiusd status
}
 
case  "$1"  in 
     find )
         find
         RETVAL=$?
     ;;
     add)
         add
         RETVAL=$?
     ;;
     modify)
         modify
         RETVAL=$?
     ;;
     delete)
         delete
         RETVAL=$?
     ;;
     check)
         check
         RETVAL=$?
     ;;
     remove)
         remove
         RETVAL=$?
     ;;
     start)
         start
         RETVAL=$?
     ;;
     stop)
         stop
         RETVAL=$?
     ;;
     status)
         status
         RETVAL=$?
     ;;
     restart)
         restart
         RETVAL=$?
     ;;
     reload)
         reload
         RETVAL=$?
     ;;
     *)
         help
         exit  1
     ;;
esac

其中有一些可以改进的地方,比如换一种方法或者增强用户的使用体验都是可以的,欢迎大家提出意见。





本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1567085,如需转载请自行联系原作者


相关文章
|
7天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
69 4
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
101 4
|
2月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
1月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
2月前
|
缓存 Unix Linux
服务器linux!!!
本文介绍了计算机的演变历史、硬件基础知识及服务器相关知识。从电子管时代的ENIAC到冯-诺伊曼架构,再到现代计算机系统组成,详细讲解了计算机的发展历程。此外,文章还介绍了服务器的分类、品牌、硬件组成以及IDC机房的上架流程,为读者提供了全面的技术背景知识。
76 0
服务器linux!!!
|
2月前
|
人工智能 安全 Linux
|
2月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
472 3
|
2月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
42 0