Como altero permissões em um diretório sem perder o setgid?

2

Quando altero permissões para outro usuário ou em um diretório setgid, o diretório perde seu setgid. Como faço a alteração sem perder? sudo não é uma opção. É possível?

Aqui está algum contexto.

$ whoami
webmin
$ groups
webmin
$ echo $SHELL
/bin/bash
$ uname -srvm
Linux 2.6.38-12-server #51-Ubuntu SMP Wed Sep 28 16:07:08 UTC 2011 x86_64

Aqui está um exemplo.

$ ls -la
drwxr-s--- 4 webmin www-data    4096 2011-11-03 10:59 .
drwxr-s--- 4 webmin www-data    4096 2011-10-26 15:53 ..
$ mkdir libraries
$ ls -ld libraries
drwxr-sr-x 2 webmin www-data    4096 2011-11-03 11:01 libraries
$ chmod o= libraries
$ ls -ld libraries
drwxr-x--- 2 webmin www-data    4096 2011-11-03 11:01 libraries
      ^
       '- The problem

O mesmo acontece se eu modificar as permissões do usuário no diretório.

O seguinte também falha.

$ chmod g=rxs,o= libraries

=== UPDATE ====

A resposta de Kevin me levou ao que acredito ser a causa do problema. Aparentemente, você deve ser um membro do grupo atribuído ao arquivo. Por exemplo

$ whoami
webmin
$ groups
webmin www-data      <---- Now we are in the www-data group.
$ mkdir t
$ ls -ld t
drwxr-sr-x 2 webmin www-data 4096 2011-11-03 12:03 t
$ chmod o= t
$ ls -ld t
drwxr-s--- 2 webmin www-data 4096 2011-11-03 12:03 t
      ^
       '- Yeah!

Então a resposta é "sim", desde que você seja um membro do grupo, ou "não"?

    
por Stoney 03.11.2011 / 16:27

2 respostas

1

Se você não for um membro do grupo atribuído ao diretório, se modificar alguma permissão, perderá o setgid nesse diretório.

Opções

  1. Você pode alterar seu umask antes de criar o diretório, evitando a necessidade de modificar as permissões no diretório depois de criá-lo. Dessa forma, você não perderá o setuid nesse diretório. (Demonstrado no final desta resposta.)

  2. Torne-se um membro do grupo (requer sudo )

    $ sudo usermod -a -G www-data webmin

  3. Altere as permissões usando sudo

    $ chmod g=rxs,o= libraries

Os dois últimos violam as restrições da pergunta, então a resposta é a opção 1.

$ umask 0027
$ mkdir libraries
$ ls -ld libraries
drwxr-s--- 2 webmin www-data 4096 2011-11-03 12:03 libraries
    
por 04.11.2011 / 17:23
1
$ ls -ld testdir
drwxrwxrwx ... testdir
$ chmod 2750 testdir
$ ls -ld testdir
drwxr-s--- ... testdir

É isso que você quer?

Editar: eu verifiquei no meu sistema, e definindo o o perms e até mesmo mudando o grupo não alterou o bit setgid. Não sei por que isso aconteceu no seu.

    
por 03.11.2011 / 16:44