Não posso recomendar que você se torne o proprietário de /usr/local
; para a maioria das situações, é provavelmente menos seguro do que usar sudo
.
Sua pergunta sugere dois motivos pelos quais você pode querer chown
/usr/local
.
O primeiro é evitar o uso do sudo
para instalar o software. Isto pode ler para alguns (como o autor de esta resposta ) dizendo que você quer trabalhar de forma eficiente, ou salvar as teclas digitadas necessário digitar sudo
e digite sua senha. Mas, provavelmente, quando você diz "desnecessário", está se referindo ao princípio de menor privilégio :
Por padrão,
root
possui o diretório. Isso significa que para instalar lá, você precisa usarsudo
. Para uma máquina de usuário único ou de desenvolvedor, isso parece um uso extra desnecessário do comando
Frequentemente ouço / leio pessoas opinando / reclamando ao longo das linhas de "Sou o único que usa esse sistema, então não preciso usar sudo
e digitar uma senha". Para os leitores que são dessa opinião, e porque é relevante aqui, vamos nos lembrar de uma razão básica de segurança para a raiz ter as coisas.
A maioria dos arquivos de programa instalados em um sistema Ubuntu possui o modo de arquivo 755, ou em notação simbólica rwxr-xr-x
, significando que qualquer usuário ou programa pode executá-los , mas somente o proprietário dos arquivos , root, pode modificá-los. (Tecnicamente, isso também exige que ninguém além do root tenha a permissão w
no diretório que os contém, para que outros usuários não possam excluí-los ou movê-los.)
Isso significa que você, o usuário humilde, pode executar qualquer programa. Se você tentar usar um programa para fazer algo que você não tem permissão para fazer, como executar uma operação de gravação em um arquivo de propriedade do root, ele será executado com erro. Isso faz com que um erro de digitação em algum comando, um aplicativo com bugs ou código mal-intencionado, menos propenso a atrapalhar seu sistema - a menos que esteja sendo executado como root, ele não terá permissão para fazê-lo. Isso é especialmente útil ao executar programas que interagem com a Internet.
Se você chown
/usr/local
, qualquer programa executando com seus privilégios poderia gravar arquivos lá, que poderiam ser executados posteriormente como root por algum motivo, como substituindo outro comando da mesma nome. /usr/local/bin
está no padrão $PATH
e em sudo
'< href="https://superuser.com/a/927599/105707"> secure_path
e vem antes de outros locais em ambos. Então, se eu tiver dois executáveis
/usr/local/bin/chown
/bin/chown
quando executo sudo chown ...
, o chown
em /usr/local/bin
será executado .
Mas você provavelmente já sabia disso, já que sua segunda razão é sobre segurança:
Além disso, se você tiver um software compilado localmente instalado em
/usr/local
, o software precisa atualmente que a raiz modifique a si mesmo ou instale plug-ins. Isso parece inseguro - quero usar somentesudo
quando souber EXATAMENTE o que acontecerá.
Caso seja necessário mencionar isso aqui, é absolutamente correto (de acordo com o FHS) instalar o software compilado localmente em /usr/local
, mas a própria compilação deve ser feita em algum lugar no seu $HOME
, sem sudo
, até a última etapa quando você digita sudo make install
ou equivalente.
Acho que você está sugerindo que, ao executar um programa instalado em /usr/local
como seu proprietário sem privilégios, pode usar erros de permissão específicos ao tentar se atualizar para ver se está tentando modificar algum outro local do sistema de arquivos por você de uma maneira que você não quer, para que você possa impedir isso de fazê-lo.
Isso pode ser útil. A implicação é que você confia no programa para fazer o que quiser em /usr/local
, mas não em outro lugar. Se ele solicitar permissões elevadas, você poderá se recusar a permitir sua atualização ou desinstalá-lo. Isso faz algum sentido para mim. Mas acho que tentar usar o /usr/local
como uma espécie de sandbox dessa maneira provavelmente não é uma boa ideia, ou pelo menos é improvável que seja a solução mais segura. Não é um local isolado corretamente ( /opt
é um pouco mais isolado, já que não está no padrão $PATH
). O programa pode gravar ou excluir algo em /usr/local
para causar danos. Outros programas (potencialmente mal escritos) que você executa podem escrever e executar códigos que você não conhece.
Se você está preocupado em permitir que um programa se atualize de forma segura, provavelmente deve procurar alternativas (específicas para o programa, como o python, por exemplo, ou pode procurar uma implementação semelhante à sua necessidade) ou use contêineres ou uma VM para testar softwares potencialmente inseguros) antes de expor uma localização do sistema (mesmo que relativamente user-y) a ser gravada por programas executados por um usuário normal.Parece-me provável que tenha efeitos imprevisíveis, uma vez que permitir programas elevou temporariamente as permissões com sudo
.