Como limpo a permissão "s" em um diretório no Linux?

24

Eu tenho um diretório que está aparecendo com a máscara de permissão drwsrwsr-x. Quando tento redefinir as permissões para 755o S ainda permanece.

O que são os "s" e por que não consigo alterar as permissões novamente para 775 ( drwxrwxr-x)?

Matt Elhotiby
fonte

Respostas:

25

Os s que você está vendo na posição "execute" na coluna user e group são os bits SetUID (Definir ID do Usuário na Execução) e SetGID (Definir ID do Grupo na Execução).

Permissões de arquivo Unix são na verdade um número octal de 4 dígitos SUGO

  • S controla os bits SetUID (4), SetGID (2) e "Sticky" (1)
  • U controla os bits de Leitura (4) / Gravação (2) / Execução (1) para o proprietário do arquivo
  • G controla os bits de leitura / gravação / execução do grupo de arquivos
  • O controla os bits de leitura / gravação / execução para todos os outros.

Você pode remover os bits setuid do seu diretório com chmod ug-s directory, ouchmod 0755 directory

Para obter mais informações, consulte a página de manual chmode esta página da Wikipedia sobre o bit SetUID .

Hrvoje Špoljar
fonte
É "sgid" (não "u").
Pausado até novo aviso.
"qual é o drwsrwsrwx?" <- verifique novamente
Hrvoje Špoljar
6
chmod 0755se não limpar o bit setuid, pelo menos não no Linux. Atualmente, estou testando em outros sistemas.
FUZxxl
1
O POSIX diz que sua implementação é definida para outros tipos de arquivos que não os regulares, chmodcom um modo octamal que apaga os bits setuid, setgid e vtx.
FUZxxl
2
Para limpar o bit setuid em um diretório no Linux, use chmod 00755; veja unix.stackexchange.com/q/393531/46851
Roger Lipscombe
23

setuid e setgid

setuid e setgid (abreviação de ID do usuário definido na execução e ID do grupo definido na execução, respectivamente) são sinalizadores de direitos de acesso ao Unix que permitem aos usuários executar um executável com as permissões do proprietário ou grupo do executável. Eles geralmente são usados ​​para permitir que os usuários de um sistema de computador executem programas com privilégios temporariamente elevados, a fim de executar uma tarefa específica. Embora os privilégios de ID de usuário ou de grupo assumidos fornecidos nem sempre sejam elevados, eles são específicos, no mínimo.

Para remover os bits setuid e setgid numericamente, você deve prefixar o padrão de bits com um 0(por exemplo: 0775torna - se 00775).

Execute para excluir setuid e setgid:

chmod 00775 path

ou

chmod a-st path
ooshro
fonte
Está no diretório, não no arquivo
Hrvoje Špoljar 23/02
1
um diretório é também um arquivo em um sistema de arquivos Unix, o que ooshro diz é completamente correta
lynxman
sim, é tudo um arquivo, mas a descrição não se encaixa, pois você não executa algo parecido com drwxrwxr-x: |
Hrvoje Špoljar 23/02
No unix, o inode é o que obtém as permissões.
Chris
2
O GNU chmod não limpa os bytes setuid e setgid nos diretórios quando você o executa no modo octamal. POSIX permite esse comportamento.
FUZxxl 23/03/2015
2

Adicionando à resposta do ooshro ...

Se você usar permissões suid ou sgid em um diretório, todos os arquivos criados dentro desse diretório terão o mesmo proprietário (se suid) ou grupo (sgid) do diretório em questão.

Eu uso isso no meu compartilhamento Samba em casa. O diretório base pertence ao usuário ninguém e ao grupo olympia, e as permissões são 2770. Portanto, você deve estar no grupo olympia para ler ou escrever qualquer coisa abaixo desse diretório e garantirá que o olympia seja o grupo proprietário de tudo abaixo dele . Também tenho o Samba configurado para usar uma máscara de diretiva 2770 e uma máscara de arquivo 660 para manter as permissões corretas por toda a árvore.

Baumgart
fonte