Por que o setuid não funciona com o mount?

3

Existe um bit setuid no arquivo.

user@host:~$ ls -l /bin/mount
-rwsr-xr-x 1 root root 40152 May 26 19:31 /bin/mount

Por que o sistema operacional requer acesso root para executar o 'mount'?

user@host:~$ /bin/mount /dev/sdb1 /mnt
mount: only root can do that
user@host:~$ sudo /bin/mount /dev/sdb1 /mnt
user@host:~$ lsblk  | grep sdb

sdb      8:16   0  102M  0 disk
└─sdb1   8:17   0  101M  0 part /mnt

Meu /etc/fstab

# / was on /dev/sda1 during installation
UUID=026bb2d9-1c0c-4163-85a1-f83b2221eb34 /               ext4    errors=remount-ro 0       1

# swap was on /dev/sda5 during installation
UUID=aec6b039-13b1-4568-abb1-2be1f3429325 none            swap    sw              0       0
    
por Reputet 04.08.2016 / 13:07

1 resposta

9

O Unix tem o conceito de UIDs real e efetivo (e GIDs).

Quando você executa um programa setuid, o ID efetivo do processo é definido como o proprietário do arquivo.

Portanto, no caso de mount , você tem um ID efetivo de root . Mas você ainda tem um ID real de user .

Programas como passwd ou su ou mount podem verificar o ID real para ver quem o está executando e agir de maneira diferente. Para passwd , isso permite que o usuário root altere a senha de outra pessoa; para su permite trocar usuários sem saber a senha.

Para mount , os usuários podem montar seus próprios sistemas de arquivos se estiverem definidos em /etc/fstab e tiverem o atributo user associado a eles

por exemplo, no meu Debian fstab eu tenho:

/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

Isso significa que um usuário não raiz pode executar mount /dev/sr0 ou mount /media/cdrom0 e tentará montar o CD / DVD.

Esta é uma lógica incorporada no próprio programa mount ; ele verifica o ID real do chamador.

    
por 04.08.2016 / 13:55