FreeBSD 8.2, đã xóa / bin / sh, không thể khởi động


8

Tôi đã đưa ra một quyết định thực sự tồi tệ trên một trong những máy chủ của tôi.

Tôi đã xóa /bin/sh. Tôi đã khởi động lại máy chủ và máy chủ sẽ không chạy vì nó cần /bin/shkhởi động các tập lệnh RC. Tôi không thể truy cập chế độ người dùng đơn vì sh là cần thiết.

Có cách nào dễ dàng để cài đặt lại vỏ bẻ khóa không?

Tôi đã thử sao chép sh từ một đĩa CD trực tiếp, nó đã thất bại trên thư viện ld-elf.so.1. Vì vậy, tôi đã sao chép nó vào / libexec từ livecd vào phân vùng / của tôi. Sau đó, nó cần thư viện libedit.so và tôi đã sao chép nó vào / libexec nhưng lần này nó không hoạt động.

Tôi đã thử một liên kết tượng trưng /usr/local/bin/bashnhưng điều đó vẫn gây ra lỗi loại "không thể tìm thấy sh". Tôi cho rằng đó là vì /usrchưa được gắn kết bởi vì nó được thực hiện từ một tập lệnh RC.

Bất kỳ trợ giúp nào cũng được đánh giá rất cao.


2
Ôi trời. Đó là um, không tốt. Thời gian để kéo băng cuối cùng.
MDMarra

Khốn khổ LiveCD của bạn có lẽ là do đó là một phiên bản FreeBSD khác (hoặc LiveCD của bạn đang sử dụng một nhị phân bí ẩn ma thuật là / bin / ABunchOfStuff liên kết cứng với các tên khác nhau). Phiên bản nào của FreeBSD bạn đang chạy?
voretaq7

phiên bản herp-derp là trong tiêu đề. Đừng bận tâm đến tôi. Cần cà phê.
voretaq7

3
Vậy ... uhm ... điều gì bắt buộc bạn phải làm điều này? Bạn làm cho nó âm thanh như thể nó là cố ý.
dùng606723

Câu trả lời:


8

Bạn cần thay thế / bin / sh bằng một cái gì đó ; đó là chìa khóa Nếu bạn có thể vào trình tải FreeBSD trong khi khởi động (với dấu nhắc "ok"), hãy thử một cái gì đó như thế này:

set init_shell=/bin/csh
unset init_script
unset init_path

Tôi đã nhận được thông tin này từ trình tải (8) từ các trang hướng dẫn FreeBSD (trực tuyến). Tôi đã không làm điều này, nhưng nó sẽ hoạt động (giả sử rằng / bin / csh có mặt và có thể thực thi được).

Nếu bạn có máy chủ FreeBSD 8.2 hoạt động ở nơi khác, bạn có thể thử đánh cắp / bin / sh từ nguồn đó và đưa nó vào hệ thống khi cần.

Thay phiên, lấy một / bin / sh tĩnh được xây dựng và thay vào đó; sẽ không có bất kỳ vấn đề thư viện nào với tệp nhị phân được xây dựng tĩnh.

EDIT: Tôi nên lưu ý: nếu bạn khởi động vào / bin / csh, bạn vẫn phải lấy thứ gì đó để sử dụng thay vì / bin / sh. Bạn có thể lấy nó qua Internet hoặc sao chép nó từ đĩa CD khác hoặc gói hoặc thứ gì đó; sử dụng / bin / csh để khởi động sẽ đưa bạn vào máy. Sao chép qua mạng yêu cầu bạn đưa lên mạng; mặt khác, sao chép từ CDROM.

Những cách tốt nhất để tránh điều này trong tương lai:

  1. Đừng xóa từ / bin! (đó là phần dễ dàng)
  2. Có một tĩnh / bin / sh, không được liên kết động.
  3. Có một bản sao lưu sh như /bin/sh.static.

Làm cả ba.


Đây cũng là một giải pháp "giúp tôi sao lưu tuyệt vời để tôi có thể sửa lỗi này" (với ưu điểm là không yêu cầu bạn phải có LiveCD để khởi động).
voretaq7

6

