LINUX.ORG.RU

Мои bash скрипты для инициализации IPv6 PPP

 , , , ,


1

2

Я сегодня налисал скрипты для инициализации ipv6 в ppp сессии. Вот первый скрипт:

filename:000-ipv6_client_connect_init

#!/bin/bash

# Shov version
case $VERSION in
	true)
		echo 0-001.beta
		exit 0
		;;
	* )
		;;
esac

IPV6_DISCR_PATH=/opt/ipv6_net
CLIENT_IPV6=$(echo $PPP_REMOTE)
CLIENT_IF=$(echo $PPP_IFACE)
TMP_PATH=/run

# Get ppp ipv6 route
ipv6_rtr ()
{
	IPV6_PPP=$(cat $IPV6_DISCR_PATH|grep PPP|grep -v grep|awk '{print $2}')
	IPV6_ADDR=$(echo $CLIENT_IPV6|sed "s/fe80::/$IPV6_PPP/")
	ip -6 route add ${IPV6_ADDR}/128 dev $CLIENT_IF
}
# Generate radvd config
radvd_gen_config ()
{
	CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
	RADVD_PREFIX=$(cat $IPV6_DISCR_PATH|grep RADVD|grep -v grep|awk '{print $2}')
	echo $RADVD_PREFIX >/tmp/test
	echo "interface $CLIENT_IF
	 	{
  			AdvSendAdvert on;
   			prefix ${RADVD_PREFIX}
   			{
        		AdvOnLink on;
        		AdvAutonomous on;
   		};
        		RDNSS fd00:1002:1289:2::1
        	{
        	};

		};" >$CONFIG_FILE_NAME
}
# Starting all process to radvd
radvd_start ()
{
	CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
	/usr/sbin/radvd -C $CONFIG_FILE_NAME -p $TMP_PATH/radvd_${CLIENT_IF}.pid
}
# Starting function
ipv6_rtr
radvd_gen_config
radvd_start

exit 0
Вот, второй скрипт:
filename:000-ipv6_client_disconnect_init

#!/bin/bash

case $VERSION in
        true)
                echo 0-001.beta
                exit 0
                ;;
        * )
                ;;
esac

IPV6_DISCR_PATH=/opt/ipv6_net
CLIENT_IPV6=$(echo $PPP_REMOTE)
CLIENT_IF=$(echo $PPP_IFACE)
TMP_PATH=/run

# Remove config radvd
radvd_rm_config ()
{
	CONFIG_FILE_NAME=$TMP_PATH/radvd_${CLIENT_IF}.conf
	rm $CONFIG_FILE_NAME
}
# Stopping ang restart radvd
radvd_stop ()
{
	kill $(cat /tmp/radvd_${CLIENT_IF}.pid)
}
radvd_stop
radvd_rm_config

exit 0

Вот конфиг:

filename: ipv6_net

PPP 2001:470:7b2c:2:
RADVD 2001:470:7b2c:2::/64

Первый скрипт кинуть в /etc/ppp/ipv6-up, второй кинуть в /etc/ppp/ipv6-down, конфиг кинуть в /opt

Зависимости: radvd awk

Версия: 0-001.beta. В следующие версии добавлю поддежку гостевого доступа и др.

★★★★★

Добавь файлы для сборки в deb пакет
И на гитхаб.

Cactus64k ()

вот тут у тебя дыра в безопасности:

в этом каталоге у тебя создаются файлы:

TMP_PATH=/tmp

если злоумышленный неривилегированный процесс — *заранее* создаст в этом месте симвльную ссылку (а непривилегированные полномочия — позволят ему сделать это) — то твой скрипт перезапишет инфу по этой ссылке.

таким образом злоумышленый непривелигированный процесс — сможет запортить любой файл , не имея на то root-полномочий :-)

варианты решения проблемы:

используй вместо /tmp/ — более глубокий путь, например /tmp/my_internet/

и *обязательно* проверяй чтобы этот каталог создался бы без-сучка-и-задоренки:

mkdir /tmp/my_internet/ || exit 1 # либо каталог создаём МЫ (а не кто-то другой) , либо выходим с ошибкой

(а вообще — лучше НЕ используй /tmp/ ... вместо этого — есть более НАДЁЖНОЕ место: каталог /run/ .. который тоже как и /tmp/ висит в памяти, но не является такой дыришей в безопасности такой как /tmp/ )

user_id_68054 ★★★★★ ()
Последнее исправление: user_id_68054 (всего исправлений: 3)

динамический конфиг radvd - это плохо, если еще ipv6 есть...

slapin ★★★★★ ()
Ответ на: комментарий от ne-vlezay

Если имя интерфейса не скачет - статический. А появление-исчезновение интерфейса оно и само видит.

slapin ★★★★★ ()
Ответ на: комментарий от ne-vlezay

Не знаю, у меня не видит.

IgnoreIfMissing on

для ppp было?

slapin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.