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:)