2011-02-07 2 views
1

저는 오늘 아침 카프리 스트 라노로 응용 프로그램을 배포하는 데 문제가있었습니다."deploy cap : setup"은 BASH를 파괴 할 수 있습니까?

# git push 
# cap deploy:setup 

이상한 일이 생겨서 더 이상 내 호스트와 ssh를 할 수 없었습니다.

기술 직원이 (이탈리아어로) : "실행 한 명령이 셸 바이너리를 덮어 쓰면 시스템을 더 이상 사용할 수 없게됩니다"라고 말합니다. 두 가지 옵션 : 나는 어리 석거나 잘못되었습니다. 여기에 뚜껑에 쉘 출력이 있습니다 : deploy 그리고 ssh에서 오류가 발생했습니다. 시스템 (VPS)이 재부팅되면 더 이상 ssh를 사용할 수 없었습니다.

아이디어가 있으십니까?

[email protected]:/var/www/rails/my_application$ git push 
Counting objects: 239, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (191/191), done. 
Writing objects: 100% (202/202), 379.77 KiB, done. 
Total 202 (delta 44), reused 0 (delta 0) 
To ssh://[email protected]_application.it/~/git/my_application.git 
    96c1f19..3cc9e1c master -> master 
[email protected]:/var/www/rails/my_application$ cap deploy:setup 
    * executing `deploy:setup' 
    * executing "mkdir -p /var/www/rails/my_application /var/www/rails/my_application/releases /var/www/rails/my_application/shared /var/www/rails/my_application/shared/system /var/www/rails/my_application/shared/log /var/www/rails/my_application/shared/pids && chmod g+w /var/www/rails/my_application /var/www/rails/my_application/releases /var/www/rails/my_application/shared /var/www/rails/my_application/shared/system /var/www/rails/my_application/shared/log /var/www/rails/my_application/shared/pids" 
    servers: ["beta.my_application.it"] 
    [beta.my_application.it] executing command 
** [out :: beta.my_application.it] 
** [out :: beta.my_application.it] malloc: ../bash/parse.y:2823: assertion botched 
** [out :: beta.my_application.it] nunits < 30 
** [out :: beta.my_application.it] Aborting... 
    command finished 
failed: "env PATH=/usr/local/bin:/usr/bin:/bin GEM_PATH=/var/lib/gems/1.9.1 sh -c 'mkdir -p /var/www/rails/my_application /var/www/rails/my_application/releases /var/www/rails/my_application/shared /var/www/rails/my_application/shared/system /var/www/rails/my_application/shared/log /var/www/rails/my_application/shared/pids && chmod g+w /var/www/rails/my_application /var/www/rails/my_application/releases /var/www/rails/my_application/shared /var/www/rails/my_application/shared/system /var/www/rails/my_application/shared/log /var/www/rails/my_application/shared/pids'" on beta.my_application.it 
[email protected]:/var/www/rails/my_application$ ssh beta.my_application.it 
Linux my_application 2.6.18-194.26.1.el5.028stab079.2ent #1 SMP Fri Dec 17 19:44:51 MSK 2010 i686 

The programs included with the Debian GNU/Linux system are free software; 
the exact distribution terms for each program are described in the 
individual files in /usr/share/doc/*/copyright. 

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 
permitted by applicable law. 
Last login: Mon Feb 7 12:00:53 2011 from dynamic-adsl-xx-xx-xx-xx.------.------.it 

malloc: ../bash/subst.c:4494: assertion botched 
realloc: called with unallocated block argument 
Aborting...Connection to beta.my_application.it closed. 
+0

deploy.rb 파일을 게시 할 수 있습니까? – CalebHC

+0

Capistrano는 bash 손상에 책임이 없다는 것이 밝혀졌습니다. 나는 바보가 아닌 것처럼 보입니다. 세 번째로 서비스 공급자에게 * 위의 명령으로 bash를 덮어 쓸 수있는 방법을 물었을 때 문제는 아무런 설명없이 수정되었고 모든 것이 완벽하게 작동했습니다. 나는 파일 시스템 손상이나 openvz의 잘못된 설정/파일 손상과 같은 다른 문제가 있다고 가정합니다. – user578477

+0

해당 시스템 관리자의 지식 부족으로 인해 다른 호스팅 솔루션을 찾아 볼 수 있습니다. 실수로 삭제하거나 "수정"할 수있는 것을 누가 알고 있는지. – christophercotton

답변

2

표준이 아닌 다른 플러그인이 있거나 누군가가 엉망인 보석을주지 않는 한 짧은 답변은 아니오입니다. (거의 아무도 보석 시그니처를 확인하는 것을 귀찮게합니다.) 표준 deploy : setup은 단지 몇 개의 심볼릭 링크와 디렉토리를 만듭니다.

당신이 값에 변수를 설정한다면 그것은 root로 실행하고, 이론 않습니다 (안된) 등 set :deploy_to, '/bin/bash', 그것은 하지만 당신은 그랬어하지 않는 한, 나는 그 비 말하고 싶지만, 바이너리가 손상 될 수 있습니다 -발행물.

당신은 쉘에 의존하지 않고,이 디버깅 할 수 있습니다 - 명령 모드에서 SSH를 사용하여 :이있었습니다 경우 테스트 할 수 있도록 해당 사용자의 기록 파일 (bash는) 덤프합니다

# ssh [email protected] -c 'history' 
서버에서 조작라도, 당신은 또한 루트로 확인 및/또는 명령 (당신도 할 수 cat /var/log/messages를 로그를 다시주고 의심스러운 활동보고 등 who, last 다른 한 라이너를 실행할 수 있습니다.

I을 Capistrano가 책임을 져야 할 기회가 0이라고 말합니다 (출처 : 저는 관리자입니다). -하지만 위에서 언급 한 것처럼 SHS 명령 모드를 사용하여 시스템을 작동 상태로 되돌릴 수 있습니다 (예 : ssh [email protected] -c 'aptitude install bash --force')

현명한 방법은 이런 일이 발생하지 않았 으면 서버를 지우는 것입니다. 암호를 변경하십시오 ... 일을 다시 시작하고 실행하는 방법으로 이것을 사용하십시오. 매우 미묘한 전술은 아니지만 해킹당한 경우 해커가 다른 쉘을 사용하는 사용자를 만들어서 쉽게 파기 할 수 있습니다.

관리자의 도움을 받아 /bin/bash - 파일의 내용이므로 텍스트, 정크, 손상된 바이너리 또는 배포본의 내용을 볼 수 있습니다.

+0

큰 관리자에게 유용한 정보를 제공해 주셔서 감사합니다! 알려지지 않은 문제는 설명이없는 시스템 제공자에 의해 해결되었으며 **는 Capistrano **와 관련이 없습니다 (답변 위의 설명 참조).어떻게 된 것인지 이해할 수 없으며, 서비스 제공 업체의 무능력으로 인해 말할 수 있습니다. 어쨌든, 나는 바커 루트의 역사를봤을 때 이상한 것이 없었습니다. ** ssh -c **가 필요 없기를 바라지 만, thin option의 문서를 살펴볼 예정입니다. 다시 한 번 감사드립니다! – user578477

관련 문제