Por que chmod não está fazendo o que eu disse a ele para fazer?

0

Eu criei um script curto para executar algum programa 10 vezes e salvar a saída em um arquivo. Enquanto eu estava configurando as permissões executáveis, achei que seria interessante remover a permissão de gravação, para que o script não pudesse ser alterado sem o acesso sudo / root. Mas o que eu consegui foi isso:

use@ubuntu:~/some/folder$ sudo chmod -w Run_SIM.sh chmod: Run_SIM.sh: new permissions are r-xrwxr-x, not r-xr-xr-x

Por quê?

    
por NonStandardModel 11.11.2017 / 09:57

1 resposta

1

Em suma, porque você está removendo a permissão do usuário quando não especifica o que deve ser alterado. Você pode especificar qual u ser, g roup, o ther para definir permissões para:

$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar 
$ chmod u-w bar 
$ ls -l bar
-r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod g-w bar 
$ ls -l bar
-r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod o-w bar 
$ ls -l bar
-r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar

O u, g, o na frente da permissão indica qual dos campos de permissão para alterar - para usuário, grupo e outros.

Além disso, você tem o especial a ll:

$ chmod a+w bar
$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar

Um atalho comumente usado por muitos é o octal, que é construído com três dígitos, 0-7. Primeiro dígito representa usuário, segundo grupo e terceiro.

No sistema octal, 1 significa expecute, 2 significa write e 4 significa read. Você soma os modos desejados, portanto, leia e execute é 5, e somente leitura é 4. Para tornar o arquivo lido + executar para todos e escrever para o proprietário em octal, você executará chmod 755 filename . Um modo de 740 seria todo para o proprietário, lido para o grupo e nenhum para o outro.

O bom dos modos octal é que você define todos os modos de uma vez, então não há mais surpresas escondidas .

Para reservar a edição de um script para o root, primeiro você precisa definir o proprietário do arquivo como root, usando sudo chown root:root filename e, em seguida, sudo chmod g-w,o-w filename - ou usando octal sudo chmod 755 filename

Se você for para a linha 301 do código-fonte você Veremos o código-fonte responsável por imprimir esta mensagem de aviso. Basicamente, calcula o que os usuários ingênuos podem pretender e imprimem a diferença. É um comportamento ligeiramente interessante que eu não estava ciente:)

    
por vidarlo 11.11.2017 / 11:02