Listando todos os dispositivos como não-superusuário

6

Estou tentando montar o disco rígido externo. Como sei, para montar manualmente, devo usar fdisk -l para determinar qual dispositivo se refere à unidade.

Quando estou fazendo isso sem sudo , tenho a próxima saída:

user@desktop:~/tmp$ /sbin/fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000844b8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   625141759   312320001    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda5          501760   625141759   312320000   8e  Linux LVM

Disk /dev/mapper/vg0-root: 348 MB, 348127232 bytes
255 heads, 63 sectors/track, 42 cylinders, total 679936 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-root doesn't contain a valid partition table

Disk /dev/mapper/vg0-swap_1: 8162 MB, 8162115584 bytes
255 heads, 63 sectors/track, 992 cylinders, total 15941632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-swap_1 doesn't contain a valid partition table

Disk /dev/mapper/vg0-usr: 8996 MB, 8996782080 bytes
255 heads, 63 sectors/track, 1093 cylinders, total 17571840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-usr doesn't contain a valid partition table

Disk /dev/mapper/vg0-var: 2998 MB, 2998927360 bytes
255 heads, 63 sectors/track, 364 cylinders, total 5857280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-var doesn't contain a valid partition table

Disk /dev/mapper/vg0-tmp: 398 MB, 398458880 bytes
255 heads, 63 sectors/track, 48 cylinders, total 778240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-tmp doesn't contain a valid partition table

Disk /dev/mapper/vg0-home: 298.9 GB, 298907074560 bytes
255 heads, 63 sectors/track, 36340 cylinders, total 583802880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-home doesn't contain a valid partition table

com sudo :

user@desktop:~/tmp$ sudo fdisk -l
[sudo] password for user: 

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000844b8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   625141759   312320001    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda5          501760   625141759   312320000   8e  Linux LVM

Disk /dev/mapper/vg0-root: 348 MB, 348127232 bytes
255 heads, 63 sectors/track, 42 cylinders, total 679936 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-root doesn't contain a valid partition table

Disk /dev/mapper/vg0-swap_1: 8162 MB, 8162115584 bytes
255 heads, 63 sectors/track, 992 cylinders, total 15941632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-swap_1 doesn't contain a valid partition table

Disk /dev/mapper/vg0-usr: 8996 MB, 8996782080 bytes
255 heads, 63 sectors/track, 1093 cylinders, total 17571840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-usr doesn't contain a valid partition table

Disk /dev/mapper/vg0-var: 2998 MB, 2998927360 bytes
255 heads, 63 sectors/track, 364 cylinders, total 5857280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-var doesn't contain a valid partition table

Disk /dev/mapper/vg0-tmp: 398 MB, 398458880 bytes
255 heads, 63 sectors/track, 48 cylinders, total 778240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-tmp doesn't contain a valid partition table

Disk /dev/mapper/vg0-home: 298.9 GB, 298907074560 bytes
255 heads, 63 sectors/track, 36340 cylinders, total 583802880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/vg0-home doesn't contain a valid partition table

Disk /dev/sdb: 500.1 GB, 500105740288 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976769024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002e78d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   976769023   488383488    7  HPFS/NTFS/exFAT

Por que só consigo ver o dispositivo conectado ao iniciar o comando com direitos de root?

    
por Nikita Yashtaev 20.12.2013 / 12:42

4 respostas

8

fdisk -l pode apenas listar os sistemas de arquivos para os quais tem permissão de leitura. Veja meu teste com strace :

user@host:~/test$ strace -e open /sbin/fdisk -l
...
open("/proc/partitions", O_RDONLY)      = 3
open("/dev/sda", O_RDONLY)              = -1 EACCES (Permission denied)
open("/dev/sda1", O_RDONLY)             = -1 EACCES (Permission denied)
open("/dev/sda2", O_RDONLY)             = -1 EACCES (Permission denied)
open("/dev/sda5", O_RDONLY)             = -1 EACCES (Permission denied)
open("/dev/sr0", O_RDONLY)              = 4

Este usuário tem permissão apenas para ler /dev/sr0 , portanto, somente este dispositivo está listado em fdisk -l .

    
por 20.12.2013 / 12:56
7

@chaos e @ Braiam forneceu boas respostas sobre por que você não está recebendo o comportamento que está procurando de fdisk ao ser executado como um usuário não-root. O simples fato é que permitir que usuários regulares leiam discos diretamente permitiria ignorar permissões de arquivos simplesmente lendo os dados do disco diretamente, o que poderia ser um grande problema e certamente tornaria as permissões de arquivos e diretórios completamente inúteis para qualquer coisa. mas para evitar erros simples.

Eu vou tentar responder a pergunta que você provavelmente quis dizer para perguntar também: "como faço para descobrir qual partição montar se eu não sou root?". / strong>

