s
significa que o setgid
/ setuid
bit e o executable
bit estão definidos
S
significa que apenas o setgid
/ setuid
bit está definido
confira man chmod
para mais informações.
Estou criando diretórios e alterando as permissões deles em perl com o seguinte código:
umask 0000;
mkdir $path, 0770;
chown $userid, $groupid, $path;
Agora, quando faço ls -l em um diretório que acabei de criar, eles são os seguintes:
drwxrws--- 2 user group 4096 Nov 3 15:34 test1
Eu noto para as permissões do grupo, há um s em vez de x. Mesmo que eu chmod manualmente para remover todas as permissões para o usuário e grupo ("chmod g=" e "chmod u=", ele ainda está lá:
d-----S--- 2 user group 4096 Nov 3 15:36 test2
A internet sugere S significa que tudo na pasta é executado como su ou algo assim? Eu não entendo muito bem o que isso significa, mas acho que eu deveria entender, já que esses são webroots, então se houver uma implicação de segurança, eu deveria estar ciente disso.
Muito obrigado pela sua ajuda!
Isso está acontecendo devido ao valor de umask
que você está definindo.
The internet suggests S means everything in the folder is run as su or something?
Isso está incorreto.
Se o setuid
bit estiver definido em um programa executável, ele será executado com os privilégios de seu proprietário.
Se o setgid
bit estiver definido no programa executável, ele será executado com as permissões de seu grupo.
Portanto, não crie coisas como root:root
com umask 0000
.
Melhor ainda, nunca coloque isso na sua umask.
Veja aqui: link
The number given as a parameter to the umask command works in a opposite manner to the number given to the chmod command. The 'mask' serves to remove permissions as opposed to granting them.
De certa forma, indica um "erro":
Não faz sentido configurar o bit setuid se o bit executável não estiver definido.