
No Ubuntu 14.04, listar o conteúdo do diretório /var/spool/cron
fornece ls -l
as 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 cron
tabelas, 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 /tmp
també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 crontab
funciona 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 crontab
com 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 crontab
apenas 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.