Estou tentando executar um script bash no Cygwin.
Eu recebo Must run as root, i.e. sudo ./scriptname
erros.
chmod 777 scriptname
não faz nada para ajudar.
Procurei maneiras de imitar o sudo no Cygwin, para adicionar um usuário root, pois chamar "su" gera o erro su: user root does not exist
, qualquer coisa útil, e não encontrei nada.
Alguém tem alguma sugestão?
what
script que está tentando executar? Não há equivalente a 'sudo' dentro de um shell cygwin - os direitos são os do usuário win que lançou o shell cygwin; portanto, o link KyleWpppd é bom para evitar erros como "comando sudo unknown". No seu caso, parece um problema específico com o script que você deseja executar.Respostas:
Respondi a essa pergunta no SuperUser, mas somente após o OP desconsiderar a resposta inútil que era a única resposta para a pergunta na época.
Aqui está a maneira correta de elevar as permissões no Cygwin, copiadas da minha própria resposta no SuperUser:
Encontrei a resposta na lista de e-mails da Cygwin . Para executar
command
com privilégios elevados no Cygwin, preceda o comando dacygstart --action=runas
seguinte maneira:Isso abrirá uma caixa de diálogo do Windows solicitando a senha de administrador e execute o comando se a senha apropriada for digitada.
Isso é facilmente script, contanto que
~/bin
esteja no seu caminho. Crie um arquivo~/bin/sudo
com o seguinte conteúdo:Agora torne o arquivo executável:
Agora você pode executar comandos com privilégios reais elevados :
Pode ser necessário adicionar
~/bin
ao seu caminho. Você pode executar o seguinte comando na Cygwin CLI ou adicioná-lo a~/.bashrc
:Testado no Windows 8 de 64 bits.
Você também pode, em vez das etapas acima, adicionar um alias para este comando
~/.bashrc
:fonte
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(não consigo descobrir como inserir novas linhas neste comentário, então adicionei '\ n's ao código). O restante do PATH = ... em diante é bom .ls
é envolvê-lo em um processo de execução longa, como mintty ou bash ou zsh também. Mas tudo aparece em um terminal separado. Que neste momento, eu poderia apenas abri-lo via GUI usando o ConEMU."$@"
expande para algo como"$1" "$2" "$3" ...
e sem,$@
expande para$1 $2 $3...
.Você provavelmente precisará executar o cygwin shell como administrador. Você pode clicar com o botão direito do mouse no atalho e clicar em executar como administrador ou acessar as propriedades do atalho e verificar na seção de compatibilidade. Apenas tenha cuidado ... as permissões de root podem ser perigosas.
fonte
sudo
no Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Sem ele, não consegui acessar as pastas e arquivos rsynced.Com base na resposta de dotancohen, estou usando um alias:
Funciona como um encanto:
E se você tiver o SysInternals instalado, poderá iniciar um shell de comando como usuário do sistema com muita facilidade
fonte
Encontrei sudo-for-cygwin , talvez isso funcione, é um aplicativo cliente / servidor que usa um script python para gerar um processo filho no Windows (pty) e fazer a ponte entre o tty do usuário e o processo de E / S.
Ele requer python no greenlet do Windows e dos módulos Python e eventlet no Cygwin.
fonte
Ou instale o pacote syswin, que inclui uma porta su para cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
fonte
Parece que
cygstart/runas
não lida adequadamente"$@"
e, portanto, comandos que possuem argumentos contendo espaços (e talvez outros meta-caracteres do shell - não verifiquei) não funcionarão corretamente.Decidi escrever apenas um pequeno
sudo
script que funciona escrevendo um script temporário que executa os parâmetros corretamente.fonte
Esta resposta é baseada em outra resposta . Primeiro, verifique se sua conta está no grupo Administradores.
Em seguida, crie um arquivo genérico "runas-admin.bat" com o seguinte conteúdo:
Em seguida, execute o arquivo em lotes assim:
Por exemplo:
Apenas certifique-se de colocar cada comando separado entre aspas duplas. Você receberá o prompt do UAC apenas uma vez usando esse método e esse procedimento foi generalizado para que você possa usar qualquer tipo de comando.
fonte
Uma nova proposta para aprimorar o SUDO para CygWin do GitHub neste segmento , chamado TOUACExt :
Ainda na pré-beta , mas parece estar funcionando.
fonte
Cheguei aqui pelo google e, na verdade, acredito que encontrei uma maneira de obter um prompt de raiz totalmente funcional no cygwin.
Aqui estão os meus passos.
Primeiro você precisa renomear a conta de administrador do Windows para "root" Faça isso abrindo start manu e digitando "gpedit.msc"
Edite a entrada em Diretiva do computador local> Configuração do computador> Configurações do Windows> Configurações de segurança> Diretivas locais> Opções de segurança> Contas: renomear conta de administrador
Você precisará habilitar a conta se ela ainda não estiver ativada. Política do Computador Local> Configuração do Computador> Configurações do Windows> Configurações de Segurança> Diretivas Locais> Opções de Segurança> Contas: Status da conta do Administrador
Agora saia e entre na conta root.
Agora defina uma variável de ambiente para o cygwin. Para fazer isso da maneira mais fácil: Clique com o botão direito em Meu Computador> Propriedades
Clique (na barra lateral esquerda) "Configurações avançadas do sistema"
Perto da parte inferior, clique no botão "Variáveis ambientais"
Em "Variáveis do sistema", clique no botão "Novo ..."
Para o nome, coloque "cygwin" sem as aspas. Para o valor, digite seu diretório raiz cygwin. (O meu era C: \ cygwin)
Pressione OK e feche tudo isso para voltar à área de trabalho.
Abra um terminal Cygwin (cygwin.bat)
Edite o arquivo / etc / passwd e altere a linha
Para isso (seus números e nome da máquina serão diferentes, apenas altere os números destacados para 0!)
Agora que tudo está terminado, este próximo bit fará o comando "su" funcionar. (Não perfeitamente, mas funcionará o suficiente para usar. Não acho que os scripts funcionem corretamente, mas ei, você chegou até aqui, talvez possa encontrar o caminho. E, por favor, compartilhe)
Execute este comando no cygwin para finalizar o negócio.
Faça logout da conta raiz e volte para a sua conta de usuário normal do Windows.
Depois de tudo isso, execute o novo "su.bat" manualmente clicando duas vezes no explorer. Digite sua senha e vá em frente e feche a janela.
Agora tente executar o comando su do cygwin e veja se tudo deu certo.
fonte
Insatisfeito com a solução disponível, adotei o script do nu774 para adicionar segurança e facilitar a instalação e o uso. O projeto está disponível no Github
Para usá-lo, basta fazer o download
cygwin-sudo.py
e executá-lo viapython3 cygwin-sudo.py **yourcommand**
.Você pode configurar um alias por conveniência:
fonte
Use isso para obter uma janela de administrador com o bash ou o cmd em execução, a partir de qualquer menu de contexto de diretórios. Basta clicar com o botão direito do mouse no nome de um diretório e selecionar a entrada ou pressionar o botão direito do mouse.
Isso é baseado na ferramenta chere e, infelizmente, não está funcionando (para mim) no link_boy. Funciona bem para mim usando o Windows 8,
Um efeito colateral é a cor diferente na janela do cmd do administrador. Para usar isso no bash, você pode alterar o arquivo .bashrc do usuário administrador.
Eu não consegui obter a versão "background" (clique com o botão direito do mouse em um diretório aberto) para executar. Sinta-se livre para adicioná-lo.
fonte
Uma maneira muito simples de ter um shell cygwin e sub-shell correspondentes para operar com privilégios de administrador é alterar as propriedades do link que abre o shell inicial.
O seguinte é válido para o Windows 7 ou superior (talvez também para versões anteriores, mas não marquei)
Normalmente começo o shell cygwin a partir de um link cygwin no início botão (ou na área de trabalho). Então, mudei as propriedades do link cygwin nas abas
/ Compatibilidade / Nível de privilégio /
e marquei a caixa,
"Execute este programa como administrador"
Isso permite que o shell cygwin seja aberto com privilégios de administrador e os subshells correspondentes também.
fonte
Eu conheci essa discussão procurando alguns detalhes sobre a
sudo
implementação em diferentes sistemas operacionais. Ao ler, descobri que a solução por @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) é útil, mas pode ser melhorada um pouco. Evitei criar o arquivo temporário e implementei para executar tudo pelo script único.Também investiguei a próxima etapa da melhoria na saída na única janela / console. Infelizmente, sem sucesso. Tentei usar pipes nomeados para capturar STDOUT / STDERR e imprimir na janela principal. Mas o processo filho não gravou em pipes nomeados. No entanto, a gravação em um arquivo regular funciona bem.
Eu desisti de todas as tentativas de encontrar a causa raiz e deixei a solução atual como está. Espero que meu post possa ser útil também.
Melhorias:
mintty
oubash
, se o primeiro não for encontradofonte
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
não quebra se houver espaços em um argumento? Sempre fazia isso quando eu passava por cygstart / runas.Com base na resposta de @ mat-khor, peguei o syswin
su.exe
, salvei comomanufacture-syswin-su.exe
e escrevi esse script de wrapper. Ele lida com o redirecionamento dos comandos stdout e stderr, para que possa ser usado em um canal, etc. Além disso, o script é encerrado com o status do comando fornecido.Limitações:
env USERNAME=...
da chamada de script a substitui. Se outras opções fossem necessárias, o script teria que distinguir entre syswin-su e argumentos de comando, por exemplo, divisão no primeiro--
..
fonte
Não posso testar completamente isso sozinho, não tenho um script adequado para testá-lo e não sou especialista em Linux, mas você pode ser capaz de hackear algo perto o suficiente.
Eu tentei essas etapas e elas parecem funcionar, mas não sei se será suficiente para suas necessidades.
Para contornar a falta de um usuário 'root':
Em seguida, você é executado como um usuário chamado 'root' no cygwin, que, juntamente com o 'Executar como administrador' no arquivo bash.exe, pode ser suficiente.
No entanto, você ainda precisa de um sudo.
Eu fingi isso (e alguém com mais conhecimento de linux provavelmente pode fingir melhor) criando um arquivo chamado 'sudo' em / bin e usando esta linha de comando para enviar o comando para su:
A linha de comando 'sudo vim' e outras parecem funcionar bem para mim, então você pode tentar.
Fique interessado em saber se isso funciona ou não para suas necessidades.
fonte
O que costumo fazer é ter um auxiliar de registro "Abrir aqui" para abrir um shell cygwin com privilégios administrativos bastante fáceis de qualquer lugar do meu computador.
Esteja ciente de que você precisa ter o pacote "chere" do cygwin instalado, use "
chere -i -m
" primeiro de um shell cygwin elevado.Supondo que sua instalação do cygwin esteja em C: \ cygwin ...
Aqui está o código do registro:
Espero que isto ajude. Deixe-me saber se funciona para você. Obrigado.
PS: Você pode pegar esse código, copiar e colar e salvá-lo em um arquivo name.reg para executá-lo ... ou você pode adicionar manualmente os valores.
fonte
Experimentar:
onde
<dir>
é o diretório no qual você deseja alterar as permissões.fonte