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

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

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

«Это потому, что apt пишет в системные каталоги». Это поверхностный уровень, но я ищу уровень глубже. Есть ли что-то принципиально блокирующее однопользовательскую среду (a la pip + virtualenv)? «Вы можете просто строить из источника». Это обходное решение, но не затрагивает мой вопрос. Я не хочу исправлять краткосрочную проблему, и у меня есть root-доступ на всех моих машинах.
1
задан 28 March 2014 в 18:09

4 ответа

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

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

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

3
ответ дан 24 May 2018 в 10:20
  • 1
    Спасибо за ответ! Я знаю и использую обходные пути, но то, что я пытаюсь выяснить, - , почему я их использовал. Я считаю, что вы говорите, что проблема в том, что путь установки жестко запрограммирован сторонними разработчиками пакетов - почему это невозможно изменить? – PattimusPrime 28 March 2014 в 08:35

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

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

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

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

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

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

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

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

2
ответ дан 24 May 2018 в 10:20
  • 1
    Спасибо за ответ и благодарность за тщательность. Я понимаю общесистемный характер apt-get, но то, что я пытаюсь понять, - это , почему это должно быть именно так. – PattimusPrime 28 March 2014 в 18:16
  • 2
    Это не должно было быть так. Именно так и было разработано Ubuntu (и Debian). Ничто не остановило бы того, кто-то проектировал бы операционную систему, где обычным способом установки программного обеспечения был пользователь. – thomasrutter 28 March 2014 в 18:22

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

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

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

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

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

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

Получите исходный код. Измените каталог установки на что-то вроде $HOME. Скомпилируйте и постройте. упакуйте его в файл .deb. Создайте учетную запись для запуска. Подпишите код поведения ubuntu (я не уверен, что это необходимо). создайте ppa для себя. Загрузите пакет deb в ppa. добавьте ppa в свои источники. Запустите sudo apt-get update. Запустите apt-get install package.

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

Да и нет.

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

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

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

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

Мой шестой смысл подсказывает мне, что команда будет

apt-dont-get install pkg1 pkg2 ...
1
ответ дан 24 May 2018 в 10:20
  • 1
    Спасибо за ответ - это обстоятельно и касается моего вопроса. Однако я не понимаю, почему не было бы интереса к разработке однопользовательских функций в apt-get. Похоже, что эта функциональность будет очень полезна в некоторых случаях использования. – PattimusPrime 28 March 2014 в 20:07
  • 2
    Хорошая информация, но формат Q & amp; A в Q & amp; A ...? :) Idk, может быть, вы должны отредактировать в стандартный формат? Просто мысль. – chaskes 28 March 2014 в 20:39
  • 3
    @PattimusPrime Такие случаи в большинстве случаев встречаются редко, потому что в большинстве случаев администраторы устанавливают все необходимое программное обеспечение и amp; другим не нужно устанавливать программное обеспечение. Также факты, что построение из источника очень легко и доступно; что реализация такой функциональности будет бесполезной, пока разработчики программного обеспечения не реализуют ее там, где собственное программное обеспечение перестанет это делать apt-get. Кроме того, многие существующие программы зависят от других программ, и они ищут их в каталоге / usr. Для реализации такой функции потребуются изменения во всех существующих программных средствах, у которых есть зависимости (это не входит в тысячи). – Registered User 29 March 2014 в 09:41
  • 4
    Является ли нарушение политики Debian для установки файлов в $ HOME. Вы никогда не должны этого делать. Если что-нибудь, используйте /opt/package и chmod вместо этого каталога. – Braiam 29 March 2014 в 21:38
  • 5
    @Braiam: Я видел людей, рекомендующих устанавливать пакеты в $HOME/opt/, если у них нет необходимой привилегии для установки пакетов в /opt/ .. – Aditya 30 March 2014 в 12:10

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

-1
ответ дан 24 May 2018 в 10:20
  • 1
    Спасибо за ответ. Я ищу , почему редактирует только chmodded файлы. Мне кажется, что однопользовательская функциональность будет легко внедряться и очень полезна в некоторых областях (например, суперкомпьютерных кластерах) – PattimusPrime 28 March 2014 в 09:03

Другие вопросы по тегам:

Похожие вопросы: