- Когда вы запускаете исполняемый файл, иногда ОС будет отказывать вам в разрешении. Например, для запуска
make install
префикса, являющегосяsudo
системным путем, не потребуется запрашивать префикс, являющийся несистемным путемsudo
. Как ОС решает, что для запуска исполняемого файла потребуется больше привилегий, чем у пользователя, даже до того, как программа что-то сделает? - Иногда запуску программы не будет отказано в разрешении, но программа сможет делать больше вещей, если она запускается
sudo
. Например, при работеdu
в каком-либо системном каталоге только сsudo
его помощью можно будет получить доступ к некоторому каталогу. Почему ОС не отказывает в разрешении на запуск такой программы или предпочитает дружественное уведомление, что перед запуском программы предпочтительнее? - Правда ли, что всякий раз, когда
sudo
работает,su
будет работать и всякий разsu
, когдаsudo
будет работать? или сsu
, пользователь может сделать больше, чем сsudo
? Как ОС решает, когдаsudo
работает и когдаsu
нужно?
permissions
sudo
StackExchange для всех
источник
источник
Ответы:
sudo
вы запускаете ее под именем другого пользователя. Если этот пользователь «способен делать больше», чем ваш пользователь, иsudo
конфигурация позволяет вам делать это от имени другого пользователя, тогда да,sudo
позволит вам делать больше вещей. Это не обязательно, однако. Если вы просто указываетеsudo
на начало командной строки, вы на самом деле думаете, что,sudo
какroot
правило, вы можете делать больше вещей, чем просто смертный.sudo
вам нужно ввести свой собственный пароль пользователя, а затем вы можете делать некоторые действия от имени целевого пользователя. Чтобы использоватьsu
, вам нужен пароль целевого пользователя, и, если он у вас есть, вы становитесь тем целевым пользователем, что касается системы, и можете делать все, что может сделать пользователь.Смотрите также
источник
chmod
если вы являетесь владельцем файла илиroot
.chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello
производит хороший "Привет, мир!" выход.Для целей, которые вы описали, ОС не решает, нужен ли вам sudo для первоначального запуска программы. Вместо этого, после того, как программа запускается и затем пытается сделать что-то, что не разрешено текущим пользователем (например, запись файла
/usr/bin
для установки новой команды), ОС предотвращает доступ к файлу. Действие по выполнению этого условия зависит от программы;make
прекращает работу, ноdu
после печати сообщения перейдет к следующему файлу / каталогу.su
Иsudo
команды два различных способа запуска программы с привилегиями суперпользователя. Они могут отличаться в незначительных деталях, таких как содержимое среды при запуске новой программы, в зависимости от используемых параметров. ОС не нужно решать, когда один или другой может работать.источник
su
иsudo
являются привилегированными программами.su
изменяет (после успешной аутентификации) действительный и эффективный идентификатор пользователя и группы на идентификатор пользователя, которому выsu
. Таким образом,su
похоже наlogin
. Обратите внимание, чтоsu
его можно использовать для изменения любого пользователя, а не только root.sudo
также изменяет реальные и эффективные идентификаторы пользователей и групп. До этого моментаsu
иsudo
похожи (но не связаны), за этим они очень разные.С помощью
su
вам нужно знать пароль цели, и после аутентификации вы можете делать все, что захотите, как этот пользователь. Использованиеsu
может быть ограничено установкойSU_WHEEL_ONLY
в/etc/login.defs
. Если он установлен,wheel
могут использовать только пользователи в группеsu
, в противном случае это не ограничено. Кроме того,su
это все или ничего.sudo
совершенно другой по отношению к этому. Сsudo
его помощью вы можете определить довольно сложные политики в/etc/sudoers
отношении того, чтоsudo
разрешено делать sudoer (вызывающему пользователю ). Например, вы можете определить политики, в которых определенные пользователи могут запускать только определенные программы с определенными привилегиями, в то время как другие пользователи могут запускать другие программы с другими привилегиями.Одной из ярких особенностей
sudo
является то, что вы можете настроить его так, что пользователь должен аутентифицировать себя с помощью своего собственного пароля (а не пароля цели). Таким образом,sudo
он стал очень популярным среди администраторов, поскольку он позволяет авторизовать пользователей выполнять только определенные привилегированные операции, не выдавая пароль суперпользователя, плюс вы получаете некоторую степень ответственности.источник
tl; dr Доступ определяется пользователем, который запускает приложение, и
sudo
запускает приложения как другой пользователь.Полная версия:
Это не знает. UNIX управляет разрешениями не на уровне приложения, а на уровне файловой системы: пользователям предоставляются разрешения на доступ к определенным файлам. Затем приложения запускаются от имени пользователя - с каждым запущенным процессом связан пользователь, связанный с ним. Этот пользователь используется для определения разрешений для этого приложения. Sudo работает путем запуска приложений от имени другого пользователя (с разрешениями, связанными с этим другим пользователем), а именно с правами
root
суперпользователя.Что касается ваших примеров:
Если у пользователя есть права на запись в определенный каталог, он может
make install
в этот каталог. В противном случае они могутroot
сделать это - используяsudo
.Если вы не можете получить доступ к файлам в каталоге,
du
запуск для вас также не может получить к нему доступ.root
может получить доступ практически к каждому файлу, поэтомуsudo du
(du
запускать от имениroot
) может получить доступ к ним тоже.Да и нет. Да, если программа на самом деле работать, он должен вести себя так же , как при
sudo
иsu
. Тем не менее,sudo
обеспечивает более детальный контроль над тем, кто может что выполнять, с помощью набора правил, хранящихся в/etc/sudoers
файле.su
проще - если вы знаете пароль целевого пользователя, вы можете запускать программы от имени этого пользователя.Последнее замечание: как приложение обрабатывает отказ в доступе (когда оно прерывает, игнорирует или предупреждает пользователя), зависит от приложения.
источник
Ни у кого еще нет ✓, поэтому я составил ответ, в котором есть все, о чем я мог подумать.
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 из редактора для запуска произвольного процесса с повышенными привилегиями).источник