Acho importante observar que o cat
não é o problema no meu comentário acima, mas o redirecionamento de shell. Você está tentando restringir a cópia de binários ou arquivos de texto? Se for binários, então acredito que você pode trabalhar com o rbash (veja link ).
No entanto, se forem arquivos de texto, não sei como você pode impedir que alguém simplesmente copie de seu terminal local.
Não tenho certeza se alguma solução geral do SELinux seria útil aqui. Seu aplicativo que lê arquivos precisa gravar dados em qualquer lugar? Se não, e esses arquivos só precisam ser lidos pelo seu aplicativo, você poderia apenas dar acesso de somente leitura do tipo do seu aplicativo aos arquivos do tipo que você gostaria que ele lesse e não escrever em lugar algum.
Acho que mais algumas informações sobre as permissões exatas exigidas pelo seu caso de uso podem ser úteis, desculpe pela resposta vaga.
ATUALIZAÇÃO - RESPOSTA MAIS ESPECÍFICA
Eu acho que você pode conseguir o que quiser sem o SELinux, pois é assim que muitas coisas são tratadas (por exemplo, usuários normais mudando sua senha em / etc / shadow através do comando passwd
):
- Crie um usuário e / ou grupo separado para o seu software comercial (talvez já esteja pronto)
- Conceder acesso somente leitura aos arquivos pelo usuário e / ou grupo mencionado
- Verifique se os usuários normais não têm acesso a esses arquivos
- Faça o seu setuid ou getgid executável (dependendo se você usou um grupo ou usuário)
chmod g+s
ouchmod u+s
- Quando os usuários executam o aplicativo, eles agora terão as mesmas permissões que o usuário ou grupo do aplicativo, permitindo assim o acesso de leitura a esses arquivos específicos no aplicativo desejado.
UPDATE2 - USUÁRIOS E GRUPOS MÚLTIPLOS
Se você tiver vários aplicativos e grupos, provavelmente conseguirá a funcionalidade que está procurando com sudo
. Muitas pessoas estão cientes de sua capacidade de permitir que você execute comandos em uma raiz, mas sua utilidade vai muito além desse exemplo. Não tenho certeza se é uma configuração ideal, mas é uma maneira de fazer o que você está tentando.
Ainda é possível criar todos os arquivos de aplicativo de propriedade do aplicativo, mas você pode criar grupos separados para cada conjunto de arquivos.
Isso é o que o seu /etc/sudoers
ou um arquivo em /etc/sudoers.d/
poderia ter:
User_Alias FILEGROUP1 = user1, user2
User_Alias FILEGROUP2 = user3, user4
Cmnd_Alias MYEDITOR = /usr/local/bin/myeditor, /usr/local/bin/mycompiler
FILEGROUP1 ALL=(:fileset1) NOPASSWD: MYEDITOR
FILEGROUP2 ALL=(:fileset2) NOPASSWD: MYEDITOR
Onde user1
e user2
precisam de acesso aos arquivos de propriedade do grupo fileset1
e user3
e user4
precisam de acesso aos arquivos de propriedade do grupo fileset2
. Você também pode usar grupos em vez de usuários.
Os usuários podem acessar seus arquivos através do editor fazendo sudo -g fileset1 /usr/local/bin/myeditor
ou algo semelhante.
Pode ser útil criar alguns scripts de wrapper para os comandos sudo -g
necessários para seus usuários, especialmente porque parece que pode ser um aplicativo gráfico.
Mais detalhes: