1

Я обычно использую функцию mkdir для создания каталога (например, mkdir ("/home/dhw/test", S_IREAD | S_IWRITE))

Но я не могу сделать каталог в /usr /local /bin.

Я думаю, это проблема с властью.

Я уже знаю, что могу сделать эту работу с

system("sudo mkdir /usr/local/bin/test/");

и введите пароль пользователя root. Но я не хочу, чтобы пользователь получал права root вручную.

Что я должен делать?

2 ответа2

1

Почему бы не заставить программу иметь разрешение suid? Но, честно говоря, каталоги вне /home не должны быть затронуты. Однако, если вы настаиваете на этом, просто убедитесь на 100%, что проверки памяти тщательны и что уязвимостей нет, а использование suid разрешит эту проблему.

Другой способ - сделать эту программу членом корневой группы.

В общем, это странное требование касаться каталогов, что против FHS.

0

На этот вопрос уже есть принятый ответ, но, похоже, нужно немного разъяснить иерархию файлов Unix. Каждый, кто впервые сталкивается с файловой иерархией Unix, хочет ее изменить, даже не считая бывшего генерального директора Стива Джобса (совет в его общем направлении). Компоновка была кодифицирована для Linux в так называемом стандарте FHS (Стандарт иерархии файловых систем), который определяет местоположение и назначение каждого из типичных системных каталогов. В Википедии есть краткий список некоторых из них. Стандартная база Linux (LSB) идет дальше и описывает API-интерфейсы, которые должны присутствовать в LSB-совместимой системе, часть которой определяется FHS.

Способ Unix состоит в том, чтобы изолировать системные файлы Unix от файлов администратора и далее оба из файлов пользователя. Пользователю обычно разрешается использовать свой домашний каталог (обычно в структуре каталога /home), /tmp, /var /tmp и некоторые конкретные файлы, которые система может разрешить с помощью конфигурации или конфигурации администратора.

Администратор обычно имеет контроль над системой, но FHS резервирует несколько каталогов для администратора. В частности, /usr /local и /opt (включая некоторые другие связанные каталоги) зарезервированы системой для использования администратором. Они используются для установки программного обеспечения, которое не поддерживается или не предоставляется системой.

Система Linux, которая сегодня поддерживается и управляется создателем используемого дистрибутива, резервирует большую часть остальной иерархии файловой системы для себя. Такое разделение обязанностей помогает поддерживать безопасность и стабильность системы. При необходимости изменения могут быть внесены либо администратором, либо системой пакетов (если есть) дистрибутива. Популярные системы пакетов включают в себя Debian apt, Novell zypper, RedHat's yum или менеджер пакетов portage Gentoo. Большинство из этих менеджеров пакетов имеют средства для администратора, чтобы контролировать выбор, настройку и обслуживание системных пакетов.

В заключение разработчик приложения должен иметь в виду, что пользователь имеет ограниченный доступ к системе и не без оснований. Возиться с системными каталогами, вероятно, не в том направлении, если только для одной из целей, изложенных в FHS.

Если необходимо внести изменения, есть инструменты, доступные для обхода ситуации, включая разумное использование sudo, PolicyKit, ACL и атрибутов файлов (chmod и т.д.).

Первоначальный автор не объяснил назначение нужного ему каталога, поэтому более сложно ответить более конкретно. Я надеюсь, что этот ответ полезен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .