Por que um diretório teria o sticky bit definido sem o bit executável?

Por que um diretório teria o sticky bit definido sem o bit executável?

No Ubuntu 14.04, listar o conteúdo do diretório /var/spool/cronfornece ls -las seguintes permissões nos diretórios dentro (colunas irrelevantes cortadas):

drwxrwx--T daemon daemon atjobs
drwxrwx--T daemon daemon atspool
drwx-wx--T root crontab crontabs

Qual é a finalidade de definir um bit fixo em um diretório sem o bit executável?

Responder1

Na página de manual para sticky:

DIRETÓRIOS PEGAJOSOS

Um diretório cujo `sticky bit' está definido torna-se um diretório somente para acréscimos ou, mais precisamente, um diretório no qual a exclusão de arquivos é restrita. Um arquivo em um diretório fixo só pode ser removido ou renomeado por um usuário se o usuário tiver permissão de gravação para o diretório e o usuário for o proprietário do arquivo, o proprietário do diretório ou o superusuário. Este recurso é aplicado de forma útil a diretórios como /tmp, que devem ser graváveis ​​publicamente, mas devem negar aos usuários a licença para excluir ou renomear arbitrariamente os arquivos uns dos outros.

Qualquer usuário pode criar um diretório fixo. Veja chmod(1) para detalhes sobre como modificar modos de arquivo.

O resultado disso é que apenas o proprietário de um arquivo em um diretório fixo pode removê-lo. No caso das crontabelas, isso significa queEUnão posso entrar lá e removerseutabela cron e substitua-a por uma demeuescolhendo, mesmo que eu possa ter acesso de gravação ao diretório. É por esta razão que /tmptambém é pegajoso.

Responder2

Qual é a finalidade de definir um bit fixo em um diretório sem o bit executável?

drwx-wx--T 2 root crontab 4096 Apr 24 15:00 /var/spool/cron/crontabs/

O que você está vendo é semelhante no Debian. O diretóriofaztenha o bit executável definido, para o proprietário e o grupo. Apenas para o proprietário, o sticky não faz muito sentido, já que, por definição, é apenas um usuário (e o proprietário pode substituir o sticky de qualquer maneira). Mas para o grupo, isso importa exatamente tanto quanto para diretórios graváveis ​​mundialmente, como o /tmp, ou seja, que usuários regulares não possam remover arquivos pertencentes a outros usuários.

Mas por que alguém seria membro do grupo crontab?

Para poder modificar seus crontabs, é claro! O Debian crontabfunciona com privilégio setgid, permitindo assim que qualquer usuário normal acesse esse diretório, com seu próprio UID e com o GID de crontab. Isso é um pouco mais seguro do que deixá-los rodar crontabcom setUIDprivilégio, pois mantém os usuários separados uns dos outros.

-rwxr-érx 1 root crontab 36008 11 de junho de 2015 /usr/bin/crontab

Agora, normalmente, os arquivos no diretório pertencem e são nomeados por seus respectivos proprietários, e se crontabapenas permitir a remoção do crontab do próprio usuário, não deverá haver problema. Ter as permissões de arquivo configuradas dessa forma funciona para proteger contra bugs no programa,etorna relevante o UID real do usuário que acessa, não apenas seunome.

informação relacionada