Cada processo em um sistema Unix-like, assim como todos os arquivos, tem um proprietário (o usuário, seja real ou um sistema de "pseudo-usuário", como daemon
, bin
, man
, etc) e um proprietário do grupo. O proprietário do grupo para os arquivos de um usuário geralmente é o grupo principal desse usuário e, de maneira semelhante, todos os processos iniciados geralmente pertencem ao seu ID do usuário e ao seu ID do grupo principal.
Às vezes, porém, é necessário ter privilégios elevados para executar determinados comandos, mas não é desejável conceder direitos administrativos totais. Por exemplo, o passwd
comando precisa acessar o arquivo de senha de sombra do sistema, para que ele possa atualizar sua senha. Obviamente, você não deseja conceder privilégios de root a todos os usuários, apenas para que eles possam redefinir sua senha - isso sem dúvida levaria ao caos! Em vez disso, é preciso haver outra maneira de conceder temporariamente privilégios elevados aos usuários para executar determinadas tarefas. É para isso que servem os bits SETUID e SETGID. É uma maneira de dizer ao kernel para aumentar temporariamente os privilégios do usuário, enquanto durar a execução do comando marcado. Um binário SETUID será executado com os privilégios do proprietário do arquivo executável (geralmenteroot
) e um binário SETGID será executado com os privilégios de grupo do proprietário do grupo do arquivo executável. No caso do passwd
comando, que pertence root
e é SETUID, ele permite que usuários normais afetem diretamente o conteúdo do arquivo de senhas, de maneira controlada e previsível, executando com privilégios de root. Existem inúmeros outros SETUID
comandos UNIX-like sistemas ( chsh
, screen
, ping
, su
, etc), os quais requerem privilégios elevados para operar corretamente. Existem também alguns SETGID
programas em que o kernel altera temporariamente o GID do processo, para permitir o acesso a arquivos de log etc. sendmail
é um utilitário.
O sticky bit
objetivo é um pouco diferente. Seu uso mais comum é garantir que apenas a conta de usuário que criou um arquivo possa excluí-lo. Pense no /tmp
diretório. Tem permissões muito liberais, que permitem a qualquer um criar arquivos lá. Isso é bom, e permite que os processos dos usuários para criar arquivos temporários ( screen
, ssh
, etc, manter informações de estado em /tmp
). Para proteger os arquivos temporários de um usuário, /tmp
o bit pegajoso está definido para que somente eu possa excluir meus arquivos e somente você possa excluir os seus. Obviamente, o root pode fazer qualquer coisa, mas temos que esperar que o administrador do sistema não seja louco!
Para arquivos normais (ou seja, para arquivos não executáveis), não faz muito sentido definir os bits SETUID / SETGID. SETGID em diretórios em alguns sistemas controla o proprietário do grupo padrão para novos arquivos criados nesse diretório.
Eu acho que você quer dizer o bit "SGID" de um arquivo, que não é igual ao seu GID.
Aqui está um arquivo típico no meu computador (saída de ls -l):
Se você observar os 10 primeiros símbolos,
(a) -: Este é apenas um arquivo antigo simples (ao contrário de um diretório, link simbólico, canal etc. ...)
(b) rw-: o proprietário pode ler e gravar este arquivo, mas não executá-lo. O proprietário é "bristol", como você pode ver mais adiante na linha.
(c) r--: os membros do grupo ao qual esse arquivo pertence ("usuários" no exemplo) que não sejam o proprietário podem ler, mas não podem gravar ou executar esse arquivo.
(d) ---: Ninguém mais pode acessar este arquivo (exceto a raiz, é claro).
O campo GID é o que informa a qual grupo esse arquivo pertence - neste caso, "usuários".
O campo que você provavelmente quis dizer, com base na sua descrição, é o bit SGID, e aqui está uma explicação melhor do que eu poderia apresentar:
http://www.codecoffee.com/tipsforlinux/articles/028.html
A versão curta é: se um arquivo executável tem o bit SGID definido, qualquer pessoa que não esteja no grupo, mas pode executar esse arquivo temporariamente, obtém os direitos desse grupo enquanto o programa está sendo executado.
Por exemplo, se você possui um grupo "spool" que pode ler e gravar arquivos no diretório spooler de impressão, não deseja que ninguém mexa com esse diretório, mas deseja que eles possam imprimir arquivos, pode fazer algum programa ou script de impressão possui o grupo "spool" e define o bit SGID e, quando alguém inicia esse programa, o programa agora pode gravar no diretório do spooler sem que a pessoa que o executa tenha acesso total.
fonte
drwxrwxrwt .... 2 sys .... sys .... 1024 Jul 24 15:17 tmp
. O que significaabbbcccddt
(letra 't')? - Eu entendo que "d = diretório", "rwx = lê, escreve, executa"; mas nunca vi o 't' no final antes. Essa é uma permissão especial para a pasta tmp?O GID é, como você encontrou, o número de identificação de um grupo. É simplesmente uma maneira conveniente de o sistema operacional expressar o grupo (usuário) associado a algo (um processo, um arquivo etc.); em vez de um identificador de cadeia potencialmente longo, ele pode ser expresso como um número de tamanho fixo.
Em um valor de permissão de arquivo de quatro dígitos octais (por exemplo, 0755), o terceiro dígito especifica as permissões do grupo para o arquivo. Se você omitir o primeiro dígito, é o segundo dígito que especifica as permissões do grupo. Observe que os arquivos e diretórios são tratados da mesma forma nesse aspecto, mas que o significado exato de cada bit de permissão é um pouco não intuitivo no caso de diretórios.
Os dois conceitos estão relacionados, mas servem a propósitos muito diferentes.
Quanto à sua pergunta "é importante definir essas permissões?"; eles sempre são definidos como algo , mas como na maioria dos casos o dígito inicial é 0 ("nada de especial"), ele tende a ser omitido por questões de brevidade. A necessidade de especificar algum outro valor depende inteiramente do padrão de uso do arquivo ou diretório em questão.
fonte