Posso escrever um arquivo apenas com permissão de leitura? [duplicado]

1

Acabei de definir uma permissão somente leitura para um arquivo usando chmod 400 filename.txt depois disso, abro o arquivo via editor vi e edito e tento salvar usando: w, em seguida, diz E45: 'readonly' option is set (add ! to override) , então uso :w! . Em seguida, salve o arquivo editado com permissão somente leitura? Como isso pode ser possível?

Existem diferenças entre o Ubuntu e o Fedora que afetam as permissões de acesso?

    
por Roledenez 09.08.2014 / 07:04

2 respostas

1

Se o arquivo pertencer a você, você sempre poderá alterar as permissões no arquivo chamando chmod . Eu acho que o editor apenas altera as permissões implícitas, salva e reverte as permissões. Para realmente proibir a escrita, você também deve alterar o proprietário do arquivo.

    
por Barafu Albino 09.08.2014 / 07:28
6

Eu corri vim usando strace . Eu criei um arquivo em / tmp chamado "abc" com o conteúdo "foo", configurei somente leitura ( chmod 400 abc ), abri em vim ( strace -o vim.log vim abc ) e salvei usando ": wq!". / p>

Aqui está o strace log:

...
getcwd("/tmp", 4096)                    = 5
write(1, "[?25l\"abc\"", 11)         = 11
stat("abc", {st_mode=S_IFREG|0400, st_size=4, ...}) = 0
getxattr("abc", "system.posix_acl_access", 0x7fff5725fd60, 132) = -1 ENODATA (No data available)
stat("abc", {st_mode=S_IFREG|0400, st_size=4, ...}) = 0
getuid()                                = 1000
chmod("abc", 0100600)                   = 0
open("abc", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 9
write(9, "foo\n", 4)                    = 4
fsync(9)                                = 0
close(9)                                = 0
chmod("abc", 0100400)                   = 0
setxattr("abc", "system.posix_acl_access", "\x02\x00\x00\x00\x01\x00\x04\x00\xff\xff\xff\xff\x04\x00\x00\x00\xff\xff\xff\xff \x00\x00\x00\xff\xff\xff\xff", 28, 0) = 0
...

Podemos ver que vim chama stat para obter a permissão atual, então o equivalente a chmod(u+w) , depois a gravação, depois restaura as permissões originais (nesse caso, chmod(400) ).

    
por sleblanc 28.08.2014 / 05:39