Como descobri, ao usar umask, as permissões mais altas que você pode dar aos arquivos são 666. O que é feito por umask 0000
. Isso é devido às permissões de criação de arquivo padrão, que parecem 666 em todos os sistemas que eu conheço.
Sei que para arquivos precisamos de direitos executáveis para mostrar seu conteúdo.
Mas por que limitamos as permissões de criação de arquivo padrão em 666?
permissions
filesystems
files
Pedro
fonte
fonte
umask
que eu conheci sempre foi 0022, criando permissão padrão 644.umask 0000
- que ainda limita a permissões de 666. (Mas, aparentemente, pastas usar 777) de arquivoRespostas:
Até onde eu sei, isso é codificado em utilitários padrão. I
strace
d tanto atouch
criação de um novo arquivo e umamkdir
criação de um novo diretório.O
touch
rastreio produziu isso:enquanto o
mkdir
rastreio produziu isso:Além de codificar o processo de criação de arquivos / diretórios em C, não vejo uma maneira de modificar as permissões padrão. Parece-me, no entanto, que não tornar os arquivos executáveis por padrão faz sentido: você não deseja que nenhum texto aleatório seja acidentalmente mal interpretado como comandos do shell.
Atualizar
Para dar um exemplo de como os bits de permissão são codificados nos utilitários padrão. Aqui estão algumas linhas relevantes de dois arquivos no
coreutils
pacote que contém o código-fonte para ambostouch(1)
emkdir(1)
, entre outros:mkdir.c
:Em outras palavras, se o modo não for especificado, configure-o para
S_IRWXUGO
(leia-se: 0777) modificado peloumask_value
.touch.c
é ainda mais claro:Ou seja, conceda permissões de leitura e gravação a todos (leia-se: 0666), que serão modificados pelo processo
umask
de criação do arquivo, é claro.Você pode contornar isso programaticamente apenas: por exemplo, ao criar arquivos a partir de um programa C, em que você faz chamadas do sistema diretamente ou de um idioma que permite fazer uma chamada syscall de baixo nível (veja, por exemplo, Perl
sysopen
emperldoc -f sysopen
)fonte
umask file
eumask dir
. Defina dois valores padrão diferentes e fine. Mas agora não tenho como criar arquivos com permissões permanentes.mkdir(1)
oferece uma-m
opção para especificar o modo do diretório no momento da criação. Com os arquivos, no entanto, como a criação do arquivo usa oopen(2)
syscall, a ferramenta que você usa para criar o arquivo é a responsável por passar os bits de modoopen
e você não tem opinião sobre o assunto.install(1)
por padrão, copia seu arquivo para um novo local e define os bits de execução, mas isso ainda não está acontecendo no momento da criação.touch
por exemplo é responsável por definir os valores certos. Você sabe onde ele armazena os valores? Talvez eles sejam definidos em todo o sistema - para que possamos alterá-los? Porque eu quero me libertar ;) #Primeiro, não há padrão global; as permissões dependem do aplicativo que cria o arquivo. Por exemplo, este pequeno programa C criará um arquivo '/ tmp / foo' com permissões 0777 se umask for 0000 (em qualquer caso, as permissões serão 0777 e ~ umask):
Dito isto, muitos aplicativos criam arquivos com permissões 0666. Isso tem dois motivos:
fonte