
- Главная
- Каталог
- Интернет технологии
- С/С++ Portal | Программирование
С/С++ Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика
Статистика канала
CPPORTAL
Купить билет
Реклама. ООО «Джуг Ру Груп». ИНН 7801341446setreuid (системный вызов 113 на x86_64).
При старте привилегированный сервис использует root-доступ ровно настолько, чтобы занять порт вроде 80 или 443. Затем вызывает один из системных вызовов установки UID (setuid, setreuid или setresuid), чтобы сменить идентичность на обычного непривилегированного пользователя, например www-data.
Например, Nginx использует setgid + initgroups + setuid при инициализации воркеров; OpenSSH использует setresuid. Выбор зависит от того, какой уровень контроля нужен над real, effective и saved UID.
Сбрасывая привилегии на раннем этапе, сервер формирует встроенную песочницу. Если в непривилегированной части будет эксплуатирован баг, атакующий окажется в контексте с низкими правами и не сможет легко захватить систему.
Ниже полный исполняемый пример на C, демонстрирующий работу setreuid. Сохраните, скомпилируйте и запустите через sudo, чтобы увидеть смену UID:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
printf("Starting as root. UID: %d, EUID: %d\n", getuid(), geteuid());
// Здесь обычно выполняется bind на порт 80...
// Сбрасываем привилегии до пользователя 1000 (обычно основной пользователь)
if (setreuid(1000, 1000) != 0) {
perror("Failed to drop privileges");
return 1;
}
printf("Privileges dropped! UID: %d, EUID: %d\n", getuid(), geteuid());
// Дальше приложение работает без прав root
return 0;
}{}
Важная деталь: поскольку вызов меняет real UID и одновременно устанавливает effective UID в значение, отличное от предыдущего real UID (0), ядро также обновляет saved set-user-ID до 1000. Это делает сброс необратимым. Процесс больше не сможет вернуть root через seteuid(0).
Обратите внимание на проверку ошибки setreuid(). Это критично. В man-странице прямо указано: «пропуск проверки возвращаемого значения setreuid() — серьёзная ошибка безопасности». Вызов может завершиться неуспешно даже от имени root — например, при временной ошибке выделения структур ядра или если новый real UID превышает лимит ресурсов RLIMIT_NPROC (EAGAIN). Продолжение выполнения без проверки означает, что «непривилегированный» процесс может фактически остаться с правами root.
Есть и интересный нюанс на уровне реализации.
В ядре Linux пользовательские идентификаторы — это атрибуты потока, а не процесса. Но POSIX требует, чтобы все потоки одного процесса имели общую идентичность.
Как это решается в пространстве пользователя: в реализации NPTL библиотеки glibc setreuid() — это обёртка, а не прямой системный вызов. При вызове обёртка рассылает сигнал реального времени (через tgkill) всем остальным потокам процесса. Обработчик сигнала в каждом потоке вызывает тот же системный вызов, чтобы синхронизировать учётные данные. В musl это реализовано иначе, но принцип тот же: один вызов в libc → множество обновлений учётных данных на уровне ядра.
etilqs_.
Вот почему:
Ранее префикс по умолчанию был "sqlite_". Но затем McAfee начал использовать SQLite в своём антивирусе и стал создавать файлы с именем "sqlite" в папке c:/temp. Это раздражало многих пользователей Windows. Эти пользователи затем шли гуглить "sqlite", находили номера телефонов разработчиков и звонили им ночью с жалобами. По этой причине префикс по умолчанию изменили на "sqlite", написанное задом наперёд.
Отзывы канала
всего 2 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
С/С++ Portal | Программирование — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 15.7K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 12.5, количество отзывов – 2, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 6293.7 ₽, а за 28 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий