Segurança diretório home mudança
Pergunta
Eu estou tentando atualizar com segurança o diretório home como especificado no /etc/passwd
,
mas os utils Linux padrão - usermod e vipw - para fazê-lo não são fornecidas
por Cygwin.
Alguém poderia me dizer como eles mudaram isso em Cygwin?
Solução 2
Eu acabei de sair todas as minhas conchas cygwin e editá-lo com a mão em um editor de texto. Tão longe, tão bom.
Nota: não escapam os espaços no "Documents and Settings" diretório. A entrada será semelhante
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
A linha é indexado sobre o caráter :
.
Outras dicas
EDIT: Para versões recentes do Cygwin (1.7.34 e além), consulte esta nova questão .
A resposta de como sblundy, você pode editar a-lado.
Mas se você quiser fazê-lo da maneira "oficial", use o específico do cygwin comando mkpasswd
. Abaixo está um trecho dos documentos oficiais sobre mkpasswd
:
Por exemplo, este comando:
Exemplo 3.11. Usando uma raiz casa alternativo $ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
colocaria diretórios home nas janelas dos usuários locais diretório Profiles '.
Há um monte de outros comandos realmente úteis descritos nas Cygwin Utilities página de documentação (que inclui mkpasswd
). O uso de cygpath
no exemplo acima é outra dessas ferramentas específicas do cygwin.
Enquanto você está nisso, você provavelmente também quer ler a Usando Cygwin eficazmente com documentação do Windows . Há um monte de realmente bons conselhos.
A resposta mais simples eu encontrei é fazer com que / home para ser um soft link para o diretório do Windows Home / UserProfile
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
Eu costumava cygpath como vai ficar o local adequado para o diretório HOME na versão atual do Windows. Na minha caixa de cygpath -H
retornos /cygdrive/c/Users
Para o usuário atual o seguinte trabalhou para mim:
- Fechar Cygwin.
- Definir a variável de ambiente usuário doméstico do Windows.
- Inicie o Cygwin.
- executar "mkpasswd -c -p "$ (cygpath -H)"> / etc / passwd".
- Restart Cygwin.
I confirmou que trabalhou executando ssh-keygen sem nenhum argumento. Depois de fazer essa alteração o aplicativo agora o padrão é salvar a chave para / cygdrive / c / Users / usuário em vez de / home / usuário.
Eu não sei se ambiente doméstico é necessária, mas mesmo assim eu fiz por instruções para configurar TortoiseGit com Cygwin usando a documentação oficial da tartaruga de apoio Cygwin não oficial aqui . Ambiente doméstico sozinho embora não foi suficiente para ssh-keygen para reconhecer a mudança diretório home.
Além disso, nota que a documentação oficial do Cygwin sobre esta questão pode ser encontrada aqui .
Confirmado no Windows 7 usando 64-bit Cygwin v1.7.35.
Eu sempre set casa como uma variável de ambiente específico do usuário em propriedades do computador.
Para evitar problemas causados ??por ter espaços no caminho para seu diretório home, use o curto-forma de diretório 'Profiles' do Windows - ou seja /cygdrive/c/DOCUME~1/user
.
Você pode fazer isso digitando o comando:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
Eu gosto de manter minha instalação do cygwin sincronizado para um pen drive e outro computador, então eu odeio embutir o diretório home. Eu uso o seguinte cygwin.bat:
echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL e ENDLOCAL certificar-se de que a Shell e em casa não clobber variáveis ??env existente para outros programas. conjuntos HOME=%~dp0..\..\doc\unix
casa para ser dois diretórios para cima, no subdiretório doc / unix. Então, em .... \ doc \ unix.bashrc, eu incluo PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
.
Eu não uso start /wait %CD%\bin\bash
para começar a festa, porque eu estou usando Console2 , então eu não preciso uma janela cmd adicional.
Usando Ambiente Windows Variável: HOME
Isso funciona para mim para um não-portátil, solução permanente, não-rede; ou seja, definindo a variável de ambiente HOME permanentemente no Windows.
Nota ??strong> que isso não afeta ssh ou telnet sessões que sempre se referem a / etc / passwd
ref:. Configurando Cygwin- meu variável de ambiente HOME não é o que eu quero
CMD
Para atuais user (precisa ser executado uma vez por usuário) ::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Para new Usuários:
reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
Nota: carets ^ antes por cento-sinais%
IMPORT REG arquivo
Importar este arquivo reg ( atual user):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
Para new usuários:
Windows Registry Editor Version 5.00
[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
00,45,00,25,00,00,00
REGEDIT
Em Regedit, em:
Para atual user:
HKEY_CURRENT_USER\Environment
Para new Usuários:
HKU\.DEFAULT\Environment
Criar HOME como um novo Valor da cadeia expansível (* REG_EXPAND_SZ *) e colocar em % USERPROFILE%
resposta por Christopher de outro lugar
Cygwin 1.7.34 +
Para aqueles que usam Cygwin 1.7.34 ou mais suportes Cygwin configurando como buscar diretório home, shell de login e informações gecos em /etc/nsswitch.conf
. Isto é detalhado na seção Guia de Cygwin Usuário:
Se você criou anteriormente um arquivo /etc/passwd
ou /etc/group
você deseja remover esses e configure Cygwin usando o novo modelo de segurança do Windows mapeamentos POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
configuração define como Cygwin vai buscar o diretório home do usuário /etc/nsswitch.conf
do arquivo db_home:
. A configuração padrão para db_home:
é
db_home: /home/%U
Então, por padrão, Cygwin apenas define a dir casa para /home/$USERNAME
. Você pode mudar isso embora para apontar para qualquer outro caminho personalizado que você deseja. Os caracteres curinga suportados são:
-
%u
O Cygwin nome de usuário (que de minúsculas u). -
%U
do Windows nome de usuário (que é maiúsculas U). -
%D
domínio do Windows no estilo NetBIOS. -
%H
diretório home do Windows no estilo POSIX. Note-se que, para a definiçãodb_home:
, isso só faz sentido certo após a barra que precede, como emdb_home: /%H/cygwin
-
%_
desde que o espaço e TAB caracteres são usados ??para separar os esquemas, um espaço no nome do arquivo tem de ser dado como%_
(que é um sublinhado). -
%%
Um personagem por cento.
No lugar de um caminho, você pode especificar um dos quatro esquemas caminho nomeado que são predefinidos.
-
diretório home
windows
do usuário é definido para o mesmo diretório que é utilizado como diretório home do Windows, normalmente algo ao longo das linhas de%USERPROFILE%
ouC:\Users\$USERNAME
. Claro, o diretório do Windows é convertido para POSIX-style por Cygwin. -
cygwin
AD apenas: diretório home do usuário é definido como o caminho POSIX dada no atributo cygwinHome da classe auxiliar cygwinUser. Veja também a seção chamada “O esquema cygwin” . -
unix
AD apenas: diretório home do usuário é definido como o caminho POSIX dada no atributo unixHomeDirectory da classe auxiliar posixAccount. Veja também a seção chamada “O esquema unix” . -
desc
diretório home do usuário é definido como o caminho POSIX dada no lar = "..." configuração XML-alike no atributo de descrição do usuário no SAM ou AD. Veja a seção chamada “O esquema desc” para uma descrição detalhada.
O seguinte fará o diretório home do usuário em Cygwin o mesmo que é usado para o diretório home do Windows.
db_home: windows
Cygwin 1.7.33 ou anterior
Para aqueles que usam Cygwin 1.7.33 ou anterior, atualize para a última versão Cygwin e remover arquivos /etc/passwd
e /etc/group
usado anteriormente, em seguida, veja os passos acima.
Else, siga estes passos mais velhos abaixo.
Em primeiro lugar, definir uma variável de ambiente Windows para casa que aponta para o seu perfil de usuário:
- Abrir Sistema em Controle Panel
- No Avançado guia clique Variáveis ??de Ambiente (para o fundo)
- Na área Variáveis ??de usuário clique em "Novo ..."
- Para Nome da variável entrar
HOME
- Para o valor variável entrar
%USERPROFILE%
- Clique em OK em todas as caixas de diálogo abertas para aplicar esta nova configuração
Agora, vamos atualizar o arquivo /etc/passwd
Cygwin com a variável %HOME%
do Windows que acabamos de criar. logins Shell e logins remotos via ssh
contará com /etc/passwd
para lhes dizer a localização do caminho $HOME
do usuário.
No tipo prompt de comando bash Cygwin o seguinte:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
O interruptor -d
diz mkpasswd para incluir usuários de domínio, enquanto -l
é usuários da máquina local apenas de saída. Isto é importante se você estiver usando um PC no trabalho, onde as informações do usuário é obtido a partir de um controlador de domínio do Windows.
Agora, você também pode fazer o mesmo para grupos, embora isso não é necessário a menos que você estará usando um computador que faz parte de um domínio do Windows. Cygwin lê informações do grupo dos bancos de dados de conta do Windows, mas você pode adicionar um arquivo /etc/group
se sua máquina é muitas vezes desconectado do seu controlador de domínio.
No Cygwin o bash prompt o seguinte:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Agora, sair Cygwin e começar tudo de novo. Você deve achar que seus pontos PRINCIPAL caminho para o mesmo local que o seu perfil de usuário WINDOWS - ou seja /cygdrive/c/Users/username
cd /home
rm -rf chris
ln -s /cygdrive/z chris
Eu não sou realmente certo se é a solução mais segura, mas é uma solução possível que funciona para mim;)
Eu editei o meu arquivo / etc / passwd diretamente (certificando-se de nada mais seria acessá-lo), e mudou todas as referências a / home para ser / Users (no Windows 7). Descobri que, para que tudo funcione corretamente, eu tive que excluir quaisquer diretórios no diretório / home (ou movê-los para outro local apropriado). Caso contrário, cygwin iria desenvolver uma personalidade dividida, onde, por exemplo, 'festa -l' começaria em / home / Pablo, mas $ HOME seria / Users / Pablo e emacs parece fazer o inverso. Uma vez que eu deletei / home / Pablo, tudo funcionou bem.