Vỏ rễ thay đổi nhầm. Làm thế nào tôi có thể thay đổi nó trở lại một vỏ hợp lệ?


19

Tôi nhập nhầm

chsh -s /usr/bin 

thay vì

chsh -s /bin/bash 

và bây giờ tôi không thể đăng nhập vào shell root, làm cách nào để bắt đầu shell bash với quyền root?


trong bối cảnh nào bạn đã làm điều này. Trong một thiết bị đầu cuối hiện tại, cho người dùng mặc định shell?
jgr208 28/03/2016

bạn không có người dùng trong nhóm sudo?
Rui F Ribeiro

3
không sudo vipwlàm việc
Rui F Ribeiro

1
@RuiFRibeiro vâng, cảm ơn, tôi không biết tôi có thể thay đổi shell gốc mặc định trong tệp đó
ChiseledAbs

1
Không cần thiết trong trường hợp này, nhưng khi bạn vô tình tạo ra một thảm họa liên quan đến root, bạn thường có thể đưa máy về chế độ một người dùng, khắc phục sự cố và sau đó quay lại chế độ nhiều người dùng.
boardrider 30/03/2016

Câu trả lời:


29

Mặc dù root không có quyền truy cập, người dùng trong nhóm sudo vẫn có thể chạy các lệnh đặc quyền - có vẻ như lỗi không phải ở sudo, mà là ở nơi khác trong sudo chshlệnh (ví dụ: lỗi chsh).

Như vậy sudo của bạn rõ ràng là làm việc.

Tệp passwd có thể được chỉnh sửa bằng:

sudo vipw

Và vỏ gốc thay đổi bằng tay.

(dòng đầu tiên /etc/passwdthường)

root:x:0:0:root:/root:/bin/bash

Fom man vipw

Các lệnh vipw và vigr chỉnh sửa các tệp / etc / passwd và / etc / group, tương ứng. Với cờ -s, họ sẽ chỉnh sửa các phiên bản bóng của các tệp đó, / etc / bóng và / etc / gshadow, tương ứng. Các chương trình sẽ thiết lập các khóa thích hợp để ngăn ngừa tham nhũng tập tin.


3
Tôi không bao giờ biết về vipwvigr, cảm ơn bạn! Tôi luôn luôn sử dụngsudo vim /etc/passwd
mèo

3
Bạn có thể quan tâm đến visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro

3
Hoặc sudo -e, thực hiện tính năng chỉnh sửa khóa này cho bất kỳ chỉnh sửa nào.
kojiro

16

Một tùy chọn khác, giả sử bạn có quyền truy cập vào tài khoản khác, là ghi đè thủ công trình vỏ mặc định bằng cách sử dụng su --shell=/bin/bash:

-s, --shell = SHELL
chạy SHELL nếu / etc / shell cho phép nó

Ưu điểm chính của điều này là nó chỉ yêu cầu quyền truy cập vào tài khoản khác, không phải tài khoản đặc quyền khác .


8

Vì lý do bảo mật, đăng nhập cho dù văn bản hoặc đồ họa và các tiện ích như susudocho phép bạn chạy các lệnh như một người dùng khác đều chạy các lệnh đó thông qua trình bao của người dùng đích. Nếu trình bao của người dùng mục tiêu không hoạt động, tốt, bạn đã thấy kết quả :-(

Trừ khi bạn tình cờ có một vỏ gốc chức năng vẫn chạy ở đâu đó hoặc thứ gì đó như nhị phân gốc setuid hoặc thứ gì đó cho phép bạn bỏ qua điều này, khởi động lại và sửa lỗi bằng hệ thống cứu hộ hoặc hình ảnh trực tiếp có lẽ là lựa chọn tốt nhất của bạn.

Khởi động hệ thống cứu hộ, gắn hệ thống tập tin gốc của hệ thống thực của bạn ở đâu đó, giả sử /mnt/foovà chỉnh sửa /mnt/foo/etc/passwdđể sửa lỗi trình bao. Lưu, ngắt kết nối, và bạn đã hoàn tất.


tò mò, điều gì xảy ra nếu bạn làm điều này và tệp / etc / passwd ở dạng băm thay vì văn bản thuần túy?
jgr208 28/03/2016

1
/etc/passwdkhông phải là văn bản gốc? Tôi đã không thấy rằng trong ít nhất, như, một thập kỷ. Đó vẫn là một điều trên một số hệ thống? Dù sao, tôi đoán chroot /mnt/foo chsh -s /bin/bashcó thể làm thủ thuật trong trường hợp đó?
Celada

Tôi chưa bao giờ gặp sự cố được mô tả, tuy nhiên tôi làm việc với các hệ thống bị khóa cần phải có / etc / passwd không ở dạng văn bản đơn giản để tránh tin tặc và việc đó làm tổn hại hệ thống nhiều hơn nếu chúng có quyền truy cập. Hmm có thể hoạt động, hãy nói tôi hy vọng tôi không bao giờ phải thử và xem nó có thực sự hoạt động không.
jgr208 28/03/2016

Tôi đã có thể chỉnh sửa / etc / passwd bằng sudo từ tài khoản người dùng, tôi không biết rằng trình bao được xác định trong tệp này, cảm ơn
ChiseledAbs

@ChiseledAbs oh, bạn đã? Tốt cho bạn, vui mừng bạn giải quyết vấn đề của bạn. Tôi không nghĩ rằng nó sẽ cho phép bạn.
Celada

6

Thêm vào init=/bin/bashdòng lệnh kernel của bạn (nếu khởi động bằng grub, nhấn eđể chỉnh sửa mục khởi động) và bạn sẽ có một bash shell chạy dưới dạng root mà không cần phải cung cấp mật khẩu. Hệ thống tập tin gốc của bạn có khả năng vẫn sẽ được gắn kết chỉ đọc, vì vậy bạn sẽ cần phải truy cập lại trước, sau đó bạn có thể thay đổi trình bao trở lại với chsh.


4

sudo usermod -s /bin/bash jdoe

sẽ thay đổi vỏ của jdoe thành bash. Sau đó bạn có thể sudo egrep jdoe /etc/passwdxác minh.

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.