Por que "chmod 1777" e "chmod 3777" definem o ponto difícil?

15

Para definir o bit em um diretório, por que os comandos chmod 1777e os chmod 3777dois funcionam?

Liao Zhuodi
fonte
2
Você está propondo uma operação potencialmente arriscada. A combinação de permissões pegajosas e rwx para todos é uma prática ruim. Qualquer um pode alterar e executar o arquivo e o s-bit permite alternar para o usuário root sem senha.
jippie
1
Os bits @jippie setuid e setgid desaparecem se o arquivo for modificado, portanto você não pode obter acesso root dessa maneira.
Kyle Jones
@KyleJones, ainda é perigoso. Se o passwdbinário fosse gravável em todo o mundo, você não seria capaz de obter acesso root modificando-o, como diz, mas poderia substituí-lo por outro binário que todos executariam posteriormente, pensando que era passwd.
Curinga
@Wildcard concordou.
Kyle Jones

Respostas:

29

Cada número (também conhecido como octal porque é base8) nesse agrupamento representa 3 bits. Se você transformá-lo em binário, fica muito mais fácil.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Portanto, se você definisse 1777, 3777, 5777 ou 7777, definiria o bit adesivo porque a terceira coluna seria um 1. No entanto, com 3777, 5777 e 7777, você também definirá outros bits (SUID para a primeira coluna e SGID para a segunda coluna).

Por outro lado, qualquer outro número nesse local (até o máximo de 7) não definiria o bit fixo, porque a última coluna não seria 1 ou "ativada".

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0

JZeolla
fonte
3
+1 para uma boa descrição de como os números octais funcionam e como isso se aplica aos bits de permissão de arquivo.
um CVn
1
Chama-se "bitmask" e +1 também para explicar / mostrar como ele pode ser definido e clearas colunas Grupo de Proprietários e Outros.
Chris K
16

As permissões passadas como argumento para chmod são especificadas como um valor octal . Cada numeral no valor representa três bits. Se três números forem fornecidos, você estará configurando a leitura, gravação e execução de bits para o proprietário, o grupo e outros do arquivo (todos os outros). Se quatro números forem fornecidos, o número mais à esquerda define os bits setuid, setgid e sticky. Octal 1 define o bit pegajoso. Octal 2 define o bit setgid. Octal 2 + octal 1 é octal 3, que define o bit setgid e o bit pegajoso.

Kyle Jones
fonte
1
Não é octal 2 | octal 1 em vez de octal 2 + octal 1? As operações têm o mesmo resultado neste caso, mas, em geral, é um pouco ou isso importa, não é?
gerrit
1
@gerrit Sim, no caso geral, você deve estar olhando para o binary oroperador. No entanto, como você ressalta, nesse caso, o resultado é o mesmo e muitas outras pessoas estão familiarizadas com a adição.
um CVn