%20apenas%20a%20determinado%20diret%C3%B3rio.png)
É possível limitar o acesso dos programas apenas a determinado diretório, por exemplo, para executarViberno Fedora e forçá-lo a ler apenas em /home/username/.local/share/viber/exchange
e nenhum outro diretório?
Eu consegui criar e executarVibercomo outro user:group
( viber:viber
). Quando tento abrir arquivos do Viber que pertencem a mim ou a qualquer outro usuário, ele não consegue lê-los. Objetivo alcançado, mas parcialmente. Agora, me deparei com outro problema, que éViberfunciona apenas com mensagens e quando tento fazer uma ligação diz que não encontra microfone nem alto-falantes? Parece que sei por que (eu executo o X Server (GNOME) como eu mesmo eVibercomo viber:viber
( user:group
) ), mas não sei como deixarvibraçãousuário usar microfone e alto-falantes enquanto executa o servidor X em meu nome?
Pode ser que eu precise adicionar viber
um usuário a um determinado grupo? Provavelmente existem algumas soluções alternativas com o SELinux? Em caso afirmativo, você poderia fornecer um exemplo de política adequado? :D
Viberparece ótimo, mas não é de código aberto e só Deus sabe o que está no código-fonte daquele software pré-compilado!
Responder1
Usandochroot
Crie um pequenodiretório raizcontendo /bin
, /usr
, /lib
e /tmp
assim por diante (dependendo da sua necessidade), copie todas as suas coisas para estenova raiz, do que executar chroot
neste diretório.
chroot
O comando é uma ferramenta Un*x muito antiga, construída exatamente nesse sentido.
Você poderiavinculardiretório emrecipienteusando mount --bind
.
Dê uma olhada man chroot
e man mount
!
Pequena tentativa:
ldd /bin/bash
linux-vdso.so.1 => (0x00007fff3e4b5000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f06290a1000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0628e9d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0628b12000)
/lib64/ld-linux-x86-64.so.2 (0x00007f06292e8000)
sudo -s
Aviso, a partir daí!
mkdir /tmp/test/chrooted/lib64
cp -t /tmp/test/chrooted/lib/x86_64-linux-gnu/ \
/lib/x86_64-linux-gnu/{libc.so.6,libdl.so.2,libtinfo.so.5}
cp -t /tmp/test/chrooted/lib64 /lib64/ld-linux-x86-64.so.2
chroot /tmp/test/chrooted
Estou preso!
ls
bash: ls: command not found
Não há ls
comando em /bin
!
Usando openvz
oulxc
Próximo passo emvirtualização leveé executar um de openvz
ou lxc
(ou outro, talvez).
Estas ferramentas fazem aprox. igual a chroot
, mas usenamespace de kernel isolado. Isso permite simular interfaces de rede ou outros dispositivos e algumas limitações de memória, CPU e outros recursos...
Com esse tipo devirtualização leve, você pode compartilhar diretórios da mesma maneira que usando chroot
, usando mount --bind
(ou openvz
talvez usando mount -t simfs
possa ser útil).
Virtualização forte
Em seguida, você pode usar o kvm
, xen
ou outro software de virtualização proprietário...
Mas a partir daí, compartilhar diretórios implica algum tipo de(pseudo) serviço de rede...