Что определяет, какие команды Linux требуют root-доступа?

23

Что определяет, какие команды Linux требуют root-доступа? Я понимаю причины, почему желательно, скажем, apt-getтребовать rootпривилегий; но что отличает эти команды от остальных? Это просто вопрос владения и выполнения прав на исполняемый файл?

Брайан Добби
источник
2
В основном это зависит от того, к какому файлу они обращаются и какие функции они вызывают.
Федерико Клез Каллока
9
Некоторым приложениям нужен доступ к файлам / каталогам, принадлежащим пользователю root. Таким образом, они просто звонят openи получают «разрешение отказано». Некоторые приложения проверяют getuidи перестают работать, если они не вызываются пользователем root. Некоторые из них физически принадлежат пользователю root, и только владелец может выполнять их (см. chmod). Если вы спрашиваете, есть ли в заголовке приложения отметка «нуждается в корне», ответ - нет. Там нет такого понятия , AFAIK
user996142
1
ps: нескольким системным вызовам (например, привязка к общеизвестному порту <1024) также может потребоваться доступ с правами root.
user996142
apt-get вообще не требует root. Он находится в каталоге / usr / bin, см. Askubuntu.com/a/440791/169736
Брайам
Вы можете объяснить, что вы подразумеваете под «требовать» здесь. Вы имеете в виду, что программа не будет выполняться, если вы не являетесь пользователем root (или у вас нет прав sudo), или что для правильной работы она должна быть root?
jamesqf

Ответы:

15

В Linux, привилегия корня были в одной точке , разделенной на «возможность», так что вы можете получить полный список специальных привилегий корневых, глядя в эту документацию: man 7 capabilities.

Чтобы ответить на ваш вопрос, команде потребуется запускать с правами root, когда ей требуется одна из этих привилегий, а ее исполняемому файлу, не являющемуся сценарием, не назначена соответствующая возможность в его метаданных файла (например, если сценарий python требует эту возможность, то возможность должен быть в интерпретаторе python, указанном в строке shebang).

Обратите внимание, что некоторым командам, которым требуется root-доступ, не нужно что-то подобное, sudoпотому что в их исполняемом файле установлен бит SUID. Этот бит заставляет исполняемый файл запускаться от имени владельца (обычно root) при выполнении любым, у кого есть доступ для выполнения. sudoСам пример тому , что смена пользователей - это привилегированное действие, которое нужно сделать.

РЕДАКТИРОВАТЬ: я отмечаю из вашего вопроса, что у вас может быть идея, что вы можете определить, будет ли команде нужен root-доступ перед ее запуском. Это не тот случай. Иногда программе могут потребоваться права суперпользователя, а иногда - нет, и это может быть решение, принятое программой из-за данных, предоставляемых во время выполнения. Возьмем, к примеру, вызов vim, просто так без аргументов, а затем через серию нажатий клавиш и вставку, указание ему записать что-то в файл, для которого у него нет разрешения на запись, или, возможно, выполнение другой команды, для которой самим потребуются привилегии root. Ничто в команде перед ее выполнением не может указывать на то, что она в конечном итоге потребует root-доступа. Это то, что может быть определено только в том случае, если оно пытается сделать то, что требует этого.

В любом случае, вот несколько примеров из ссылочной man-страницы привилегий root:

  • Произведите произвольные манипуляции с UID процесса (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Обход файлов для чтения, записи и выполнения проверок прав доступа. (ЦАП - это аббревиатура «дискреционного контроля доступа».)
  • Обход проверок разрешений для отправки сигналов (см. Kill (2)). Это включает использование операции ioctl (2) KDSIGACCEPT.
  • Выполните различные операции, связанные с сетью:
    • настройка интерфейса;
    • администрирование брандмауэра IP, маскировка и учет;
    • изменить таблицы маршрутизации;
  • Свяжите сокет с привилегированными портами домена Интернета (номера портов меньше 1024).
  • Загружать и выгружать модули ядра (см. Init_module (2) и delete_module (2));
  • Установить системные часы (settimeofday (2), stime (2), adjtimex (2)); установить часы реального времени (аппаратные).
  • Выполните ряд операций системного администрирования, включая: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) и setdomainname (2);
  • Используйте reboot (2) и kexec_load (2).
  • Используйте chroot (2).
  • Увеличьте значение nice процесса (nice (2), setpriority (2)) и измените значение nice для произвольных процессов;
Йол
источник
32

Это , главным образом , вопрос о том, что инструмент или программа делает . Помня о том, что пользователь, не являющийся суперпользователем, может касаться только тех файлов, которыми он владеет или имеет к ним доступ, любой инструмент, который должен уметь разбираться со всем, будет требовать доступа суперпользователя, чтобы выполнить то, что он делает. Быстрый пример вещей, которые могут требовать суперпользователя, включают, но не ограничиваются:

  • Открытие прослушивающего сокета TCP на порте ниже 1024
  • Изменение конфигурации системы (например, что-нибудь в /etc)
  • Добавление новых глобально доступных библиотек ( /libи /usr/lib) или двоичных файлов ( /bin, /usr/bin)
  • Касание любых файлов, не принадлежащих пользователю, который делает касание, которое не имеет достаточно разрешающего режима
  • Изменение владельца файлов других пользователей
  • Определение приоритетов процесса (например renice)
  • Запуск или остановка большинства услуг
  • Конфигурация ядра (например, настройка перестановки)
  • Корректировка квот файловой системы
  • Запись на «полные» диски (большинство файловых систем резервируют место для пользователя root)
  • Выполнение действий других пользователей
DopeGhoti
источник
4
«Изменение приоритетов процесса» не-root пользователи могут изменить тонкости, чтобы быть более приятными. Единственное, что они не могут сделать, это быть менее милыми.
Брайам
1
Я знаю, что этот список не является полным, но я чувствую, что очень важная задача, которую могут выполнять только суперпользователи, - выдавать себя за других пользователей или просто входить в систему под ними.
phihag
Я настроил пункт о приоритетах процесса и добавил «Выполнение действий от имени других пользователей». Надеемся, что при наличии достаточного количества времени и комментариев этот список станет более полным.
DopeGhoti
0

Я думаю, что это в соответствии с идентификацией пользователя для проверки разрешений, а не в соответствии с порядком для разделения разрешений. Файлы и пользователи являются привилегированными, и команды не должны быть разделены.

Aldridge
источник
3
Я не хочу звучать грубо, и я понимаю, что английский может быть не вашим родным языком, но я совсем не понимаю этот ответ, как то, что он даже пытается сказать. «соответствие» означает «соглашение» или «соответствие»; Я не вижу, как это может быть использовано с «личностью пользователя». Что вы имеете в виду под «порядком для разделения разрешений»? «разделить» означает «отделить». Чей "заказ"? Как файлы «привелигированы», когда они не могут использовать любые привилегии? Думаю, я могу понять, что «команды не должны быть разделены» в контексте этого вопроса, но это все. Как это кажется непонятным.
JoL
@JoL Я думаю, что «заказ» является неправильным переводом и должен быть «командой», которая допускает другой анализ этого предложения. Несколько неловко сформулировать, как можно больше использовать то, что в этом ответе: «Я думаю, что это соответствует тому, как удостоверение пользователя используется для проверки разрешений, что разрешения не разделяются в соответствии с командой. Привилегии относятся к файлам и пользователям. не расщепляйся по командам. " Это все еще не слишком ясно, но для меня это имеет больше смысла, чем для вас. Я надеюсь, что мой комментарий поможет кому-то полностью понять этот ответ и отредактировать его в форме
hvd