Criando arquivos quando “sudoed” bagunça permissões e usuários

2

Eu tenho alguns problemas para instalar alguns pacotes que eu compilei da fonte. Tudo parece funcionar bem, até eu tentar usar os arquivos instalados em um lugar global.

Acontece que as permissões e usuários / grupos dos arquivos recém-criados estão todos confusos. É muito fácil para mim replicar com um simples diretório e comandos de criação de arquivos:

$ sudo mkdir /usr/local/bar
$ sudo touch /usr/local/bar/foo
$ ls -l /usr/local
total 11M
drwxr--r--  2 root root 4,0K jul 24 23:56 bar/
[...]
$ ls -l /usr/local/bar/
ls: cannot access '/usr/local/bar/foo': Permission denied
total 0
-????????? ? ? ? ?            ? foo
$ sudo ls -l /usr/local/bar/
total 0
-rw-r--r-- 1 root root 0 jul 24 23:56 foo

Como pode ser visto no exemplo acima, o diretório criado parece bem inicialmente, mas ao olhar dentro dele o usuário, o grupo e tudo o mais para os arquivos está totalmente bagunçado. Eles parecem bem ao olhar para ele da perspectiva de superusuário com sudo .

O uso de chown ou chmod não importa, desde que eu use sudo , independentemente do que eu faça, resultando no mesmo problema.

Meu arquivo /etc/sudoers (sem comentários):

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

myusername  ALL=NOPASSWD: ALL

Tudo deve ser padrão, exceto pela última linha que adicionei para não precisar escrever a senha todas as vezes.

Eu tenho uma instalação 16.04 totalmente atualizada.

Poderia haver algo errado com a minha instalação? Algo de errado com sudo ou como eu o uso? Mais alguma coisa?

Saída de umask -S conforme solicitado:

$ umask -S
u=rwx,g=r,o=r
$ sudo bash -c "umask -S"
u=rwx,g=r,o=r

e

$ grep '^UMASK\|^USERGROUPS_ENAB' /etc/login.defs
UMASK       033
USERGROUPS_ENAB no
    
por Some programmer dude 25.07.2016 / 00:13

1 resposta

3

O problema em seu sistema é que suas configurações de umask são um pouco estranhas / confusas.

Para informações gerais sobre umask , por favor consulte O que é "umask" e como funciona?
Em suma, podemos dizer que o umask define o conjunto de permissões padrão para novos arquivos. Está configurado em /etc/login.defs .

O valor padrão para umask é 022 , o que resulta em permissões padrão para novos arquivos serem rwxr-xr-x (proprietário: acesso total, grupo: leitura / execução, mundo: leitura / execução).

Você alterou essa configuração para 033 , o que resulta em permissões padrão de rwxr--r-- , ou seja, nenhuma permissão de execução para grupos e outros.

O problema que enfrentamos quando removemos permissões de execução de um diretório é que ele não fica mais navegável. Você precisa da permissão de execução para listar o conteúdo de um diretório. Como os diretórios recém-gerados têm execução para todos, mas seu proprietário recusou, somente o usuário proprietário (aqui, root) pode listar o conteúdo do diretório por padrão.

Você tem duas opções:

  • Guarde o umask e adicione manualmente permissões de execução para outras pessoas usando chmod +x em todos os diretórios onde você precisar deles.

    Isso é muito trabalho e você provavelmente irá esquecê-lo de vez em quando. Só faça isso se você tiver um bom motivo para um umask não padrão.

  • Redefina o umask de volta ao seu padrão 022 .

    Para fazer isso, abra o arquivo /etc/login.defs com seu editor de texto favorito como raiz, por exemplo, usando sudo nano /etc/login.defs .

    Pesquise por esta linha:

    UNAME       033
    

    E substitua-o pelas configurações padrão novamente:

    UNAME       022
    

Além disso, também vi que você tem USERGROUPS_ENAB definido como no , mas o padrão é yes . Essa configuração não apenas torna as permissões do grupo umask iguais às permissões do proprietário para usuários não raiz, mas também gera automaticamente (e exclusão, se não for mais necessário) dos grupos principais dos usuários (mesmo nome e ID como usuário) .

Eu pessoalmente recomendaria redefinir essa linha para seus padrões também, a menos que você tenha uma razão para não fazer isso.

Portanto, pesquise na linha

USERGROUPS_ENAB no

e substitua por

USERGROUPS_ENAB yes
    
por Byte Commander 25.07.2016 / 00:55