4

У меня есть исполняемый файл, созданный моим идентификатором пользователя, который мне нужно запустить от имени пользователя root. Поэтому мне нужно изменить владельца моего исполняемого файла на root:root и использовать setuid. Когда я пытаюсь

sudo chown root:root [EXE_NAME]

Я получаю ошибку:

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

Мои ограничения:

  • У меня есть sudo ALL ALL для моего идентификатора пользователя в файле sudoers, но я не могу войти как root
  • Исполняемый файл, который должен запускаться от имени пользователя root, пытается привязаться к сетевому интерфейсу (следовательно, необходимо запускать от имени пользователя root) в смешанном режиме с помощью функции pcap_open_live.

Есть ли лучший способ решить мою конечную проблему, то есть необходимость запустить исполняемый файл, который привязан к сетевому интерфейсу, который защищен и не требует sudo, или создать корневую оболочку (sudo tcsh)

4 ответа4

3

Если sudo фактически дает вам UID 0 (проверьте с помощью sudo id), я подозреваю, что файл находится в файловой системе, которая не поддерживает разрешения (например, FAT32). В такой файловой системе вы не можете изменить владельца (или разрешения) файла.

1

Если ваша файловая система поддерживает владение, у меня есть еще три причины:

  1. Раздел монтируется только для чтения.

    Попробуйте переименовать файл или создать другой файл в том же каталоге. Если вы можете, это не проблема.

  2. Файл заблокирован.

    Проверьте, запущена ли программа. Попробуйте переименовать файл.

  3. Файл установлен как добавляемый или неизменный.

    Чтобы изменить это, выполните следующую команду:

    sudo chattr -ai filename
    
0

Обычные пользователи также могут связываться с сетевым интерфейсом, но не с портами до 1024. Таким образом, вы можете привязать вашу программу к порту> = 1024, а затем перенаправить на этот порт либо извне, либо через ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT> .

При этом ваша проблема может также относиться к SElinux, который по умолчанию включен в RHEL. Чтобы отключить его, установите SELINUX=disabled в /etc/selinux/config .

0

Если вам просто нужно сменить владельца (а не владельца и группу), вы можете использовать chown root filename . Префикс sudo, если вы не являетесь пользователем root.

Если вы также хотите изменить группу, всегда есть chgrp .

(Конечно, не так хорошо, как все в одной команде).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .