Можно ли с помощью sudo изменить владельца исполняемого файла на root?

Можно ли с помощью sudo изменить владельца исполняемого файла на root?

У меня есть исполняемый файл, созданный моим userid, который мне нужно запустить как 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 или создания оболочки с правами root ( sudo tcsh)

решение1

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

решение2

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

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

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

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

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

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

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

    sudo chattr -ai filename
    

решение3

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

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

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

решение4

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

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

Связанный контент