Почему apt-get требует sudo?

12

Возможно, это глупый вопрос, но недавно я понял, что понятия не имею, почему с apt-get нет однопользовательской функциональности.

Ответы, которые я не ищу:

  • «Это потому, что apt пишет в каталоги системного уровня». Это поверхностный уровень, почему, но я ищу уровень глубже. Есть ли что-то принципиально блокирующее однопользовательскую среду (a la pip + virtualenv)?
  • «Вы можете просто построить из источника». Это обходной путь, но не решает мой вопрос. Я не хочу исправлять кратковременную проблему, и у меня все равно есть root-доступ на всех моих машинах.
PattimusPrime
источник
Я надеюсь, что вы знаете, что вы можете собрать любой пакет из исходного кода в вашем домашнем каталоге.
Jobin
Да, но я ищу причину, лежащую в основе ограничения apt-get. Строительство из источника не отвечает на это.
PattimusPrime
1
Я думаю, что на самом деле вы задаете вопрос: «Почему большинство программ для Linux не перемещаются?». Было бы вполне возможно разрешить apt-get устанавливать программное обеспечение в локальные пользовательские каталоги, но, поскольку большинство программ не поддерживают это, в этом нет особого смысла.

Ответы:

10

Почему apt-get требует sudo?

Не всегда. Вы можете прекрасно использовать apt-getбез sudo. Есть случаи, когда вам вообще не нужно sudo, например, использование, apt-get downloadкоторое загружает пакет в ваш текущий каталог , apt-get sourceкоторое загружает исходные файлы debian в ваш текущий каталог, changelogкоторое загружает и печатает журнал изменений данного пакета, и любую команду, которая имеет --simulate/ --dry-run/ --no-act(в случае installвам нужно также --no-download).

Это потому, что эти действия / команды не требуют записи системных каталогов.

Теперь зачем это apt-getнужно sudo? На самом деле это не так. Вы можете отказаться от apt-get, скачать пакет wgetи использовать его dpkg --extractи распаковать в любой каталог, который вам нравится. Там также, --instdirкоторый должен работать только для двоичного пакета.

Теперь, почему это не по умолчанию? Потому что это боль. Чтобы сделать то, что вы хотите, нам нужно будет дважды упаковать каждый пакет, один для правильного пути, а другой - для того, что вы хотите. При сборке бинарные файлы обычно должны знать, где находятся файлы и библиотеки, которые им нужны (в некоторых случаях это жестко запрограммировано при компиляции).

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

Подводя итог, это не тот способ, которым предназначалось apt-get, и я не знаю другого менеджера пакетов, подобного apt-get, который бы позволял вам это делать. В конце концов, apt-getэто всего лишь интерфейс для dpkg, который может сделать что-то из этого.

Braiam
источник
3

Информация в самом пакете определяет, куда будут устанавливаться файлы, поэтому вам нужно sudoкак писать, так /и изменять базу данных пакета.

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

Если вы работаете в системе, скажем, на работе, к которой у вас нет sudoдоступа, вы можете скомпилировать из исходного кода и установить каталог установки на свой домашний компьютер. Тогда нет необходимости sudo. При установке из исходного кода вы, как правило, не изменяете базу данных пакетов.

chaskes
источник
Спасибо за ответы! Я знаю и использую обходные пути, но я пытаюсь понять, почему я их использую. Я полагаю, вы говорите, что проблема в том, что путь установки жестко задан сопровождающими пакета - почему это нельзя изменить?
PattimusPrime
2

Это не глупый вопрос.

Уровни привилегий в операционной системе

Ubuntu - и даже любая современная операционная система - имеет концепцию разных уровней привилегий для разных программ. Программное обеспечение, инициированное пользователями, обычно работает с уровнем привилегий на основе пользователя, который по соображениям безопасности не имеет необходимого доступа для изменения системы - он может изменять только файлы, принадлежащие этому пользователю.

Чтобы выполнить любую модификацию операционной системы, которая может повлиять на систему в целом, а не только на файлы пользователя, требуется более высокий уровень привилегий, который в Linux называется привилегиями «суперпользователя» (или обычно называется "корень"). Этот уровень привилегий имеет беспрепятственный доступ ко всей операционной системе, что позволяет ей изменять или уничтожать все файлы для всех пользователей.

Роль apt-get

Когда вы устанавливаете программное обеспечение через apt-get, вы устанавливаете программное обеспечение, которое будет доступно для всей системы . Таким образом, программное обеспечение будет не просто помещаться в домашний каталог пользователя для запуска только этим пользователем, но оно будет установлено в общесистемном каталоге приложения (например, в / usr, / etc, / var и т. Д.). ) для запуска всеми пользователями. Чтобы изменить эти каталоги, вам нужны привилегии суперпользователя. Ни один непривилегированный пользователь не может изменять эти каталоги, потому что в противном случае непривилегированное программное обеспечение может связываться с системой.

Если вы попытаетесь установить что-либо, используя apt-get, не предоставляя apt-get привилегии суперпользователя, первое препятствие, которое он не сможет преодолеть, - это получить блокировку для записи в свой собственный каталог программного обеспечения. Являясь общесистемной утилитой, apt-get поддерживает каталог установленного программного обеспечения, который, естественно, требует прав суперпользователя для редактирования, чтобы непривилегированное программное обеспечение не могло связываться с ним. Но даже если бы вы могли как-то преодолеть это препятствие (например, изменив права доступа к файлам), многие дальнейшие шаги по установке программного обеспечения все равно не будут выполнены, поскольку процедура установки будет зависеть от записи в несколько системных каталогов.

Используя Linux, можно устанавливать программное обеспечение без привилегий суперпользователя, но вам нужно написать его самостоятельно (например, сценарии оболочки) или скомпилировать его самостоятельно и запустить скомпилированные исполняемые файлы напрямую. Проще установить его для всей системы, используя apt-get (и другие утилиты на основе APT, такие как aptitude, synaptic или Ubuntu software center), если у вас есть для этого доступ.

thomasrutter
источник
Спасибо за ответ, и спасибо за тщательность. Я понимаю общесистемную природу apt-get, но я пытаюсь понять, почему так должно быть.
PattimusPrime
1
Так не должно быть. Так получилось, что Ubuntu (и Debian) были спроектированы так. Ничто не помешало бы кому-то спроектировать операционную систему, в которой нормальный способ установки программного обеспечения был для каждого пользователя.
Томасруттер
1

Почему apt-get по умолчанию устанавливается в / (или аналогичные) каталоги?

Простая причина этого заключается в том, apt-getчто не решается, куда устанавливать программное обеспечение. Это решается разработчиками и кодируется внутри самого приложения.

Могу ли я установить в другие каталоги?

Да, вы можете установить в другие каталоги. Для программного обеспечения с открытым исходным кодом получите исходный код, измените каталог установки, скомпилируйте, соберите и установите его. Обычно включенный configureсценарий содержит параметр , позволяющий указать, куда устанавливать. Это обычно --prefix.

Но я настаиваю на использовании apt-get. Что делать сейчас?

ОК. Есть еще способ сделать это с помощью apt-get, хотя для конечного пользователя это будет слишком много. Следуйте шагам.

  1. Получить источник.
  2. Измените каталог установки на что-то вроде $HOME.
  3. Скомпилируйте и соберите.
  4. упакуйте его в файл .deb .
  5. Создать учетную запись панели запуска.
  6. Подпишите кодекс поведения Ubuntu (я не уверен, нужен ли он).
  7. создать PPA для себя .
  8. Загрузите пакет deb в ppa.
  9. добавьте ppa к вашим источникам.
  10. Беги sudo apt-get update.
  11. Беги apt-get install package.

Это было слишком легко / сложно. Можно ли выбрать каталог во время установки?

Да и нет.

Да, потому что это возможно, некоторые программы используют этот метод, единственный, который я знаю, это Qt5. У него есть файл .run, который при выполнении запрашивает каталог установки среди многих других входных данных.

Нет, потому что этот метод не использует apt-get.

Могу ли я сделать это легко когда-нибудь, с apt-get?

Я не думаю, что разработчики apt-getи / или разработчики программного обеспечения были бы заинтересованы в этом, но может быть разработано какое-то программное обеспечение, которое будет выполнять этапы исходного кода, изменения, компиляции, сборки и установки , просто запрашивая каталог установки.

Мое шестое чувство говорит мне, что команда будет

apt-dont-get install pkg1 pkg2 ...
зарегистрированный пользователь
источник
Спасибо за ответ - он тщательный и отвечает на мой вопрос. Однако я не понимаю, почему не было бы интереса превращать однопользовательскую функциональность в apt-get. Кажется, что эта функциональность была бы очень полезна в определенных случаях использования.
PattimusPrime
Хорошая информация, но формат вопросов и ответов в рамках вопросов и ответов ...? :) ИДК, может быть, вам следует отредактировать в стандартном формате? Просто мысль.
Часов
@PattimusPrime Такие случаи в основном редки, потому что в большинстве случаев администраторы устанавливают все необходимое программное обеспечение, а другим не нужно устанавливать программное обеспечение. Также факты о том, что сборка из исходного кода очень проста и что реализация такой функциональности была бы бесполезна, пока разработчики программного обеспечения не внедрили ее там, собственное программное обеспечение не позволит apt-getразработчикам сделать это. Кроме того, многие существующие программы зависят от других программ, и они ищут их в каталоге / usr. Реализация такой функциональности потребует изменений во всех существующих программах, которые имеют зависимости (это не касается тысяч).
Зарегистрированный пользователь
Является нарушением политики Debian для установки файлов в $ HOME. Вы никогда не должны делать это. Если что, используйте /opt/packageвместо этого каталог chmod.
Брайам
@Braiam: я видел людей, рекомендующих устанавливать пакеты, $HOME/opt/если у них нет необходимых прав для установки пакетов в /opt/..
Aditya
-1

Потому что это редактирование файлов, которые chmodded, так что вы не можете их использовать. Вы можете быть в состоянии chmod их, так что вы не можете, я не рекомендую делать это, хотя

нетерпеливость
источник
Спасибо за ответы. Я ищу, почему он редактирует только файлы chmodded. Мне кажется, что однопользовательские функции были бы просты в реализации и чрезвычайно полезны в некоторых областях (например, суперкомпьютерные кластеры)
PattimusPrime