Eu tenho um leitor de cartão conectado /dev/sdb
.
O que faço é conceder todas as permissões ao proprietário, grupo e ao resto do mundo, usando:
sudo chmod 777 /dev/sdb
Posso apenas usar outra combinação, permitindo que apenas o proprietário (eu) use o leitor de cartão?
Existe apenas uma conta de usuário.
linux
permissions
block-device
Mohamed Ahmed
fonte
fonte
ls -l /dev/sdb
? Estou supondo que isso seja de propriedade da raiz, mas seria bom ter certeza.Respostas:
Existem várias maneiras de conseguir isso.
1. Adicione seu usuário ao grupo proprietário do dispositivo
Geralmente, na maioria das distros, os dispositivos de bloco pertencem a um grupo específico. Tudo que você precisa fazer é adicionar seu usuário a esse grupo.
Por exemplo, no meu sistema:
Portanto, preciso adicionar meu usuário ao
disk
grupo.2. Altere as permissões do dispositivo
A idéia é criar uma regra do udev para executar um comando quando o dispositivo for detectado.
Primeiro, você precisa encontrar uma maneira de identificar o dispositivo. Você usa
udevadm
para isso. Por exemplo:Em seguida, crie um novo arquivo
/etc/udev/rules.d
, como99-cardreader.rules
:Aqui eu usei a saída do
udevadm info
comando para encontrar algumas informações de identificação para o dispositivo. Eu usei aSUBSYSTEM="block"
entrada para a primeira entrada e, em seguida, osATTRS
valores da 6ª entrada. Basicamente, ele encontrará o dispositivo USB com esse produto e número de série e, em seguida, o dispositivo de bloco resultante desse dispositivo USB.O
RUN
comando alterará as permissões no dispositivo para777
. No entanto, não considero esta uma solução muito boa, pois isso abre o dispositivo para o mundo. Em vez disso, uma solução melhor pode ser:Isso concederá ao usuário
patrick
acesso de leitura / gravação ao dispositivo.Nota: É importante lembrar que, ao escrever regras do udev, você só pode usar parâmetros do dispositivo superior e de outro dispositivo na cadeia. Assim, eu posso usar o
SUBSYSTEM="block"
parâmetro e osATTRS
parâmetros. Mas não consegui usar nenhum parâmetro de nenhum outro dispositivo na cadeia ou a regra falharia em corresponder.Outra observação: (como o sistema requer mais de 6 caracteres para uma edição e não tenho reputação de adicionar um comentário) a correspondência do udev deve usar o operador de igualdade (
==
), não a atribuição (=
)! Esta resposta tinha anteriormenteSUBSYSTEM="block"
que não funciona (invalid SUBSYSTEM operation
).fonte
$name
na regra escrita? devo substituí-lo porsdb
?