Mostrando postagens com marcador montar. Mostrar todas as postagens
Mostrando postagens com marcador montar. Mostrar todas as postagens

quarta-feira, 6 de julho de 2011

Controle de acesso com o PolicyKit

O Policykit é uma ferramenta, em nível de aplicação, que serve para centralizar as decisões de permissão de acesso à dispositivos e aplicações controladas somente pelo administrador. Ou seja, desenvolvido para definir e manipular políticas que permitam processos sem privilégios comunicarem com processos com privilégios. O PolicyKit é especialmente para as aplicações nos ambientes de desktop, em sistemas operacionais do tipo Unix, com muitos usuários.

Atualmente possui suporte a diversas operações administrativas incluindo o NetworkManager, Udisks, PackageKit, Firewall, Serviços, Samba etc. O PolicyKit tem como objetivo proporcionar uma interface simples e centralizada para conceder aos usuários o acesso a administração de dispositivos e ferramentas controladas.

Comparando com outras soluções existentes, o PolicyKit permite um controle mais refinado. Invés de uma política de tudo ou nada, onde um usuário recebe um controle administrativo total sobre todo o sistema, somente para acessar uma ferramenta específica de administração, o PolicyKit pode permitir o acesso apenas para esta ferramenta específica. Todos os outros acessos ficam bloqueados.

Um tipo similar de controle refinado é proporcionado com PAM e sudo, permitindo o acesso a aplicações administrativas específicas, mas a necessidade de senha ainda é requerida e o acesso como superusuário, mesmo que limitado a tal aplicação, ainda é dependente.

Uma nova versão do PolicyKit, polkit-1, é a atualmente utilizada para as operações do PolicyKit. Os arquivos de configuração para estas operações estão localizadas em "/usr/share/polkit-1/". Ainda não há uma ferramenta de desktop para configurar o ambiente. Existem apenas caixas de diálogo para autenticação, quando requerida por uma aplicação ou dispositivo.

Um dos usos do PolicyKit é para permitir o acesso a dispositivos compartilhados gerenciados pelo Udisks. Isto inclui a maioria dos dispositivos de armazenamento no sistema. A configuração e o suporte do PolicyKit costuma estar pronta para o usuário nos casos de dispositivos removíveis. Mas, por exemplo, o acesso à outro disco interno, se existir, pode estar bloqueado por padrão.

Para liberar o acesso à estes dispositivos é necessária uma alteração nas opções do PolicyKit. Se o usuário possui permissão para realizar a ação, então a solicitação é aceita e a ação é executada.

Atualmente, pode-se alterar as configurações com uma edição manual dos arquivos de configuração, localizados no diretório "/usr/share/polkit-1/actions/". Para fazer as alterações é preciso primeiramente saber a ação e a autorização que será configurada. A página manual do polkit contém uma listagem das autorizações possíveis.

As autorizações podem ser "allow_any" para qualquer um, "allow_inactive" para o console inativo e "allow_active" para somente o console ativo (usuário conectado). Estas autorizações podem ser configuradas com valores específicos, os quais são:
auth_admin           Uso administrativo somente, autorização requerida sempre;
auth_admin_keep      Uso administrativo somente, mantida por curto período;
auth_self            Autorização de usuário requerida;
auth_self_keep       Autorização de usuário requerida, mantida por curto período;
yes                  Sempre permite acesso;
no                   Nunca permite acesso.

Também é necessário saber a ação do PolicyKit que será modificada e o respectivo arquivo para editar. O nome da ação é mostrado na caixa de diálogo do PolicyKit, que pede a senha quando o usuário tenta o acesso. O nome do arquivo será os primeiros segmentos do nome da ação com o sufixo "policy" anexado. Por exemplo, a ação para montar discos internos é "org.freedesktop.udisks.filesystem-mount-system-internal", assim o arquivo desta ação será "org.freedesktop.udisks.policy".

O arquivo está localizado no diretório "/usr/share/polkit-1/actions/". O caminho completo será "/usr/share/polkit-1/actions/org.freedesktop.udisks.policy".

Por padrão, o PolicyKit está configurado para requerer autorização usando a senha do administrador, antes de um usuário poder montar uma partição de um disco rígido interno. Se desejar permitir aos usuários montarem as partições, sem uma solicitação de autorização, o arquivo "org.freedesktop.udisks.policy" precisará de uma modificação para alterar o padrão "allow_active", da ação "filesystem-mount-system-internal", de "auth_admin_keep" para "yes".

Localize a identificação da ação, rotulada como:

<action id="org.freedesktop.udisks.filesystem-mount-system-internal">
  <description>Mount a system-internal device</description>

Geralmente é a segunda ação identificada no arquivo. No final da seção desta ação, existe a seguinte linha, localizada na subseção <defaults>:

