tìm nguồn cung cấp hồ sơ bash cho người dùng root


17

Xin lỗi trước nếu câu hỏi này sẽ gây khó chịu cho mọi người vì tôi đánh giá cao, nó đã được hỏi theo nhiều cách khác nhau nhiều lần trước đây. Hãy yên tâm, tôi đã đọc tài liệu lưu trữ và đã thử ít nhất một số đề xuất nhưng vẫn không thể giải quyết vấn đề (đơn giản). Hy vọng ai đó có thể cung cấp một câu trả lời và tôi có thể cảm thấy khiêm tốn thích hợp. FYI, để tránh mọi sự mơ hồ, tôi sẽ sử dụng các đường dẫn tuyệt đối thay vì tương đối.

Khi tôi đăng nhập, tôi làm như vậy với tư cách là người dùng adam. Các bí danh /Users/adam/.bash_profileđược tải và tôi có thể sử dụng chúng ngay lập tức khi kéo lên một thiết bị đầu cuối. Tôi không sử dụng một .bashrctập tin và điều đó tốt.

Thỉnh thoảng, tôi chuyển sang root bằng cách gõ suvào terminal và sau đó nhập mật khẩu của mình. Dấu nhắc thay đổi và tôi hiện là người dùng root. Câu hỏi của tôi là: ngay lập tức khi trở thành root, hồ sơ bash gốc của tôi có thể được tải mà không cần tôi phải tự tìm nguồn tệp hồ sơ không? Lý do tôi biết điều đó không tự động xảy ra là vì tôi có cùng bí danh trong tệp hồ sơ gốc và của tôi /Users/adam/.bash_profile. Sau khi trở thành người dùng root, trừ khi tôi nhập source [root_profile_file], họ không hoạt động. Tôi đã thử thiết lập các hoán vị sau và sau đó chuyển sang root thông qua thiết bị đầu cuối nhưng không ai trong số họ tự động lấy hồ sơ / bí danh (lưu ý, tôi không có bất kỳ tùy chọn nào bên dưới được thiết lập đồng thời vì vậy tôi không nghĩ rằng mình m gây nhầm lẫn hệ thống):

Cách 1: đặt bí danh của tôi vào/etc/profile

Lựa chọn 2:

  • vào /etc/profile, chèn[ -r /etc/bashrc ] && . /etc/bashrc
  • đặt bí danh của tôi vào /etc/bashrc

Tùy chọn 3:

  • vào /etc/bash_profile, chèn[ -r /etc/bashrc ] && . /etc/bashrc
  • đặt bí danh của tôi vào /etc/bashrc

Tùy chọn 4: đặt bí danh của tôi vào/var/root/.profile

