В 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 для произвольных процессов;