LINUX.ORG.RU
ФорумAdmin

NetBSD, /dev/tun0 permission

 , , ,


0

1

Простая программка для проверки открытия туннеля:

/* open_tun0 */
#include <fcntl.h>
#include <stdio.h>

int main()
{
        int fd;
        fd = open("/dev/tun0", O_RDWR);
        printf("%d\n", fd);
        if (fd == -1)
                perror("/dev/tun0");
        return 0;
}

Создаю tun0-интерфейс:

# ifconfig tun0 create
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
-1
/dev/tun0: Operation not permitted

Тоже самое делаю в OpenBSD (только там чуть по-другому интерфейс создаётся):

# ifconfig tun0 group tun
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
3

Почему в NetBSD не хочет открываться, хотя права выданы?

IMHO netbsd поступает логично. Это же не просто файл.
Открыть устройство и сконфигурировать его нужны права не рядового юзера.

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

Но хардкодить рута это же буэ. Эдак и для использования usb-serial, то есть gsm модема, надо будет рута давать

cobold ★★★★★
()
Ответ на: комментарий от firkax

Проверял. И chmod, тоже делал – не помогло.

Jullyfish
() автор топика

в первую очередь нужно читать man tun

  The tunnel device, normally /dev/tunN, is exclusive-open (it cannot be
     opened if it is already open) and is restricted to the super-user
     (regardless of file system permissions). 

потом можно почитать код https://nxr.netbsd.org/xref/src/sys/net/if_tun.c

/*
    343  * tunnel open - must be superuser & the device must be
    344  * configured in
    345  */
    346 static int
    347 tunopen(dev_t dev, int flag, int mode, struct lwp *l)
    348 {
    349 	struct ifnet	*ifp;
    350 	struct tun_softc *tp;
    351 	int	error;
    352 
    353 	error = kauth_authorize_network(l->l_cred, KAUTH_NETWORK_INTERFACE_TUN,
    354 	    KAUTH_REQ_NETWORK_INTERFACE_TUN_ADD, NULL, NULL, NULL);
    355 	if (error)
    356 		return error;
gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от gagarin0

Да, благодарю. man читал по диагонали, а «regardless» не правильно перевёл.

Jullyfish
() автор топика
Ответ на: комментарий от cobold

Эдак и для использования usb-serial, то есть gsm модема, надо будет рута давать

Если это сериальный порт, то повышенные привилегии никто не потребует.
А вот для создания и настройки ppp-интерфейса (для работы с модемом) потребуются привилегии CAP_NET_ADMIN.

С tun/tap ситуация иная. Там все в одном флаконе. Какой смысл разрешать открывать интерфейс непривилегированному процессу, если он не сможет его настроить?

vel ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.