Tùy chọn 5:

  • vào /var/root/.profile, chèn[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • đặt bí danh của tôi vào /var/root/.bashrc

Tùy chọn 6:

  • vào /var/root/.bash_profile, chèn[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • đặt bí danh của tôi vào /var/root/.bashrc

Xin lưu ý, với bất kỳ điều nào ở trên, nếu tôi chuyển sang root và sau đó nhập source root_profile_filecác bí danh được tải nhưng chỉ khi tôi thực sự lấy nguồn tệp theo cách thủ công. Có lẽ tôi đã hoàn toàn hiểu sai về cách bash hoạt động và không thể tự động tìm nguồn tệp hồ sơ sau khi chuyển sang root nhưng tôi hy vọng có một giải pháp đơn giản. Cảm ơn trước bất cứ ai đã dành thời gian để đọc tin nhắn này.

Câu trả lời:


14

Vấn đề bạn gặp phải là khi bạn tự chạy su, bạn không nhập vào trình bao 'đăng nhập'. Điều này có nghĩa là môi trường, thư mục làm việc của bạn và mọi thứ trừ uid / gid vẫn giống với người dùng ban đầu.

Kích hoạt đăng nhập không thực thi và bạn gặp phải các vấn đề bạn mô tả.

Một giải pháp đơn giản cho một vấn đề đơn giản:

su -

Từ su(1)trang người đàn ông:

Lệnh su được sử dụng để trở thành người dùng khác trong phiên đăng nhập. Được gọi mà không có tên người dùng, su mặc định trở thành siêu người dùng. Đối số tùy chọn - có thể được sử dụng để cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp.

Cũng thế:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Nếu bạn suvào một vỏ đăng nhập, bash sẽ hoạt động như bạn mong đợi và tự động lấy các tệp thích hợp trên "đăng nhập", mà không cần phải giải quyết quá nhiều hack.


1
Tuy nhiên tôi sẽ ghi chú thứ hai của Hải Vũ: Bạn thực sự, thực sự, thực sự không bao giờ nên sulàm việc root. Có sudomục đích đó hoặc bạn có thể làm việc theo cách mà bạn không yêu cầu quyền root.
Jason Salaz

Cảm ơn cả bạn và @ Vũ Vũ. "su -" thực hiện thủ thuật và vâng, hoàn toàn hiểu được, thường nên tránh root.
Adam Gold

1
Tôi đã biết thêm '-' sau lệnh su, nhưng vẫn không nhận được .bash_profile cho người dùng root có nguồn gốc. Câu trả lời của Florian Bidabe và patrix dưới đây về việc thay đổi vỏ gốc từ sh sang bash đã khắc phục vấn đề cho tôi.
JaredC

9

Trên thực tế sử dụng root /bin/sh(vỏ bourne cũ), .bash_profile.bashrcđược đọc bằng bash.

Nó trở nên khó khăn vì những tập tin đó có thể sử dụng chức năng không có sẵn trong sh. Ngay cả khi bạn source .bashrchoặc source .bash_profile, bạn vẫn sẽ có một số vấn đề với các chức năng phức tạp chẳng hạn.

Một cách để giải quyết điều này là chạy

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

để chuyển rootvỏ của nó sang bash.


Root /bin/shsử dụng /var/root/.profiletập tin. Tín dụng cho câu trả lời
Petr Újezdský

6

Khi tôi hoàn toàn phải, tôi sudo bashlàm cho tôi root nhưng với môi trường của JRobert. .Bashrc của tôi chứa:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, để làm cho cái nhìn nhanh chóng trở lại với tôi trong RED để nhấn mạnh rằng bây giờ tôi (dễ bị tổn thương hơn) với chính mình - đừng thả mái chèo].


3

Tôi đang sử dụng sudo -iđể chuyển sang người dùng root. Trong trường hợp này, cấu hình shell được đọc từ /var/root/.profile.


1

Nói chung, tôi khuyên bạn suvì nó nguy hiểm, chỉ cần tìm kiếm nó và bạn biết tại sao. Đối với câu hỏi của bạn, tài khoản root hoạt động giống như cách tài khoản của bạn thực hiện: đó là nguồn ~ / .bash_profile và / hoặc ~ / .bashrc. Tôi không biết cái nào, nhưng trực giác của tôi dựa vào ~ / .bashrc , vì vậy bạn có thể muốn thử đặt bí danh của mình ở đó. Đây là một gợi ý:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works

0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Chỉ điều này không hoạt động! Tôi đã cố gắng đặt tôi export PS1=...vào bất kỳ tập tin nào ở trên. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Từ tất cả các tập tin /bin/shshell, không đọc thông tin! (chỉ bash) (Mac OS El Capitan). Và tôi đã phải đổi vỏ để bash.

Cũng "su -"hoạt động quá. (với shell này là đọc /var/root/.profiletập tin)


1
Không cần phải xác nhận lại các câu trả lời hiện có ...
nohillside

-1

Một cách để giải quyết vấn đề này là chạy cách sau để chuyển shell của root sang bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Giải pháp này đã khắc phục vấn đề của tôi là tốt.


-2

nếu bạn chỉ có một người dùng 'mặc định' và người dùng root, bạn có thể đặt alias su="su -".bash_profile của người dùng 'mặc định' và bạn sẽ có được hiệu ứng bạn muốn. Hoạt động và không có những thứ hacky.

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.