리 눅 스 셸 스 크 립 트 로 Radius 서버 관리 하기

회사 의 무선 환경 은 mac 주소 인증 방식 을 사용 합 니 다. mac 주 소 는 Radius 의 users 설정 파일 에 연결 되 어 있 으 며, 등 록 된 mac 주 소 를 사용자 이름과 비밀번호 로 사용 합 니 다.이 mac 주 소 를 편리 하 게 관리 하기 위해 셸 스 크 립 트 를 써 서 관리 합 니 다.
셸 스 크 립 트 특유 의 강력 한 텍스트 처리 능력 과 각종 명령 함수 의 조합 으로 관리자 의 작업 이 수월 해 집 니 다.
참고 로 이 스 크 립 트 의 기능 을 보 여 줍 니 다.
  • mac 주소 추가
  • mac 주소 삭제
  • mac 주소 찾기
  • 중복 mac 주소 제거
  • mac 주소 의 합 법성 검사
  • TODO, 내 보 내기 mac 주소 가 져 오기, 주석 추가
  • 그 중에서 사용 하 는 Shell 스 크 립 트 기술 은 다음 과 같 지만 이에 국한 되 지 않 습 니 다.
  • 텍스트 파일 의 열 처리 와 행 처리, 예 를 들 어 sed, awk 등 명령
  • 문자열 찾기, 필터, 대소 문자 변환, bash 와 grep 등 명령
  • 문자열 길이, bash 와 wc 등 명령 가 져 오기, 계산, 비교
  • mac 주소 정규 표현 식 의 처리 와 형식 변환
  • 셸 프로 그래 밍 작업, 파일 포함, 함수, 매개 변수 전달, 반환 값 등
  • 기타
  • 코드 예제:
    #!/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 [email protected]"
    	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

    그 중에서 개선 할 수 있 는 부분 이 있 습 니 다. 예 를 들 어 다른 방법 으로 바 꾸 거나 사용자 의 사용 체험 을 강화 하 는 것 도 가능 합 니 다. 여러분 의 의견 을 환영 합 니 다.

    좋은 웹페이지 즐겨찾기