<allow_active>auth_admin_keep</allow_active>

Substitua "auth_admin_keep" por "yes", ficando:

<allow_active>yes</allow_active>

Salve o arquivo. A partir deste momento, os usuários não precisarão mais digitar uma senha para montar as partições internas.

O PolicyKit é desenvolvido e mantido por David Zeuthen, da Red Hat, e hospedado pelo projeto Freedesktop.org. A distribuição Fedora foi a primeira a incluir o PolicyKit e desde então é utilizado em várias outras distros incluindo Ubuntu e OpenSUSE.

segunda-feira, 26 de julho de 2010

Como criar imagens de partições e montá-las separadamente

Um arquivo imagem de um disco rígido ou de uma partição pode ser criado utilizando a ferramenta dd. O dd é um comando usado para copiar de um arquivo ou dispositivo sendo a entrada, para um arquivo ou dispositivo sendo a saída, gerando uma simples imagem idêntica. O dd cria uma cópia exata do arquivo ou dispositivo, incluindo o slack space dos arquivos e o espaço não alocado. Não é somente uma cópia lógica da estrutura de arquivos. O dd não adiciona informações extras em sua saída, é apenas uma cópia do fluxo de bits do início ao fim.

Para fazer uma imagem de um dispositivo de armazenamento para um arquivo, a sintaxe da linha do comando dd é semelhante ao apresentado abaixo:

# dd if=/def/sdf of=arquivoimagem.dd

No exemplo acima o operador "if" recebe o dispositivo de entrada e o operador "of" indica o arquivo de saída. Este comando serve para copiar um disquete, um pendrive, um DVD e até um disco rígido inteiro, claro que respeitando o caminho para o respectivo dispositivo. Opcionalmente pode-se acrescentar um controle para que o processo de cópia não seja interrompido caso encontre algum erro na leitura. A linha de comando ficaria assim:

# dd if=/def/sdf of=arquivoimagem.dd conv=noerror,sync

O arquivo imagem gerado, se for de um dispositivo de armazenamento com uma estrutura simples, isto é, com uma partição apenas, como é o caso de disquetes, pendrives ou DVDs, pode ser facilmente montado para acesso ao seu conteúdo. O comando para isso é semelhante ao comando como se fosse montar o próprio dispositivo, apenas acrescido de algumas opções para usar uma interface de loop:

# mount -t vfat -o ro,loop arquivoimagem.dd /mnt/pendrive

A opção "loop" indica que será utilizado um dispositivo de loop para montar o sistema de arquivos contido no arquivo imagem. O kernel das distros Linux costumam já vir com suporte para dispositivos de loop. A opção "ro" é porque o conteúdo do arquivo imagem é só para leitura.

Para desmontar, o comando é o padrão:

# umount /mnt/pendrive

Para imagens de discos rígidos a situação é um pouco diferente. Um disco rígido possui diversos componentes que são um setor de boot, uma tabela de partição e uma ou várias partições. A imagem deste tipo de dispositivo também possui todos estes componentes, lembre-se, é uma cópia idêntica.

O comando de montagem não é capaz de encontrar o sistema de arquivos em uma imagem de disco rígido porque não é capaz de reconhecer a tabela de partição.

Quando a imagem é de um disco rígido que contém somente uma partição, o comando de montagem pode receber uma opção que direciona ao início da partição, pulando o setor de boot. Normalmente cada setor do disco contém 512 bytes e os primeiros 63 setores são para as informações da MBR etc., isto equivale a 32256 bytes do início até a partição. O comando de montagem para um caso deste tipo é como o exemplo abaixo:

# mount -t vfat -o ro,loop,offset=32256 arquivoimagem.dd /mnt/hd

Com o seguinte comando podemos confirmar estes valores de tamanho de setor etc:

# fdisk -lu arquivoimagem.dd

Mas é possível criar uma imagem somente da partição, que deste modo a imagem poderá ser facilmente montada como um dispositivo de loop. O comando para criar a imagem de uma partição é:

# dd if=/dev/sda1 of=imagemparticao1.dd

As partições podem ser listadas pelo comando:

# fdisk -l /dev/sda

Quando a imagem é de um disco rígido que contém mais de uma partição, podemos separar a imagem em partes onde cada parte vai se referir a uma única partição. Podemos utilizar para isso a mesma ferramenta dd. Cada partição estará em um arquivo imagem exclusivo e esta imagem poderá ser montada diretamente como um dispositivo de loop.

Primeiramente é preciso confirmar as posições de início e fim de cada partição. Utiliza-se para isso a ferramenta sfdisk em uma linha de comando semelhante a:

# sfdisk -luS imagem.dd

A saída deste comando é como as linhas a seguir:

