Разрешить программе C устанавливать IP как непривилегированный

Сохраните этот скрипт в файл, например,mozlz4:

#!/usr/bin/env python
from sys import stdin, stdout, argv, stderr
import os
try:
    import lz4.block as lz4
except ImportError:
    import lz4

stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')

if argv[1:] == ['-c']:
    stdout.write(b'mozLz40\0' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
    assert stdin.read(8) == b'mozLz40\0'
    stdout.write(lz4.decompress(stdin.read()))
else:
    stderr.write('Usage: %s -c|-d < infile > outfile\n' % argv[0])
    stderr.write('Compress or decompress Mozilla-flavor LZ4 files.\n\n')
    stderr.write('Examples:\n')
    stderr.write('\t%s -d < infile.json.mozlz4 > outfile.json\n' % argv[0])
    stderr.write('\t%s -c < infile.json > outfile.json.mozlz4\n' % argv[0])
    exit(1)
1
14.10.2019, 00:07
1 ответ

По крайней мере, в Linux вы могли бы использовать возможности , чтобы позволить программе выполнять ограниченный набор действий, как если бы она имела привилегии root.

Соответствующая возможность выглядит следующим образом:

CAP_NET_ADMIN
    Perform various network-related operations:
    * interface configuration;
    * administration of IP firewall, masquerading, and accounting;
    [...]

И вы можете установить возможность с помощьюsetcap:

setcap cap_net_admin+ep /path/to/my_ifconfig

Альтернативой, конечно, было бы сделать программу setuid root (chmod u+s), что позволило бы ей делать все, что может делать root. Это, очевидно, более рискованно, но должно работать и в других системах, а не только в Linux.

Вы можете захотеть ограничить, какие пользователи могут запускать файл с дополнительными разрешениями с обычными битами прав доступа к файлу, например, чтобы разрешить его запуск только членам группы netadmins:

chown root.netadmins /path/to/my_ifconfig
chmod 0710 /path/to/my_ifconfig
0
28.01.2020, 00:00

Теги

Похожие вопросы