Comando 'chmod g + s'

45

Olá, eu quero entender o papel do chmod g+scomando no Unix.

Eu também gostaria de saber o que ele faz nesse contexto específico:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Entendo todas as funções de comandos, exceto chmod g+se quero saber as diferenças entre os arquivos une as deuxresultantes dessa série de comandos.

otus
fonte

Respostas:

61
chmod g+s .;

Este comando define o ID do grupo (setgid) no diretório atual, escrito como ..

Isso significa que todos os novos arquivos e subdiretórios criados no diretório atual herdam o ID do grupo do diretório, em vez do ID do grupo principal do usuário que criou o arquivo. Isso também será passado para novos subdiretórios criados no diretório atual.

g+s afeta o ID do grupo do arquivo, mas não afeta o ID do proprietário.

Observe que isso se aplica apenas aos arquivos recém-criados . Os arquivos que são movidos ( mv) para o diretório não são afetados pela configuração setgid. Os arquivos copiados cp -ptambém não são afetados.

Exemplo

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Nesse caso, deuxpertencerá ao grupo, canardmas unpertencerá ao grupo do usuário que o criou, seja o que for.

Nota secundária sobre o uso de ponto e vírgula em comandos do shell

Diferente de cou perl, um comando shell só precisa ser seguido por um ponto e vírgula se houver outro comando shell na mesma linha de comando. Portanto, considere a seguinte linha de comando:

chgrp canard .; chmod g+s .;

O ponto e vírgula final é supérfluo e pode ser removido:

chgrp canard .; chmod g+s .

Além disso, se colocarmos os dois comandos em linhas separadas, o ponto e vírgula restante será desnecessário:

chgrp canard .
chmod g+s .
John1024
fonte
1
Os arquivos que são copiados (por exemplo, por cp) são de fato recém-criados. Se eles não herdarem a permissão do grupo, o programa de cópia estará jogando, como copiar para um arquivo temporário e depois movê-lo para o diretório de destino.
Kaz
1
@Kaz Bom ponto. Atualizei a resposta para esclarecer cp -pque substitui a configuração setgid.
precisa saber é o seguinte
Mas cp -psubstitui a configuração setgid? Em todas as implementações Unix existentes? O POSIX diz que não é especificado se uma falha na cópia do ID do usuário ou do grupo em cp -p resulta em uma mensagem de diagnóstico! No entanto, os bits S_SUID e S_SGID, respectivamente, precisam ser limpos nessa situação (por exemplo, se um arquivo for definido como bob, mas a propriedade do bob não puder ser copiada para que o arquivo seja de propriedade de janet, não faça com que seja setuid Janet.)
Kaz
" cp -psubstitui a configuração setgid?" De acordo com a especificação POSIX, é o que deve fazer. Faz isso em todos os sistemas Unix que eu usei. Você citou a parte da especificação referente ao que fazer para proteger a segurança no caso em que o ID do grupo não pode ser duplicado. Eu nunca me deparei com uma situação tão "impossível", não é?
precisa saber é o seguinte
7

Você pode alterar as permissões de arquivo com o comando chmod. No Unix, as permissões de arquivo, que estabelecem quem pode ter diferentes tipos de acesso a um arquivo, são especificadas por classes de acesso e tipos de acesso. Classes de acesso são grupos de usuários e cada um pode receber tipos de acesso específicos

Unix / Linux possui usuários e grupos de usuários que podem ser atribuídos para acesso a arquivos

as opções g + s são as seguintes:

g - as permissões que outros usuários do grupo de arquivos têm para isso

s - define o ID do usuário ou grupo na execução

Aqui está um exemplo de uso:

chmod =rwx,g+s filename

(permita que todos leiam, gravem e executem um arquivo específico e ative o ID do grupo)

Para definir / modificar as permissões de um arquivo, você precisa usar o programa chmod. Obviamente, somente o proprietário de um arquivo pode usar chmod para alterar as permissões de um arquivo. O chmod possui a seguinte sintaxe: arquivo (s) de modo chmod [opções] A parte 'mode' especifica as novas permissões para o (s) arquivo (s) que se segue como argumentos. Um modo especifica quais permissões do usuário devem ser alteradas e, posteriormente, quais tipos de acesso devem ser alterados. Digamos, por exemplo: chmod ax socktest.pl

Isso significa que o bit de execução deve ser limpo (-) para todos os usuários. (proprietário, grupo e o resto do mundo) As permissões começam com uma carta especificando quais usuários devem ser afetados pela alteração; pode ser um dos seguintes:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Isto é seguido por uma instrução de mudança que consiste em um + (bit definido) ou - (bit limpo) e a letra correspondente ao bit que deve ser alterado. Vamos ver alguns exemplos:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Números estranhos ... Você pode ter encontrado coisas como o chmod 755 em algum arquivo e, é claro, ficará se perguntando o que é isso. O problema é que você pode alterar todo o padrão de permissão de um arquivo de uma só vez, usando um número como o deste exemplo. Todo modo tem um número de código correspondente e, como veremos, existe uma maneira muito simples de descobrir qual número corresponde a qualquer modo. Cada um dos três dígitos no número do modo corresponde a um dos três trigêmeos de permissão. (u, g e o) Todo bit de permissão em um trigêmeo corresponde a um valor: 4 para r, 2 para w, 1 para x. Se o bit de permissão você adicionar esse valor ao número do trigêmeo de permissão. Se estiver desmarcada, você não adiciona nada. (Alguns de vocês podem perceber que, de fato,

Trigêmeo para u: rwx => 4 + 2 + 1 = 7

Trigêmeo para g: r-x => 4 + 0 + 1 = 5

Trigêmeo para o: r-x => 4 + 0 + 1 = 5

Que faz : 755

Portanto, 755 é uma maneira concisa de dizer 'Não me importo se outras pessoas lerem ou executarem este arquivo, mas apenas eu devo modificá-lo' e 777 significa 'todo mundo tem acesso total a esse arquivo'

referência perfeita

paralaxe
fonte
0

O resultado do comando ls dependerá do umask.

g + s definirá sgid para o arquivo. Confira aqui mais informações sobre o SUID SGID

portanto, se sua umask, por exemplo, for 022, o resultado será algo como:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Romeo Ninov
fonte
0

No Linux, uma das opções de montagem padrão para ext? fs é 'nogrpid | sysvgroups '. Portanto, o primeiro toque em un cria um arquivo com o ID do grupo igual a fsgid do processo de criação em que fsgid = egid.

chmod g + s., faz com que a criação de arquivo / diretório subsequente herde o ID do grupo da pasta pai e, se a coisa criada for um diretório, ele também recebe g + s definido como pai.

Aqui, toque em deux, cria deux, com grupo canard.

A semântica muda se a opção mount for 'grpid | bsdgroups ', nesse caso, a nova criação de arquivo / diretório herdaria a identificação do grupo de sua pasta pai, mesmo sem definir g + s para o pai.

Nizam Mohamed
fonte