Có phải là thực tế xấu khi đặt shell của root thành một cái gì đó khác với mặc định?


16

Khi một người bạn của tôi (là một người dùng Unix / Linux có kinh nghiệm) nói với tôi rằng việc đặt shell của root thành thứ gì đó không phải là sh (tức là bash hoặc zsh) có thể tạo ra vấn đề, bởi vì một số script có thể cho rằng shell là sh và làm điều gì đó kỳ lạ .

Tuy nhiên, tôi nghĩ Ubuntu có shell root mặc định được đặt thành bash và Gentoo cũng sử dụng bash. Ai đó có thể phá vỡ huyền thoại?

Câu trả lời:


12

Đúng. Nếu hệ thống bị lỗi trong quá trình khởi động, bạn có thể đăng nhập vào shell root. Nếu bạn có riêng / usr, một số shell có thể không khởi động thành công.

Tôi khuyên bạn nên tạo tài khoản toor(uid 0, gid 0) với shell không chuẩn trong khi root bên trái với shell mặc định.


Điều này xảy ra với tôi khi tôi nâng cấp từ FBSD 7.2 lên 8.0 và tôi quên xây dựng lại bash. Tôi đã khởi động ở chế độ người dùng duy nhất để khắc phục, nhưng nó chỉ hoạt động vì /bin/shvẫn được liên kết với FBSDngã ba bournevà không bash.
gvkv

chỉ để làm cho mọi thứ rõ ràng hơn, nếu tôi cài đặt nói zshvà bằng cách nào đó /usrbị hỏng tôi sẽ có vấn đề? nhưng hệ thống của tôi đã /bin/shchỉ vào /bin/bashbashchính nó, tại sao sẽ không shbị ảnh hưởng?
phunehehe

1
Mặc định cho root "đảm bảo" rằng hệ thống sẽ khởi động - hướng dẫn nâng cấp sẽ quan tâm đến việc có thể đăng nhập vào root ít nhất. Tuy nhiên nó có thể không phải là trường hợp cho bất cứ điều gì khác. Giải pháp là sao chép tài khoản root bằng toor với shell không mặc định để sử dụng hàng ngày và giữ nguyên root.
Maciej Piechotka

1
zshkhông nên ở /usr/bin/nếu nó được cài đặt sai. tất cả các vỏ phải ở trong/bin
xenoterracide

1
@xenoterracide: zsh trên Gentoo /binnhưng vẫn giữ một số tệp /usr/share. Ngoài ra tôi đã nói rõ rằng vấn đề là trong quá trình đăng nhập trong khi khởi động (khi một số dịch vụ không thành công).
Maciej Piechotka

7

Không nên là một vấn đề.

Các tệp shell-script mã hóa rõ ràng shell nào chúng được thực thi. Nó được mã hóa trong dòng đầu tiên hoặc các chương trình hoặc tập lệnh khác thực thi một trình bao cụ thể và đưa ra tập lệnh shell làm đối số.

Chương trình duy nhất tôi có thể nghĩ là sử dụng thông tin shell tài khoản người dùng (bên cạnh quá trình đăng nhập) là procmail. Thực sự buồn cười nếu người dùng của bạn đã đặt shell / bin / false trên mailserver ... Nhưng bạn thường không thực thi procmail với quyền root.

Một ứng cử viên khác sẽ là các dòng trong crontab của root. Tôi không biết chính sách của crond là sử dụng shell nào.


$ SHELL thường được đặt thành / bin / sh bởi crondaemon khi khởi động.
echox

3

Các tập lệnh được viết cho shell bourne sẽ hầu hết chạy với BASH hoặc ZSH hoặc $ foo mà không gặp vấn đề gì.

Trên nhiều hệ thống Linux không được cài đặt sh gốc, thay vào đó, nó thường là một liên kết tượng trưng với / bin / bash.

