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?
sudo vipw
làm việc
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?
sudo vipw
làm việc
Câu trả lời:
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 chsh
lệ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/passwd
thườ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.
vipw
và vigr
, cảm ơn bạn! Tôi luôn luôn sử dụngsudo vim /etc/passwd
visudo
sudo.ws/man/1.8.15/visudo.man.html , @tac
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.
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 .
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ư su
và sudo
cho 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/foo
và 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.
/etc/passwd
khô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/bash
có thể làm thủ thuật trong trường hợp đó?
Thêm vào init=/bin/bash
dò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
.
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/passwd
xác minh.