Ни у кого еще нет ✓, поэтому я составил ответ, в котором есть все, о чем я мог подумать.
1 Когда вы запускаете исполняемый файл, иногда ОС будет отказывать вам в разрешении. Например, для запуска make install с префиксом, являющимся системным путем, потребуется sudo, в то время как с префиксом, являющимся несистемным путем, sudo не будет запрашиваться. Как ОС решает, что для запуска исполняемого файла потребуется больше привилегий, чем у пользователя, даже до того, как программа что-то сделает?
Нет, это не делается при запуске исполняемого файла. Это делается, когда исполняемый файл пытается что-то сделать.
Os проверяет разрешения и возможности файловой системы (они не охватываются разрешениями файловой системы и включают в себя уменьшение уровня nice, mknode, некоторые низкоуровневые сетевые компоненты, уничтожение других процессов, перезагрузку, установку времени и т. Д.). Если у вас нет разрешений, вы не сможете этого сделать. Root обладает полным набором возможностей, включая CAP_DAC_OVERRIDE (игнорировать права доступа к файлу).
2 Иногда запуску программы не будет отказано в разрешении, но программа сможет делать больше вещей, если она запускается с помощью sudo. Например, при запуске du в каком-либо системном каталоге только с помощью sudo он сможет получить доступ к некоторому каталогу. Почему ОС не отказывает в разрешении на запуск такой программы или предпочитает дружественное уведомление, что перед запуском программы предпочтительнее?
ОС не может знать, что будет делать программа. Таким образом, программа должна проверить права доступа до ее запуска и решить, что делать. Это не должно делать это все же.
Примечание: на андроиде есть манифест, в котором приложение объявляет, какие привилегии оно может использовать. ОС уничтожит любое приложение, которое пытается использовать привилегию, которую не объявляет, и ОС не всегда гарантирует, что привилегия может быть соблюдена. например, доступ к сети может быть недоступен.
2 Правда ли, что всякий раз, когда sudo работает, su также работает, и всякий раз, когда su работает, sudo также работает? или с su пользователь может сделать больше, чем с sudo? Как ОС решает, когда sudo работает и когда нужен su?
sudo
и su
делать примерно то же самое. Некоторые различия заключаются в обработке переменных среды и других подобных проблемах безопасности. Однако оба они являются инструментами, позволяющими вам стать другим пользователем, и оба имеют пользователя root по умолчанию.
su
был оригинальный инструмент, он требует от вас ввести пароль пользователя / группы, на которую вы меняете.
sudo
является более новым и требует по умолчанию ввода собственного пароля, но его можно настроить так, чтобы он принимал пароль пользователя / группы, на которую вы переключаетесь, или вообще не вводил пароль. Он также позволяет много настроек, с какими командами он будет работать, для кого и как он будет аутентифицироваться с помощью этой программы для этого пользователя на этом компьютере. Кроме того, sudoedit
это является частью sudo
и может использоваться, чтобы разрешить редактирование от имени другого пользователя и избежать проблемы безопасности субшиллинга из редактора (вызов exec из редактора для запуска произвольного процесса с повышенными привилегиями).