Para essa situação, você precisa adicionar o set-group-ID
bit no diretório /var/www/xyz
para que os diretórios recém-criados herdem o grupo do pai.
chmod g+s /var/www/xyz
Veja man 2 chmod
S_ISGID (02000) set-group-ID (defina o ID do grupo efetivo do processo execve (2); bloqueio obrigatório, conforme descrito em fcntl (2); pegue um novo grupo de arquivos do diretório pai, conforme descrito em chown (2) e mkdir (2))
Veja os comentários para a resposta da postagem referida.
Editar após comentário:
Se você adicionou o setgid
bit no diretório pai após o subdiretório foi criado:
File var/www/dodge'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1445503 Links: 8
Access: (2775/drwxrwsr-x) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2013-07-16 16:29:21.434531583 +0530
Modify: 2013-07-16 14:07:46.482782580 +0530
Change: 2013-07-16 16:28:04.622533850 +0530 <---added setgid
mas o subdiretório foi criado antes disso:
File: /var/www/dodge/codes'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1446465 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ wq) Gid: ( 1000/ wq)
Access: 2013-07-16 15:16:15.554661170 +0530
Modify: 2013-07-16 15:13:42.698665686 +0530
Change: 2013-07-16 15:13:42.698665686 +0530 <---before ctime above
o setgid
bit funciona quando você cria novos arquivos e diretórios. Não funcionará para nenhum que já tenha sido criado. Portanto, o diretório codes
ainda é de propriedade de wq
e group wq
, e o outro usuário não tem permissão para criar arquivos lá; é por isso que você recebe o mesmo erro de antes. Ou chown
do subdiretório para definir o grupo correto ou excluí-lo e recriá-lo.
chown :group /var/www/dodge/code