Я не могу рекомендовать стать владельцем /usr/local
; для большинства ситуаций это, вероятно, менее безопасно, чем использование sudo
.
Ваш вопрос предлагает две причины, по которым вы можете захотеть chown
/usr/local
.
Во-первых, чтобы избежать необходимости использовать sudo
для установки программного обеспечения. Для некоторых (например, автора этого ответа ) это может означать, что вы хотите работать эффективно или сохранить нажатия клавиш, необходимые для ввода sudo
и ввода пароля. Но, вероятно, когда вы говорите «ненужный», вы вместо этого ссылаетесь на принцип наименьших привилегий :
По умолчанию root
владеет каталогом. Это значит, что для установки там нужно пользоваться sudo
. Для компьютера с одним пользователем или разработчика это кажется ненужным дополнительным использованием команды
Я довольно часто слышу / читаю людей, высказывающих мнение / жалующихся по типу «Я единственный, кто использует эту систему, поэтому мне не нужно использовать sudo
и вводить пароль». Для читателей, которые придерживаются этого мнения, и поскольку это актуально здесь, давайте напомним себе об основной причине безопасности для корня к собственным вещам.
Большинство программных файлов, установленных в системе Ubuntu, имеют файловый режим 755 или в символической записи rwxr-xr-x
, что означает, что их может выполнить любой пользователь или программа , но изменять их может только владелец файлов root. (Технически это также требует, чтобы никто, кроме root, не имел w
разрешения на каталог, который их содержит, поэтому другие пользователи не могут удалять или перемещать их.)
Это означает, что вы, скромный пользователь, можете выполнить любую программу. Если вы попытаетесь использовать программу для выполнения действий, для которых у вас нет разрешения, например, для выполнения операции записи в файл, принадлежащий пользователю root, произойдет ошибка. Это делает опечатку в какой-либо команде, ошибочном приложении или вредоносном коде менее вероятной ошибкой вашей системы - если она не работает от имени root, у нее не будет разрешения на это. Это особенно полезно при запуске программ, которые взаимодействуют с Интернетом.
Если вы chown
/usr/local
, любая программа, работающая с вашими привилегиями, может записывать туда файлы, которые впоследствии могут быть выполнены от имени пользователя root по какой-либо причине, например, путем замены другой команды с тем же именем. /usr/local/bin
находится в по умолчанию $PATH
, и в sudo
«с secure_path
, и речь идет , прежде чем в других местах в обоих. Так что, если у меня есть два исполняемых файла
/usr/local/bin/chown
/bin/chown
когда я исполняю sudo chown ...
, в будет выполняться .chown
/usr/local/bin
Но вы, наверное, уже все это знали, поскольку ваша вторая причина связана с безопасностью:
Кроме того, если у вас установлено локально скомпилированное программное обеспечение /usr/local
, ему в настоящее время необходим root для изменения себя или установки плагинов. Это кажется небезопасным - я хочу использовать только sudo
тогда, когда я точно знаю, что произойдет.
На тот случай, если здесь необходимо упомянуть об этом, абсолютно правильно (в любом случае, в соответствии с FHS) устанавливать локально скомпилированное программное обеспечение /usr/local
, но сама компиляция должна выполняться где-то в вашем $HOME
, без sudo
, до последнего шага, когда вы печатаете sudo make install
или эквивалентны.
Я думаю, вы предполагаете, что, запустив программу, установленную в /usr/local
качестве ее непривилегированного владельца, вы можете использовать определенные ошибки прав доступа, возникающие при попытке обновить себя, чтобы увидеть, что она пытается изменить другое расположение файловой системы, не принадлежащее вам, так, как вы не хочу, чтобы вы могли помешать этому.
Это может быть полезно. Подразумевается, что вы доверяете программе делать все, что ей нравится /usr/local
, но не где-то еще. Если он запрашивает повышенные разрешения, вы можете отказать ему в обновлении или удалить его. Это имеет некоторый смысл для меня. Но я думаю, что пытаться использовать /usr/local
в качестве своего рода песочницу таким способом, вероятно, не очень хорошая идея, или, по крайней мере, вряд ли это будет самое безопасное решение. Это не должным образом изолированное место ( /opt
немного более изолированно, так как не по умолчанию $PATH
). Программа может написать или удалить что-то, что /usr/local
может причинить вред. Другие (потенциально плохо написанные) программы, которые вы запускаете, могут писать и выполнять код там, о котором вы не знаете.
Если вы беспокоитесь о том, чтобы позволить программе безопасно обновлять себя, вам, вероятно, следует поискать альтернативы (возможно, специфичные для программы, как, например, с python), или вы могли бы искать оснастку или аналогичную реализацию, которая соответствует вашим потребностям, или использовать контейнеры или виртуальная машина для тестирования потенциально небезопасного программного обеспечения), прежде чем открывать системное местоположение (даже относительно пользовательское) для записи программами, запускаемыми обычным пользователем. Мне кажется, что это может привести к непредсказуемым последствиям, так как разрешение программам временно повысить разрешения sudo
.
/usr/local/bin
могут выполняться команды в этом корне (а также других пользователях)? Разве они не должны принадлежать пользователю root? Кроме того, команды корневых применений - в том числе команд в/usr/local/sbin
--may зависит от общих библиотек/usr/local/lib
. Изменение этих библиотек может привести к произвольным изменениям в поведении команд, которые их используют. Настаивать на том, что просто/usr/local/sbin
оставаться владельцем root, кажется совершенно произвольным.Для программного обеспечения только вам нужно использовать свой домашний каталог вместо
/usr/local
.Вместо того, чтобы менять владельца
/usr/local
или запускать команды от имени пользователя root, когда вы этого не хотите, вам следует просто настроить свои сборки так, чтобы они устанавливались в вашем домашнем каталоге вместо/usr/local
. Это решает все потенциальные проблемы с изменением владельца/usr/local
, включая то, как егоbin
иsbin
подкаталоги находятся наroot
пути России.Если вам нужно разрешить другим пользователям запускать ваше программное обеспечение, вы можете предоставить им доступ. На самом деле, они, вероятно, уже смогут, потому что по умолчанию ваш домашний каталог имеет разрешающий доступ для чтения и выполнения . (Если вы не хотите этого, вы можете изменить его довольно легко, просто используя
chmod
любые файлы или каталоги, которые вы хотите сделать приватными, и, возможно, также изменив свойumask
.)С установленным программным обеспечением в вашей домашней директории, исполняемые файлы , которые пошли бы в
/usr/local/bin
вместо этого идти . Вы получите другие подкаталоги вашего домашнего каталога, соответствующие подкаталогам того программного обеспечения, которое вам нужно установить. Обычно это происходит автоматически при установке программного обеспечения из исходного кода./home/username/bin
/usr/local
Конфигурирование ваших сборок
Большая часть программного обеспечения, которое вы создаете из исходного кода, имеет этап, на котором вы запускаете
Для подавляющего большинства программного обеспечения, поставляемого со
configure
скриптом, который может быть запущен таким образом, по умолчанию конфигурируется сборка для установки внутри,/usr/local
когда вы в конечном итоге запускаетеsudo make install
ее установку. Причина в том, что это неявно эквивалентно выполнению:Чтобы настроить сборку для установки в домашний каталог, используйте вместо этого:
На практике в Ubuntu пути к домашним каталогам не содержат пробелов, других пробелов или других символов, которые будут обрабатываться подобной оболочкой, например
*
, если вы не настроили свою учетную запись довольно странно, вы можете просто набрать:(Однако я не рекомендую использовать это для написания сценариев . Кроме того, в некоторых других ОС, таких как macOS, пути к домашним каталогам пользователей нередко содержат пробелы.)
Или, если вы предпочитаете, вы можете ввести полный путь к домашней директории:
(
username
Конечно, замените ваше фактическое имя пользователя. Если по какой-то причине вашего домашнего каталога нет,/home
вам придется соответствующим образом изменить его.)Установка ваших сборок
После запуска
make
вы можете привыкнуть к запускуsudo make install
, но когда вы устанавливаете в свой домашний каталог, вам не нужно запускать его как root, так что вы можете - и должны --omitsudo
. Просто беги:Точно так же для программного обеспечения, которое поддерживает
uninstall
цель:Это именно то, что вы просили ... просто в вашем домашнем каталоге, а не
/usr/local
.Запуск ваших программ
Возможно
bin
подкаталог вашего домашнего каталога является:$PATH
, или$PATH
если вы просто выйдите и вернетесь.Причина в том, что
.profile
файл в вашем домашнем каталоге, который содержит команды, которые запускаются при входе в систему, содержит это по умолчанию для учетных записей пользователей, созданных в большинстве версий Ubuntu (включая первоначальную учетную запись администратора, созданную при установке ОС):Этот код запускается, когда вы входите в систему (потому что он есть
.profile
) и размещает ваш личныйbin
каталог$PATH
только в том случае, если он существует в то время. Вот почему вам может потребоваться выйти из системы и вернуться обратно.Старые версии, такие как Ubuntu 14.04, а также новые версии, такие как Ubuntu 17.10, поставляются с этим. Тем не менее, Ubuntu 16.04, который, вероятно, является самым популярным релизом на момент написания этой статьи, имеет следующее:
Это просто добавляет
bin
подкаталог вашего домашнего каталога - а также.local/bin
подкаталог - в ваш$PATH
, не проверяя, существуют ли эти каталоги на самом деле. Так что если вы используете 16.04, или при обновлении от системы , которая была 16,04 , когда была создана ваша учетная запись пользователя, тоbin
подкаталог вашего домашнего каталога, скорее всего , уже в вашем$PATH
.Ваш
.profile
файл копируется из/etc/skel
каталога при создании учетной записи пользователя. Если ваша учетная запись пользователя была создана в более старом выпуске Ubuntu, она получила эту версию.profile
и не была изменена - для вашей учетной записи пользователя - путем обновления до более позднего выпуска.Как только
bin
подкаталог вашего домашнего каталога окажется в вашем$PATH
, вы сможете запускать программы, исполняемые файлы которых установлены там, просто вводя их имена, так же, как вы могли бы делать это с программами, установленными менеджером пакетов Ubuntu или установленными внутри/usr/local
..local
ВариантВозможно, вы заметили, что
.profile
файл по умолчанию для учетных записей пользователей, созданный в некоторых выпусках Ubuntu, в том числе в 16.04, как описано выше, добавляет не только$HOME/bin
ваш путь, но и$HOME/.local/bin
. Если ваш.profile
не добавляет это, но вы хотите, чтобы, то вы можете просто отредактировать его в.Хотя это часто используется для хранения настроек и кэшированных данных , вы также можете установить программное обеспечение внутри
.local
подкаталога вашего домашнего каталога. Вы должны чувствовать себя свободными в этом, так как с точки зрения юзабилити и безопасности--prefix="$HOME/.local"
это похоже на--prefix="$HOME"
.Помните, что файлы и каталоги, которые начинаются с
.
, не отображаются по умолчанию в графических браузерах файлов (используйте Ctrl+, Hчтобы их отобразить или скрыть) илиls
командой (передайте флаг-A
или,-a
чтобы показать их). Это может быть не то, что вы хотите, или это может быть именно то, что вы хотите. Это вопрос личных предпочтений.Однако я заметил, что некоторые автоматизированные менеджеры пакетов на основе исходного кода, которые создают и устанавливают программное обеспечение в своем домашнем каталоге, используют
$HOME/.local
. На самом деле я не знаю, насколько это распространено - я надеюсь продолжить исследование и обновить этот ответ - но вы можете предпочесть просто использовать$HOME
вещи, которые вы компилируете вручную. Таким образом, будет ясно, откуда все пошло. И если есть столкновение, программное обеспечение все еще может сосуществовать приемлемо.Вы также можете намеренно установить некоторое программное обеспечение в
$HOME/.local
и другое программное обеспечение в$HOME
. Тебе решать. Какая быbin
директория ни была первой в вашей$PATH
переменной среды, это та, из которой будет выполняться команда, в случае, если команды с одинаковыми именами существуют в обеих.Заслуга Zanna и Videonauth для указывая на ошибки в предыдущей версии этого ответа, о том, каких релизах Ubuntu есть какой код по умолчанию в
.profile
, и помогают мне исправить их (смотрите также здесь ).источник
Если sudo вызывает такие неудобства, просто обновите / etc / sudoers, чтобы вам не приходилось вводить пароль при запуске sudo. Я считаю, что это лучшее решение, чем смена владельца / usr / local.
источник
/usr/local
необходимо использовать sudo, что потенциально опасно.