Как ОС знает, что для команды нужен sudo?

Да,

Измените xdg-open команда или exo-open на xfce4 (который является программой в двоичном представлении),

Это - то, как DE открывает файл или программу.

Но необходимо изменить/etc/{zshrc, профиль} как материал, если Вы хотите эти глобальные настройки.

16
28.07.2014, 23:26
5 ответов
  1. Иногда сообщение "Permission denied" (Разрешение запрещено) возникает, например, из-за прав файловой системы на запись. Исполняемый файл/инструмент просто проверяет, дает ли файловая система вам достаточно прав, чтобы сделать то, что вы собираетесь сделать, и выдает ошибку, если файловая система отказывает вам в доступе. В других случаях сам инструмент будет проверять ваш идентификатор пользователя перед тем, как разрешить вам продолжать использовать его.
  2. Когда вы запускаете программу с sudo , вы запускаете ее под именем другого пользователя. Если этот пользователь "способен делать больше вещей", чем ваш пользователь, и настройка sudo позволяет вам делать эти вещи от имени другого пользователя, то да, sudo позволит вам делать больше вещей. В этом нет необходимости. Если вы просто прикрепите sudo в начале командной строки, то на самом деле вы sudo в качестве root, так что обычно вы можете делать больше вещей, чем просто смертный.
  3. Определенно нет. Для использования sudo вам нужно ввести свой собственный пароль пользователя, после чего вы сможете делать некоторые вещи от имени целевого пользователя. Для использования su вам нужен пароль целевого пользователя , и если он у вас есть, вы становитесь этим целевым пользователем в той степени, в какой это касается системы, и можете делать все, что может сделать этот пользователь.

Смотрите также

14
27.01.2020, 19:48

Для описанных вами целей операционная система не решает, нужно ли вам sudo, чтобы изначально запустить программу. Вместо этого, после того, как программа начнет выполняться, а затем попытается сделать что-то, что не разрешено текущим пользователем (например, записать файл в /usr/bin для установки новой команды), операционная система заблокирует доступ к файлу. Действия по выполнению этого условия зависит от программы; make прекращает выполнение, но du переходит к следующему файлу/директории после вывода сообщения на печать.

Команды su и sudo - это два различных способа выполнения программы с привилегиями root. Они могут различаться в мелких деталях, таких как содержимое окружения при запуске новой программы, в зависимости от используемых опций. Операционной системе не нужно решать, когда тот или иной способ может работать.

24
27.01.2020, 19:48

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

С помощью su вам нужно знать пароль цели, и как только вы аутентифицируетесь, вы можете делать все, что захотите, как этот пользователь. Использование su может быть ограничено установкой SU_WHEEL_ONLY в /etc/login.defs. Если она установлена, то только пользователи в группе wheel могут использовать su, в противном случае она не ограничена. Кроме того, su - это все или ничего.

sudo совершенно отличается от этого. С помощью sudo можно определить довольно сложные политики в /etc/sudoers о том, что разрешено делать sudoer (пользователю, который вызывает sudo). Например, можно определить политики, в которых определенные пользователи могут запускать только определенные программы с определенными привилегиями, в то время как другие пользователи могут запускать другие программы с другими привилегиями.

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

6
27.01.2020, 19:48

tl; dr Доступ определяется пользователем, который запускает приложение, и sudo запускает приложения от имени другого пользователя.

Полная версия:

Откуда ОС знает, что команде требуется sudo?

Не знает. UNIX управляет разрешениями не на уровне приложения, а на уровне файловой системы: разрешения предоставляются пользователям для доступа к определенным файлам. Затем приложения запускаются от имени пользователя - с каждым запущенным процессом связан пользователь. Этот пользователь используется для определения разрешений для этого приложения. Sudo работает, запуская приложения от имени другого пользователя (с разрешениями, связанными с этим другим пользователем), а именно root , суперпользователь.

Что касается ваших примеров:

  1. Если у пользователя есть доступ на запись к определенному каталогу, он может выполнить установку в этот каталог. В противном случае они могут сделать это с помощью root - с помощью sudo .

  2. Если вы не можете получить доступ к файлам в каталоге, du , запущенный для вас, также не сможет получить доступ к нему. root может получить доступ практически к каждому файлу, поэтому sudo du ( du запускается от имени root ) также может получить к ним доступ.

Верно ли, что всякий раз, когда работает sudo, su также будет работать, и всякий раз, когда su работает, sudo также будет работать?

Да и нет. Да, если программа на самом деле запущена, она должна вести себя одинаково как для sudo , так и su . Однако sudo обеспечивает более детальный контроль над тем, кто что может запускать, с помощью набора правил, хранящихся в файле / etc / sudoers . su более простой - если вы знаете пароль целевого пользователя, вы можете запускать программы от имени этого пользователя.

Последнее замечание: как приложение обрабатывает отказ в доступе (когда оно прерывается, игнорирует или предупреждает пользователя), зависит от приложения.

2
27.01.2020, 19:48

Пока ни у кого нет ответа ✓, поэтому я составил ответ, в котором есть все, о чем я мог подумать.

1 Когда вы запускаете исполняемый файл, иногда ОС отказывает вам в разрешении. Например, при запуске make install с префиксом системного пути потребуется sudo, а при префиксе несистемного пути sudo запрашиваться не будет. Как ОС решает, что запуск исполняемого файла потребует больше привилегий, чем есть у пользователя, еще до того, как программа что-то сделает?

Нет, это не делается при запуске исполняемого файла. Это делается, когда исполняемый файл пытается что-то сделать.

Ос проверяет разрешения файловой системы и возможности (они не охватываются разрешениями файловой системы, и включают уменьшение хорошего уровня, mknode, некоторые низкоуровневые сетевые вещи, убивать чужие процессы, перезагружаться, устанавливать время и т.д.). Если у вас нет соответствующих прав, вы не сможете этого сделать. Root имеет полный набор возможностей, включая CAP_DAC_OVERRIDE (игнорировать разрешение на файл).

2 Иногда при запуске программы не нужно отказываться от прав, но программа сможет делать больше вещей, если она запущена с sudo. Например, при запуске программы du на каком-то системном каталоге, только с sudo она сможет получить доступ к какому-то каталогу. Почему ОС не отказывает в разрешении на запуск такой программы, или дружески уведомляет о том, что предпочтительнее иметь больше привилегий, прежде чем программа сможет запуститься?

ОС не может знать, что будет делать программа. Поэтому программа должна сама проверять разрешения перед запуском и решать, что делать. Однако она не обязана это делать.

Примечание: на android есть манифест, в котором приложение указывает, какие привилегии оно может использовать. ОС уничтожит любое приложение, которое попытается использовать привилегию, которую оно не объявило, и ОС не всегда гарантирует, что привилегия может быть использована. например, доступ к сети может быть недоступен.

2 Верно ли, что когда работает sudo, su тоже будет работать, а когда работает su, sudo тоже будет работать? или с помощью su пользователь может сделать больше, чем с помощью sudo? Как ОС решает, когда работает sudo, а когда нужен su?

sudo и su делают примерно одно и то же. Некоторые различия заключаются в обработке переменных окружения и других подобных проблемах безопасности. Однако они оба являются инструментами, позволяющими вам стать другим пользователем, и оба имеют пользователя по умолчанию root.

su был первоначальным инструментом, он требует ввода пароля пользователя/группы, в которую вы переходите.

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

1
27.01.2020, 19:48

Теги

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