LINUX.ORG.RU
решено ФорумAdmin

авторизация в openvpn по username/pass.

 ,


1

2

Всем привет.
Продолжаю попытки авторизации по username/pass.
Прописано в когфиге следующее:

#for user-pass authentication.
auth-user-pass-verify /etc/openvpn/auth.sh via-file
username-as-common-name
tmp-dir /etc/openvpn/tmp
script-security 3
Вот собственно сам auth.sh(это стыренный из инетов и подправленный мною скрипт):
# cat auth.sh 
#!/bin/bash
USERS=$(cat /etc/openvpn/user.pass)
for i in $USERS
do
if [ "$i" = "$1:$2" ]
	 then
exit 0
	 else
exit 1 
fi
done
Если запустить auth.sh руками, то все ок.
Но вот авторизация с клиента по впн-у никак не проходит.
Вопрос: как клиент передает параметры username и password ?

★★★★★

Ответ на: комментарий от Deleted

ну у меня клиент передает пароль через auth-user-pass.
ввожу username и password в консоль собственноручно.
Проблема в том, что если в if оба раза сделать exit 0, то соотв. авторизовываться будет в любом случае (с любыми username&pass).
так мне хочется понять что я делаю не так, как нужно.

dada ★★★★★
() автор топика
Ответ на: комментарий от Deleted

из офф.документации:

If method is set to «via-file», OpenVPN will write the username and password to the first two lines of a temporary file. The filename will be passed as an argument to script, and the file will be automatically deleted by OpenVPN after the script returns. The location of the temporary file is controlled by the --tmp-dir option, and will default to the current directory if unspecified. For security, consider setting --tmp-dir to a volatile storage medium such as /dev/shm (if available) to prevent the username/password file from touching the hard drive.

The script should examine the username and password, returning a success exit code (0) if the client's authentication request is to be accepted, or a failure code (1) to reject the client.

что я делаю не так ?

dada ★★★★★
() автор топика

Возможно, я чего-то не заметил или не понял, но...

if [ "$i" = "$1:$2" ]
	 then
exit 0
	 else
exit 1 
Это же завершение на первой итерации и, соответственно, проверка только первого логина:пароля в файле.

gasinvein ★★★
()
Последнее исправление: gasinvein (всего исправлений: 1)
Ответ на: комментарий от gasinvein

всем спасибо

тема решена.
вот конечный вариант:

#!/bin/bash
USERS=$(cat /etc/openvpn/user.pass)
vpn_auth() {
for i in $USERS
do
if [ "$i" = "$1:$2" ]
         then
exit 0
      	 else
exit 1
fi
done
}
vpn_auth $(cat $1)

dada ★★★★★
() автор топика
Ответ на: всем спасибо от dada

тема решена

Я хоть и мимокрокодил, но не могу не заметить, что твой код всё ещё не делает более одной итерации по списку пользователей. Странно, что он у тебя вообще работает.

Если я правильно понял условие, то должно быть что-то вроде.

#!/bin/sh

{ read user; read pass; } < $1

cred="$user:$pass"

while read entry; do
  [ "$entry" = "$cred" ] && exit 0
done < /etc/openvpn/user.pass

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