OK, đầu tiên bài giảng:

  1. Không gây rối với hệ thống nhị phân
    Bất cứ điều gì trong/bin,/sbin/rescuetrên FreeBSD nên được bỏ lại một mình. Ngay cả khi bạn biết những gì bạn đang làm (nếu bạn biết những gì bạn đang làm, bạn cũng biết những điều này nên được để lại một mình. Chúng thực sự quan trọng - tất cả chúng!)

  2. KHÔNG xóa/bin/sh. KHÔNG BAO GIỜ. Trên bất kỳ hệ thống * NIX nào có nó.
    Có thật không. Đừng làm điều đó. Một LOT của kịch bản dựa vào/bin/shlà một Bourne Shell. Nó phá vỡ vũ trụ.
    Nếu bạn thực sự muốn, bạn có thể có thể là một cách an toàn thay thế nó bằng một bản sao củabashnhư Adam Z gợi ý, nhưng nếu bạn đang đi để làm điều đó bạn có thể muốn tĩnh liên kết đó sao chép củabash- Nó kéo trong rất nhiều thư viện, và bạn có thể không có những cái đó cho đến khi hệ thống hoạt động và/usr/localđược gắn kết.


Bây giờ, làm thế nào để sửa chữa mớ hỗn độn? Hai lựa chọn:

Tùy chọn 1: Hơi khó
chịu khi truy cập vào http://www.freesbie.org/ (hoặc FreeBSD LiveCD theo lựa chọn của bạn - Bạn thậm chí có thể sử dụng CD khôi phục từ http://www.freebsd.org cho việc này). Lấy LiveCD, ghi nó và khởi động nó.

Khi bạn ở trong môi trường LiveCD, hãy gắn phân vùng gốc của hệ thống bị hỏng, sao chép /bin/shtừ LiveCD vào máy của bạn, sau đó khởi động lại.

Điều này sẽ giúp bạn sao lưu và chạy - Bạn có thể muốn làm theo các hướng dẫn để xây dựng lại "Thế giới" hoặc ít nhất là biên dịch lại /bin/shtừ một cây nguồn phù hợp với hệ thống đang chạy của bạn.

Tùy chọn 2: Ít đau đớn hơn, không có LiveCD
Nếu bạn có một hộp FreeBSD khác xung quanh bạn có thể tắt (hoặc một số cách khác để lấy ngón tay của bạn trên một bản sao/bin/sh, đưa máy FreeBSD của bạn lên trong chế độ người dùng duy nhất. Định cấu hình mạng (hoặc gắn kết bất cứ phương tiện nào cũng có vỏ thay thế trên đó) và sao chép nó vào vị trí mà nó được cho là.

Khởi động lại và bạn sẽ ổn - hãy cẩn thận như LiveCD mặc dù nếu /bin/shbạn lấy thì nó không phải từ một máy hợp lý gần giống hệt nhau.


1
Sử dụng / bin / bash từ một bản phân phối FreeBSD khác sẽ chỉ hoạt động nếu các thư viện dùng chung là phiên bản phù hợp. Tốt hơn là sử dụng thứ gì đó trực tiếp từ FreeBSD 8.2 thay vì bản dựng thay thế. Tuy nhiên, bất kỳ hệ thống FreeBSD 8.x nào cũng có thể cung cấp lớp vỏ được xây dựng tĩnh sẽ hoạt động.
Mei

@david Điểm tốt - /binkhông liên kết tĩnh nữa. Tôi nghĩ rằng đĩa CD Cứu hộ để phát hành FreeBSD phù hợp có vỏ có thể sử dụng được (tức là có thể bỏ tại chỗ), nhưng đã được một lúc kể từ khi tôi khởi động một ...
voretaq7

4

Thay vì liên kết tượng trưng, ​​sao chép của bạn bashvào /bin/sh. Sử dụng lddlệnh để tìm bất kỳ thư viện nào có thể nằm trên các hệ thống tệp khác ngoài rootfs và sao chép chúng vào rootfs.


1
Đây là một giải pháp tốt, nhưng nó làm cho một chút lộn xộn của thư viện sẽ yêu cầu làm sạch sau này.
voretaq7

Vâng, dọn dẹp là cần thiết sau đó. Một cách khác là sử dụng nhị phân shell được xây dựng tĩnh.
Adam Zalcman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.