Loja de extensões do Chrome para empresas
Esta é uma prova de conceito de uma Chrome Extension Store privada para uso empresarial.
Isso só foi testado com o Chromium no Linux , mas os mesmos princípios devem ser aplicados no Windows para máquinas conectadas a um domínio do Active Directory.
Observação: "Para instâncias do Windows que não estão associadas a um domínio do Microsoft® Active Directory®, a instalação forçada está limitada a aplicativos e extensões listados na Chrome Web Store."
Baixe todo o projeto para uma pasta local.
Execute npm install
para configurar os pacotes.
Execute sudo npm run first-run
para criar o arquivo de política em /etc/chromium/policies/managed/
(Pode ser necessário editar make/SETTINGS.js
se sua instância do Chromium usar uma pasta diferente)
Execute npm start
para construir as extensões e iniciar um servidor web simples, servindo a pasta dist/
.
Executar sudo npm run first-run
criará um arquivo de política em branco em /etc/chromium/policies/managed/crx-store-policy.json
com permissões 777 (leitura/gravação para todos os usuários).
Este arquivo será preenchido pelo npm start
abaixo.
Executando npm start
copiará de make/crx-store-policy.json
para /etc/chromium/policies/managed/crx-store-policy.json
contendo as seguintes políticas:
Se não funcionar, pode ser necessário editar make/SETTINGS.js
para alterar a pasta de destino para uma das seguintes opções:
O Chrome não instalará extensões, a menos que sejam:
Além disso, se a política ExtensionInstallBlocklist estiver definida como "*":
(A documentação mais antiga refere-se aos nomes de políticas ExtensionInstallBlacklist e ExtensionInstallWhitelist.)
Executar npm start
criará duas extensões de amostra em src/extensions/
e as copiará para dist/
A execução de npm start
hospedará um servidor web leve na porta 5000, servindo arquivos de dist/
:
Funcionalidades adicionais podem ser desbloqueadas iniciando o Chrome com sinalizadores especiais de linha de comando. No entanto, este não é um cenário realista para a maioria dos utilizadores empresariais.
Para fazer alterações nas extensões de amostra em src/extensions/
:
manifest.json
npm start
para reconstruir os arquivos binários.crx O código em make/
usa módulos ES, não CommonJS.
O Linux não possui um Registro, então este projeto usa um arquivo de política.
Para Windows, você terá que usar a Política de Grupo do Active Directory.
As instruções para isso estão amplamente disponíveis online.
Para forçar a instalação de uma extensão, crie esta chave de registro e valor filho:
Para ativar o armazenamento de extensões personalizado, crie esta chave de registro e valor filho:
Para ativar ferramentas de desenvolvedor em extensões de instalação forçada (remova isso na produção):
Para ativar a API Enterprise.hardwarePlatform:
http://gromnitsky.blogspot.com/2019/04/crx3.html
(pelo autor de crx3-utils)
https://blog.janestreet.com/chrome-extensions-finding-the-missing-proof/
Veja aqui: https://sites.google.com/site/lock5stat/offline-use/installing-for-all-users
A extensão de instalação forçada pode acessar algumas APIs restritas adicionais. Na prática, a única API adicional de interesse é enterprise.hardwarePlatform
.
Derivado de https://github.com/chromium/chromium/blob/master/chrome/common/extensions/api/_permission_features.json
O Chrome vem com uma ampla variedade de APIs de extensão. Muitos deles estão restritos ao ChromeOS e/ou às próprias extensões do Google e/ou apenas aos Componentes. (Os componentes são uma forma diferente de estender a funcionalidade do navegador; eles são reservados apenas para desenvolvedores do Chrome. Consulte chrome://components para obter mais informações.)
Aqui estão todas as APIs conhecidas e se elas estão disponíveis no Windows:
Permissão | Disponível na extensão Enterprise no Windows |
---|---|
acessibilidadeFeatures.modify | Sim |
acessibilidadeFeatures.read | Sim |
acessibilidadePrivado | Não |
aba ativa | Sim |
atividadeLogPrivado | Não |
preenchimento automáticoAssistentePrivado | Não |
preenchimento automáticoPrivado | Não |
autotestePrivado | Não |
fundo | Sim |
favoritos | Sim |
brailleDisplayPrivado | Não |
navegandoDados | Sim |
provedor de certificado | Não |
cromoPrivado | Não |
chromeosInfoPrivado | Não |
área de transferênciaLeia | Sim |
área de transferênciaEscrever | Sim |
linha de comandoPrivada | Não |
comandos.acessibilidade | Não |
configurações de conteúdo | Sim |
menus de contexto | Sim |
biscoitos | Sim |
crashReportPrivate | Não |
criptotokenPrivado | Não |
depurador | Sim |
desenvolvedorPrivado | Não |
ferramentas de desenvolvimento | Sim |
conteúdo declarativo | Sim |
desktopCaptura | Sim |
desktopCapturePrivate | Sim, mas inútil |
documentScan | Não |
downloads | Sim |
downloads.open | Sim |
downloads.prateleira | Sim |
Enterprise.deviceAttributes | Não |
Enterprise.networkingAttributes | Não |
empresa.hardwarePlatform | Sim |
Enterprise.platformKeys | Não |
Enterprise.platformKeysPrivate | Não |
empresa.reportingPrivado | Não |
experimental | Sim, mas inútil |
arquivoBrowserHandler | Não |
gerenciador de arquivosPrivado | Não |
fileSystemProvider | Não |
configurações de fonte | Sim |
gcm | Sim |
geolocalização | Sim |
história | Sim |
identidade | Sim |
identidade.e-mail | Sim |
identidadePrivada | Não |
teste idl | Sim, mas inútil |
imageWriterPrivado | Não |
entrada | Sim (não Mac) |
inputMethodPrivado | Não |
configurações de idiomaPrivado | Não |
launcherSearchProvider | Não |
lockWindowFullscreenPrivado | Não |
Conecte-se | Não |
loginScreenStorage | Não |
loginScreenUi | Não |
estado de login | Não |
webcamPrivada | Não |
networking.castPrivado | Não |
gerenciamento | Sim |
mediaPlayerPrivado | Não |
mediaRouterPrivado | Não |
mdns | Não |
notificações | Sim |
ecoPrivado | Não |
captura de página | Sim |
senhasPrivadas | Não |
chaves de plataforma | Não |
plug-in | Sim - TODO o que é isso? |
impressão | Não |
impressãoMetrics | Não |
privacidade | Sim |
processos | Não |
procurador | Sim |
recursosPrivado | Não |
rtcPrivado | Não |
Navegação seguraPrivada | Não |
script | Sim (m3) |
procurar | Sim |
sessões | Sim |
configuraçõesPrivado | Não |
assinadoInDevices | Não (talvez futuro) |
sistemaPrivado | Não |
abaGrupos | Sim (m3) |
guias | Sim |
abaCaptura | Sim |
terminalPrivado | Não |
topSites | Sim |
transitórioBackground | Não (talvez futuro) |
tts | Sim |
ttsEngine | Sim |
usuáriosPrivado | Não |
papel de parede | Não |
papel de paredePrivado | Não |
navegação na web | Sim |
webrtcÁudioPrivado | Não |
webrtcDesktopCapturePrivado | Não |
webrtcLoggingPrivado | Não |
webrtcLoggingPrivate.audioDebug | Não |
loja virtualPrivada | Não |
Fim do arquivo.