Como você obtém o linux para honrar diretórios setuid?

8

Algum tempo atrás, enquanto em uma conversa no IRC, um usuário em um canal em que eu estava sugeria que alguém configurasse um diretório para que ele herde o ID do usuário nos arquivos para resolver um problema que alguém estava tendo. Na época eu falei e disse "o linux não suporta diretórios setuid". Depois disso, a pessoa que deu o conselho me mostrou um pastebin ( link ) do seu sistema, honrando o conjunto de permissões setuid em um diretório.

Só para explicar, quando eu digo "o linux não suporta diretórios setuid" o que eu quero dizer é que você pode ir "diretório chmod u + s" e ele irá definir o bit no diretório. No entanto, o Linux (como eu entendi) ignora este bit (em diretórios).

Por mais que eu tente, simplesmente não consigo replicar o pastebin. Alguém me sugeriu uma vez que seria possível imitar o comportamento com o selinux - e brincar com as regras, é possível forçar um uid em um arquivo, mas não de uma permissão de diretório setuid (que eu possa ver). A leitura na Internet tem sido pouco informativa - a maioria dos lugares afirma "não, setuid em diretórios não funciona com o linux" com o ocasional "isso pode ser feito sob circunstâncias específicas" (como este: link )

Eu não lembro quem era a pessoa original, mas o sistema original era um sistema debian 6, e o sistema de arquivos que estava rodando era xfs montado com "default, acl". Eu tentei replicar isso, mas sem sorte até agora (tentei até agora com várias versões do debian, ubuntu, fedora e centos)

Alguém pode me dar uma pista sobre o que ou como você consegue um sistema para honrar o setuid em um diretório?

    
por Takigama 20.03.2012 / 14:30

3 respostas

7

Setuid para diretórios não se comporta como setgid. A menos que a saída do shell fosse do FreeBSD, alguém estava entediado e se divertindo um pouco às suas custas.

The setuid permission set on a directory is ignored on UNIX and Linux systems.[4] FreeBSD can be configured to interpret it analogously to setgid, namely, to force all files and sub-directories to be owned by the top directory owner.[5]

In FreeBSD, directories behave as if their setgid bit was always set, regardless of its actual value. As is stated in open(2), "When a new file is created it is given the group of the directory which contains it."

link

    
por 20.03.2012 / 16:34
1

Resposta parcial / contornar:

Eu estava tentando fazer a mesma coisa, decidi não lutar e tentar outro método. O que eu tentei foi listas de controle de acesso, para definir as permissões padrão. (Nota: você pode precisar habilitá-los primeiro).

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

Aqui o testuser é usado para executar testes e o usuário normal pode excluir os resultados, sem resultar em usar o root (todas as vezes).

    
por 22.10.2012 / 19:00
-2

De RHEL man chmod

chmod preserves a directory’s set-user-ID and set-group-ID bits unless you explicitly specify otherwise. You can set or clear the bits with symbolic modes like u+s and g-s, and you can set (but not clear) the bits with a numeric mode.

Numericamente, se bem me lembro, chmod 4711 ./dir adiciona o bit UID do conjunto, chmod 2711 ./dir adiciona o bit definido do conjunto por isso 6711 configuração uid + herança do gid conforme a demonstração em pastebin.

Por página do manual chmod u+s == chmod 4XXX e chmod g+s == chmod 2XXX

    
por 20.03.2012 / 15:21