A resposta para isso, supondo que você tenha um sistema razoavelmente recente, é: dê uma olhada em /dev/disk/by-id .

Lá você encontrará cada disco, por barramento, número do modelo e número de série, com todas as partições detectadas disponíveis como links simbólicos para os arquivos do dispositivo.

Os nomes lá também são persistentes, portanto, ao contrário dos nomes /dev/sdXY , não mudam dependendo da ordem em que você conecta os discos ou da ordem em que são detectados. Isso os torna úteis para /etc/fstab , /etc/crypttab e possivelmente amigos.

    
por 20.12.2013 / 14:39
5

Se o seu objetivo é descobrir o nome do dispositivo da unidade externa que você acabou de conectar, as maneiras mais fáceis são executar dmesg | tail -20 ou mais após a conexão:

$ dmesg | tail -20
[ 5610.869053] usb 2-1.4: New USB device strings: Mfr=10, Product=11, SerialNumber=5
[ 5610.869058] usb 2-1.4: Product: Iomega Select HDD
[ 5610.869062] usb 2-1.4: Manufacturer: Iomega
[ 5610.869066] usb 2-1.4: SerialNumber: 5E918FFFFFFF
[ 5610.948182] usb-storage 2-1.4:1.0: USB Mass Storage device detected
[ 5610.948350] scsi6 : usb-storage 2-1.4:1.0
[ 5610.948531] usbcore: registered new interface driver usb-storage
[ 5611.948468] scsi 6:0:0:0: Direct-Access     ST950032 5AS  PQ: 0 ANSI: 2 CCS
[ 5611.948916] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 5611.950745] sd 6:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[ 5611.951855] sd 6:0:0:0: [sdb] Write Protect is off
[ 5611.951862] sd 6:0:0:0: [sdb] Mode Sense: 28 00 00 00
[ 5611.952944] sd 6:0:0:0: [sdb] No Caching mode page present
[ 5611.952951] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[ 5611.956083] sd 6:0:0:0: [sdb] No Caching mode page present
[ 5611.956091] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[ 5612.016745]  sdb: sdb1
[ 5612.020134] sd 6:0:0:0: [sdb] No Caching mode page present
[ 5612.020144] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[ 5612.020152] sd 6:0:0:0: [sdb] Attached SCSI disk

Isso indica que minha unidade foi reconhecida como /dev/sdb . Outras ferramentas úteis neste contexto são

  • lsusb lista todos os dispositivos USB e hubs conectados. no meu sistema com meu disco externo conectado, sua saída inclui esta linha

    Bus 002 Device 008: ID 059b:047a Iomega Corp. Select Portable Hard Drive
    
  • lsblk lista informações sobre todos ou os dispositivos de bloco especificados. Ele mostrará uma lista de todos os discos e suas partições:

    $ lsblk 
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0 465.8G  0 disk 
    ├─sda1   8:1    0  39.2M  0 part 
    ├─sda2   8:2    0  14.7G  0 part 
    ├─sda3   8:3    0  78.1G  0 part /winblows
    ├─sda4   8:4    0     1K  0 part 
    ├─sda5   8:5    0     2G  0 part 
    ├─sda6   8:6    0 294.4G  0 part /home
    ├─sda7   8:7    0  68.7G  0 part /
    └─sda8   8:8    0   7.8G  0 part [SWAP]
    sdb      8:16   0 465.8G  0 disk 
    └─sdb1   8:17   0 465.8G  0 part 
    sr0     11:0    1  1024M  0 rom  
    
  • lshw listará todos do seu hardware, incluindo unidades externas. Como sua saída pode ser enorme, eu filtraria com base na marca da sua unidade (Iomega no meu caso). Algo como:

    $ lshal  | grep -C 10 Iomega | grep block.device
    block.device = '/dev/sdb1'  (string)
    
  • Os diretórios /dev/disk/by-* :

    $ ls -l /dev/disk/by-label/ | grep sdb
    lrwxrwxrwx 1 root root 10 Dec 20 15:25 Iomega_HDD -> ../../sdb1
    $ ls -l /dev/disk/by-uuid/ | grep sdb
    lrwxrwxrwx 1 root root 10 Dec 20 15:25 6AC0198FC019629D -> ../../sdb1
    

    Você também tem os diretórios by-path e by-id , mas eles são menos úteis para a tarefa em questão.

por 20.12.2013 / 15:39
4

Isso ocorre porque o superusuário ou o root tem permissões completas para analisar todos os dispositivos, enquanto os usuários não têm esses privilégios por padrão. Sempre que ele tenta falhar, portanto, não listando os detalhes. Alguns grupos também podem ter esse privilégio que você pode adicionar.

    
por 20.12.2013 / 13:20