Nếu một số tập lệnh chỉ "giả sử" rằng shell rõ ràng là sh, chúng sẽ được viết lại. Có cơ chế shebang để chọn trình thông dịch mà kịch bản của bạn cần. Nếu là sh, tập lệnh sẽ bao gồm #!/bin/shdòng đầu tiên.

Cài đặt shell mặc định của bạn sẽ không liên quan trong ngữ cảnh này.


2

Tôi không nghĩ việc thay đổi vỏ của root sẽ gây ra bất kỳ rắc rối nào. Tôi dường như nhớ một số thông báo (có thể là một số biến thể BSD?) Có tcsh làm vỏ mặc định cho root.

Root đăng nhập là hiếm anyway. Thông thường, bạn sẽ đăng nhập vào tài khoản của chính mình và sau đó su hoặc sudo để root.

Vấn đề là shell của root nên có càng ít phụ thuộc càng tốt để có thể sử dụng được trong bối cảnh sửa chữa hệ thống. Ví dụ, đó là một ý tưởng tốt để có một vỏ gốc được liên kết tĩnh; một số bản phân phối gửi một phiên bản bash hoặc zsh hoặc sash được liên kết tĩnh (một vỏ có nhiều tiện ích tiêu chuẩn tích hợp). Tuy nhiên, điều này không quá quan trọng nếu hệ thống của bạn có thể dễ dàng khởi động từ ổ đĩa CD hoặc USB cứu hộ.


Vì lý do phụ thuộc, tôi nghĩ sẽ hợp lý khi rời khỏi vỏ vì vậy một sửa đổi hệ thống lớn (như nâng cấp) sẽ không làm mọi thứ rối tung lên. Tôi đồng ý dễ dàng sửa chữa bằng đĩa CD hoặc USB trực tiếp, nhưng tôi không nên sửa nó ngay từ đầu.
phunehehe

1

Shell đăng nhập của người dùng không ảnh hưởng đến quá trình khởi động. Bạn có thể đặt vỏ này thành bất cứ thứ gì bạn muốn. Không phải tất cả các hệ thống đều có bash và chúng hoạt động tốt. Ngoài ra nếu nó /usr/bin/zshđược cài đặt sai, tất cả các hệ thống sẽ được đưa vào /bin. Tuy nhiên, bạn không nên thay đổi /bin/shđể trỏ đến một thứ khác ngoài mặc định (trừ khi bạn biết bạn đang làm gì) vì nhiều tập lệnh #!/bin/shthường chỉ ra bash, khi nào chúng nên có #!/bin/bashvì bashism và các hành vi khác sẽ không làm việc trên zshhoặc dash.


Rất tiếc, tôi đã mắc lỗi, thực sự là trên cả máy tính của tôi bashzshđang ở/bin
phunehehe

0

Tôi có bash làm shell mặc định cho root. Tôi đã sử dụng zsh một thời gian, nhưng sau đó quay lại bash . Bạn sử dụng vỏ gì, không quan trọng lắm.

Đây chỉ là một vấn đề, nếu có nhiều hơn một người có quyền truy cập root. Trong trường hợp đó, bạn có thể chọn một "mẫu số chung" thường là bash, vì đây là lớp vỏ được sử dụng rộng rãi nhất.


0

Liên quan đến Solaris / illumos các Solaris gốc Shell Mini-FAQ đề cập đến

Một số sysadins vẫn khuyên không nên thay đổi vỏ gốc trên
các hệ thống Solaris. Hỏi tại sao và bạn có thể được cho biết rằng root cần một
vỏ được liên kết tĩnh không phụ thuộc vào các
thư viện động dưới / usr / lib. Điều này là đúng trong quá khứ nhưng không
nhất thiết là trường hợp ngày nay. Solaris, khi được cấu hình đúng, giống như bất kỳ phiên bản Unix nào khác và có thể hỗ trợ bất kỳ shell nào bạn xác định, cho root hoặc bất kỳ tài khoản nào khác.

Vì vậy, vâng, nếu bạn đang sử dụng Solaris hoặc illumos, sử dụng đạn khác không phải là tốt sh.

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.