Идея создания беспроводного периметра у
вашего компьютера довольно занимательна.
Соединив сотовый телефон с компьютером
через Bluetooth, можно реализовать массу
полезных вещей. В данном случае мы
рассмотрим создание защитного периметра,
защитной системы, которая будет лочить
компьютер при удалении пользователя с
телефоном на определенное расстояние от
него. Возьмем для примера скрипт из Gentoo
Wiki и дистрибутив SuSE и реализуем такую
систему.
Прежде всего необходимо наладить связь
между компьютером и телефоном через Bluetooth.
Возможны варианты, в зависимости от модели
телефона, но в целом это выглядит так.
Открываем YaST и идем Hardware->Bluetooth:
Открываем окно конфигурации:
Необходимо убедиться, что сервер включен,
и задать PIN-коды для связи с телефоном, имя
устройства. Если все настроено правильно,
то связь между телефоном и компьютером
заработает - в телефоне просканируйте
эфир и найдите свой компьютер, попробуйте
зайти в него, при запросе PIN-а введите пароль
из конфигурации.
Следующим шагом вам надо получить MAC-адрес
вашего телефона. Найти его можно в /var/lib/bluetooth.
Там будет директория (или несколько, если вы
устанавливали связь с несколькими
устройствами), которая в шестнадцатеричной
форме и будет представлять собой MAC-адрес
телефона. Например 00:14:41:0D:2E:6D. В такой
директории хранится файл с именем
устройства и определенным MAC-адресом.
Покончив со связью устройств, сделаем
нужные изменения в системе (для этого
понадобятся root-права). Заходим в терминал и
выполняем:
chmod +s /usr/bin/hcitool
chmod +s /usr/bin/l2ping
Это позволит всем пользователям
запускать эти программы.
Последний шаг - создаем скрипт, который
будет связанно обрабатывать это все. В нашем случае
мы используем SLED 10 с дефолтовой установкой
GNOME, но вы можете задать произвольные
команды, которые будут выполнять
необходимые лично вам действия. У Bluetooth-связи есть возможность определять
удаленность объекта, так что зададим
действия, которые будут совершаться при
выходе телефона за периметр и обратном его
появлении в нем. Начнем с такого скрипта:
#!/bin/bash
#set -o verbose sh -v
# Copied from Steven on http://gentoo-wiki.com/Talk:TIP_Bluetooth_Proximity_Monitor
# These are the sections you'll need to edit
# You'll need to use the MAC address of your phone here
DEVICE="00:0F:46:FF:05:07"
# How often to check the distance between phone and computer in seconds
CHECK_INTERVAL=2
# The RSSI threshold at which a phone is considered far or near
THRESHOLD=-13
# The command to run when your phone gets too far away
FAR_CMD='/opt/gnome/bin/gnome-screensaver-command --activate'
# The command to run when your phone is close again
NEAR_CMD='/opt/gnome/bin/gnome-screensaver-command --poke'
HCITOOL="/usr/bin/hcitool"
STARTX_PID=0
DEBUG="/tmp/btproximity.log"
connected=0
function msg {
echo "$1" #>> "$DEBUG"
}
function check_connection {
connected=0;
found=0
for s in `$HCITOOL con`; do
if [[ "$s" == "$DEVICE" ]]; then
found=1;
fi
done
if [[ $found == 1 ]]; then
connected=1;
else
msg 'Attempting connection...'
if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
msg 'Connected.'
connected=1;
else
if [ -z "`l2ping -c 2 $DEVICE 2>&1`" ]; then
if [ -z "`$HCITOOL cc $DEVICE 2>&1`" ]; then
msg 'Connected.'
connected=1;
else
msg "ERROR: Could not connect to device $DEVICE."
connected=0;
fi
fi
fi
fi
}
check_connection
while [[ $connected -eq 0 ]]; do
check_connection
sleep 3
done
name=`$HCITOOL name $DEVICE`
msg "Monitoring proximity of \"$name\" [$DEVICE]";
state="near"
while /bin/true; do
check_connection
if [[ $connected -eq 1 ]]; then
rssi=$($HCITOOL rssi $DEVICE | sed -e 's/RSSI return value: //g')
if [[ $rssi -le $THRESHOLD ]]; then
if [[ "$state" == "near" ]]; then
msg "*** Device \"$name\" [$DEVICE] has left proximity"
state="far"
$FAR_CMD > /dev/null 2>&1
fi
else
if [[ "$state" == "far" && $rssi -ge $[$THRESHOLD+2] ]]; then
msg "*** Device \"$name\" [$DEVICE] is within proximity"
state="near"
$NEAR_CMD > /dev/null 2>&1
STARTX_PID=$(pgrep startx)
fi
fi
msg "state = $state, RSSI = $rssi"
fi
sleep $CHECK_INTERVAL
done
В нем необходимо заменить
значение DEVICE на MAC-адрес телефона.
Возможно, вы захотите
попробовать другие команды при удалении и
приближении. Например, если вы хотите, чтобы
скринсейвер GNOME деактивировался при
приближении оператора, а не показывал
запрос пароля, то надо сделать так:
NEAR_CMD='/opt/gnome/bin/gnome-screensaver-command ?deactivate'
Если вы используете xscreensaver:
FAR_CMD='/usr/bin/xscreensaver-command -lock' NEAR_CMD='/usr/bin/xscreensaver-command
-deactivate'
Существует масса возможностей
контролировать ваш компьютер при помощи
настроенного периметра безопасности, и дело
тут только за вашей фантазией.
Сохранив срипт, надо сделать его
исполняемым. Мы сохраним его в ~/bin/proximity.sh, но
вы можете использовать произвольное место
в системе. Записав программу, можно
попробовать запустить ее и протестировать
работу:
username@host:~> chmod +x ~/bin/proximity.sh
username@host:~> ~/bin/proximity.sh
Monitoring proximity of "BlackBerry 8100" [00:0F:46:FF:05:07]
state = near, RSSI = -5
state = near, RSSI = -4
state = near, RSSI = -4
state = near, RSSI = -4
Возможно, понадобится тонкая настройка
параметров связи (например, пункта THRESHOLD),
но если все заработало, то у вас уже есть
свой периметр безопасности, который будет
давать компьютеру указания при вашем
присутствии или отсутствии.