Permitir que o usuário NonRoot monte um disco rígido externo NTFS específico

3

Eu tenho um disco rígido externo de 4 TB conectado a um servidor Linux.

As permissões fstab nesta unidade são definidas de forma que somente um usuário não root em particular tenha acesso a ela:

/dev/disk/by-uuid/CEE0476DE0388DA9/ /mnt/USBexternal ntfs-3g defaults,auto,uid=51343,gid=50432,umask=077 0 0

De um local remoto, esse usuário conseguiu fazer backups rsync para esse disco rígido externo.

No entanto, a unidade externa não fica montada de forma tão confiável quanto um disco rígido interno. A cada dois dias estou tendo que fazer o login como root, faça o seguinte comando:

mount -a

Gostaria de dar a esse usuário a capacidade de montar esta unidade, mas quando o usuário não-root monta -a, ele informa que eles não têm permissão para fazer isso:

nonrootuser@server:~$ mount -a
mount: only root can do that

Quando o usuário não-root tenta montar essa unidade especificamente, ela informa que já está montada (mesmo que não seja):

nonrootuser@server:~$ mount /mnt/USBexternal/
mount: according to mtab, /dev/sdb1 is already mounted on /mnt/USBexternal

Como mencionado, a unidade não está realmente montada, mas (por causa da saída acima) se o usuário não-root tentar desmontar a unidade, ela diz que sua solicitação discorda da fstab:

nonrootuser@server:~$ umount /mnt/USBexternal/
umount: /mnt/USBexternal/ mount disagrees with the fstab

Como posso permitir a este usuário a capacidade de montar esta unidade, sem lhes dar quaisquer outros poderes administrativos?

    
por Lonniebiz 05.03.2014 / 18:26

2 respostas

3

Você pode configurar uma entrada no arquivo /etc/sudoers para que este usuário possa usar o comando mount. Adicione algo como o seguinte ao final do arquivo /etc/sudoers :

username ALL=NOPASSWD: /usr/bin/mount, /sbin/mount.ntfs-3g, /usr/bin/umount

Certifique-se de que o caminho exato para cada executável esteja correto para o seu sistema. Por exemplo, o comando mount pode estar em /bin em vez de /usr/bin .

Adicionar a parte mount.ntfs-3g é importante para fornecer esse acesso para o usuário. Eu posso ver no seu comando mount que você está usando um tipo de sistema de arquivos NTFS-3G .

Você poderia, em vez disso, criar um script de shell para manipular a montagem / desmontagem e colocar isso no arquivo sudoers. Por exemplo:

crie o script /usr/local/bin/mount-ntfs-drive :

#!/bin/bash
device_path="/dev/disk/by-uuid/CEE0476DE0388DA9/"
mount_point="/mnt/USBexternal"
if [ "$1" = "-u" ] ; then
  # do unmount
  /bin/umount $mount_point
else
  # do mount
  /bin/mount $device_path $mount_point
fi

edite o arquivo /etc/sudoers :

username ALL=NOPASSWD: /usr/local/bin/mount-ntfs-drive

Certifique-se de fazer chmod +x /usr/local/bin/mount-ntfs-drive . Além disso, quando o usuário executa o arquivo, ele precisará usar o caminho completo para que ele funcione. Pode funcionar a partir do caminho deles, mas não tenho certeza.

sudo /usr/local/bin/mount-ntfs-drive

    
por 06.03.2014 / 11:30
3

Você pode escrever um script que verifique se a conexão está quebrada e faz a limpeza necessária nesse caso. Este script pode ser executado a cada 30 minutos como root by cron .

Talvez ele desapareça de /proc/mounts quando o kernel detectar que o dispositivo desapareceu. Se não, o script poderia simplesmente tentar criar um arquivo no volume montado.

Isso evitaria a situação do problema que você descreveu.

Uma abordagem diferente é não usar o recurso user de fstab , mas usar sudo para que o usuário possa executar um script com privilégios de superusuário, o que faz a limpeza (se necessário) e a montagem .

    
por 05.03.2014 / 18:42