Disk imagem.dd: cannot get geometry
Units = sectors of 512 bytes, counting from 0

    Device  Boot    Start       End    #sectors     Id     System
imagem.dd1             57     10259       10203     83     Linux
imagem.dd2          10260    112859      102600     83     Linux
imagem.dd3         112860    178694       65835     82     Linux swap / Solaris
imagem.dd4         178695    675449      496755     83     Linux

As informações que interessam são a do início (Start) e número de setores (#sectors) para cada uma das partições. Estes valores serão utilizados nas opções "skip" e "count" do comando dd. A opção "skip" faz com que o dd pule alguns setores do início da entrada e a opção "count" faz com que o dd copie somente alguns blocos de entrada. Um exemplo de linha de comando, com o aviso de conclusão, para extrair a segunda partição do exemplo acima é apresentado abaixo:

# dd if=imagem.dd of=imagemparticao2.dd bs=512 skip=10260 count=102600
102600+0 records in
102600+0 records out

Para extrair cada uma das partições existentes no arquivo imagem é necessário executar o mesmo comando, apenas alterando os valores para "skip" e "count". Examinando este comando mais a fundo, o arquivo de entrada é o arquivo imagem de todo o disco rígido (imagem.dd), a saída é a criação de um outro arquivo imagem. O tamanho do bloco é o tamanho do setor (512 bytes), conforme mostrado pelo comando sfdisk, e cada pedaço diskdump precisa iniciar onde a partição inicia e terminar no final da partição.

Esta imagem de somente uma partição pode ser montada para leitura utilizando o mesmo comando para montar dispositivos de loop. Um exemplo de comando é o abaixo:

# mount -t ext2 -o ro,loop imagemparticao2.dd /mnt/part2/

Se for preciso, é possível descobrir qual o sistema de arquivos da partição contida na imagem. A ferramenta file, que mostra o tipo do arquivo, pode ajudar nesta informação. Um exemplo de linha de comando com sua mensagem de saída é:

# file imagemparticao2.dd
imagemparticao2.dd: Linux rev 1.0 ext2 filesystem data (mounted or unclean)

A imagem gerada pela ferramenta dd é uma réplica fiel da sua origem. Muitas ferramentas disponíveis para o sistema Linux são capazes de trabalhar com uma imagem da mesma forma que com o dispositivo original, principalmente as ferramentas forenses.

quinta-feira, 10 de junho de 2010

Como montar uma imagem de um disco rígido

Um arquivo imagem de disco rígido, gerado por programas denominados "Disk Dump", pode ser montado para leitura da mesma forma que imagens ISO de CDs e DVDs. O sistema Linux possui algumas ferramentas para realizar esta operação.

Uma imagem gerada pelo comando, por exemplo, "dd if=/dev/sda of=imagem.dd bs=4096 conv=noerror,sync" é uma cópia integral de toda a superfície do disco rígido. É uma cópia crua (raw), em baixo nível, dos dados do disco.

Primeiramente é necessário conhecer algumas informações da imagem do disco. Mais precisamente o setor de início e o tamanho da unidade do setor. Normalmente as partições iniciam no setor 63 mas no Windows Vista ou superior o primeiro setor é o 2047. O seguinte comando retorna estas informações:

fdisk -lu imagem.dd

Um exemplo de saída está nas linhas a seguir:

Disk imagem.dd: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xf27ef27e

    Device Boot      Start         End      Blocks   Id  System
imagem.dd1   *          63    26700029    13349983+   7  HPFS/NTFS
Partition 1 has different physical/logical endings:
     phys=(1023, 254, 63) logical=(1661, 254, 63)

Agora devemos associar a imagem à um dispositivo de loop. Isto é feito pela ferramenta "losetup". Esta ferramenta configura e controla os dispositivos de loop. O seguinte comando retorna o primeiro dispositivo de loop livre:

losetup -f

Assim, podemos fazer a associação do dispositivo de loop ao arquivo imagem:

losetup -o $((63*512)) /dev/loop0 imagem.dd

Podemos confirmar a associação obtendo informações do dispositivo de loop, com o comando abaixo:

losetup /dev/loop0

Um exemplo de saída é:

/dev/loop0: [0802]:2967800 (/root/imagem.dd), offset 32256

Agora é só montar o dispositivo de loop, consequentemente a imagem do disco rígido, com um comando semelhante ao apresentado abaixo:

mount -o ro,noatime,noexec /dev/loop0 /mnt/hdd

Para desassociar o arquivo imagem com o respectivo dispositivo de loop, basta executar o próximo comando (antes desmonte o dispositivo com "umount /mnt/hdd"):

losetup -d /dev/loop0

Os comandos apresentados neste artigo servem em um cenário de uma imagem de disco rígido que possua uma única partição. Uma situação diferente, pode necessitar de outros comandos.