Como você consegue que o linux honre diretórios setuid?

8

Há algum tempo, em uma conversa no IRC, um usuário de um canal em que eu estava sugeriu que alguém configurasse um diretório para herdar o ID do usuário nos arquivos para resolver um problema que alguém estava tendo. Na época, falei e disse "o linux não suporta diretórios setuid". Depois disso, a pessoa que deu o conselho me mostrou uma pastabin ( http://codepad.org/4In62f13 ) de seu sistema honrando a permissão setuid definida em um diretório.

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

Por mais que eu tente, não consigo replicar completamente essa pasta. Alguém me sugeriu uma vez que seria possível emular o comportamento com o selinux - e brincando com as regras, é possível forçar um uid em um arquivo, mas não a partir de uma permissão de diretório setuid (que eu posso ver). Ler na internet tem sido bastante pouco informativo - a maioria dos lugares afirma que "não, o setuid nos diretórios não funciona com o linux" e, ocasionalmente, "isso pode ser feito em circunstâncias específicas" (como: http://arstechnica.com/ etc / linux / 2003 / linux.ars-12032003.html )

Não me lembro de quem era a pessoa original, mas o sistema original era um sistema debian 6 e o ​​sistema de arquivos em execução 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 informar sobre o que ou como você obtém um sistema para honrar o setuid em um diretório?

Takigama
fonte
O XFS certamente possui uma opção de montagem ( grpid|bsdgroupsou nogrpid|sysvgroups) que significa que os arquivos nos diretórios são criados com o grupo do diretório em vez do grupo do proprietário; talvez brincar com isso?
Zanchey

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.

A permissão setuid definida em um diretório é ignorada nos sistemas UNIX e Linux. [4] O FreeBSD pode ser configurado para interpretá-lo de forma análoga a setgid, ou seja, para forçar todos os arquivos e subdiretórios a serem de propriedade do proprietário do diretório principal. [5]

No FreeBSD, os diretórios se comportam como se seu bit setgid sempre fosse definido, independentemente do seu valor real. Como é declarado em open (2), "Quando um novo arquivo é criado, ele recebe o grupo do diretório que o contém".

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

Aaron Copley
fonte
Eu acredito que esse seja o caso ... no entanto, o cara tinha quase certeza de que alcançou seu objetivo ... então eu me virei para os fóruns debian porque ele estava usando o debian, e obtive isso para uma resposta: forums.debian.net /… Possivelmente postei em um estado menos do que ideal e peguei o ombro frio. Após cerca de um mês e pesquisando um pouco, não tenho certeza de que definitivamente não pode ser feito, mas não consigo entender por que os caras do debian acreditam que isso é possível sem modificar alguma coisa.
Takigama 20/03/12
Se ele conseguisse, ele seria a melhor fonte de como isso foi feito. Eu próprio pesquisei o assunto e não encontrei nada.
Aaron Copley
@AaronCopley: Você tem outra fonte além da wikipedia, pelo fato de a permissão setuid definida em um diretório estar incluída nos sistemas Linux?
Martin Thoma 24/03
Não. Mas você pode experimentar e ver por si mesmo. :)
Aaron Copley
2

Resposta parcial / solução alternativa:

Eu estava tentando fazer a mesma coisa, decidi não lutar e tentar outro método. O que tentei foi acessar listas de controle, para definir permissões padrão. (Nota: pode ser necessário ativá-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 testuser é usado para executar testes, e o usuário normal pode excluir os resultados, sem resultar no uso de raiz (cada vez).

ctrl-alt-delor
fonte
Isso adiciona um novo grupo, mas o ID do grupo definido funciona bem.
ctrl-alt-Delor
-2

De RHEL man chmod

O chmod preserva os bits set-user-ID e set-group-ID de um diretório, a menos que você especifique explicitamente o contrário. Você pode definir ou limpar os bits com modos simbólicos como u + se eg, e pode definir (mas não limpar) os bits com um modo numérico.

Numericamente, se bem me lembro, chmod 4711 ./diradiciona o bit UID definido, chmod 2711 ./diradiciona o bit gid definido para 6711definir a herança uid + gid conforme a demonstração em pastebin.

Pela página de manual chmod u+s== chmod 4XXXe chmod g+s==chmod 2XXX

Oneiroi
fonte
1
não, eu entendo como aplicá-los, esse não é o problema.
Takigama 20/03/12
(pressione Enter por engano) O problema é o que eles fazem com um diretório, minha crença era que setuid em diretórios não era algo que o linux fazia, por exemplo (sistema ubuntu 10.10): testuser @ boson: ~ $ ls -ald ~ drwsrwsrwx 3 testuser testuser 4096 21/03/2012 01:55 / home / testuser Esse diretório possui setuid e setgid. Agora, como o usuário tt @ boson: ~ $ touch ~ testuser / arquivo t @ boson: ~ $ ls -la! $ Ls -la ~ testuser / arquivo -rw-r - r-- 1 t testuser 0 2012-03 -21 01:57 / home / testuser / file Observe como o bit setuid no diretório não tem efeito (o que eu espero). como você faz um sistema linux usar setuid em um diretório?
Takigama 20/03/12
Você pode limpá-los com algo parecido =755ou 00755utilizando os valores numéricos
Steve Buzonas