Tại sao người dùng có quyền root không ở ~ nữa?


20

Vì tò mò, tôi muốn biết tại sao, khi tôi đăng nhập với quyền root, tôi không ở / home / user nữa. Lý do là gì và thư mục gốc / làm gì chính xác?

Tôi không phải là người dùng nâng cao. Vui lòng trả lời bằng những từ đơn giản hoặc đưa ra một liên kết cung cấp những giải thích rõ ràng, đơn giản. Tôi sử dụng Ubuntu 16.04 và tôi đăng nhập bằng root sudo -i. Như đã giải thích ở đây , sudo -i/ root như nhà. Tôi muốn biết lý do là gì; Có bất kỳ lợi thế để được ở đó? Và không trong ~ như người dùng của sudo -s.


11
root cũng là một người dùng, vì vậy anh ta có homethư mục cá nhân của mình , nhưng cái này được đặt tênroot
damadam

3
Bạn có thể sử dụng sudo -sđể ở trong cùng thư mục người dùng.
Pilot6

3
@ Pilot6 xin lỗi tôi đã thêm vào đó cùng lúc với nhận xét của bạn: D Hy vọng bạn không phiền :)
Rinzwind

2
@Unbesiegbarkeit man sudosẽ trả lời câu hỏi. Để đơn giản user -ilà sử dụng cài đặt người dùng root, nhưng sudo -scài đặt người dùng hiện tại.
Pilot6

Câu trả lời:


28

Bạn không đăng nhập bằng root bằng cách chạy sudolệnh. Bạn đang bắt đầu một shell với quyền root.

Nếu bạn muốn ở trong thư mục nhà người dùng hiện tại, bạn có thể sử dụng sudo -sthay vì sudo -ilệnh.

cd ~sẽ đưa bạn đến cùng thư mục như thể bạn không ở trong trình bao với quyền root. Theo nghĩa đen /home/$USER.

Khi bạn sử dụng sudo -i, hệ thống hoạt động như thể bạn đã đăng nhập với tư cách rootngười dùng. Bởi vì điều này

cd ~ 

đưa bạn đến thư mục gốc của người dùng /root.

/rootthư mục là một thư mục nhà cho rootngười dùng.

Sự khác biệt chính là các tệp cài đặt shell như .bashrcđược sử dụng /roottrong trường hợp sudo -ivà từ người dùng bình thường trong trường hợp sudo -s.


3
Những lợi thế có / root như nhà?
Codito ergo sum

2
Các tập tin như .bashrcđược sử dụng từ đó trong một vỏ cụ thể. Trong hầu hết các trường hợp không có nhiều sự khác biệt.
Pilot6

11
@Unbesiegbarkeit / home có thể không được gắn kết trong một số trường hợp nhất định, ví dụ: chế độ người dùng đơn lẻ, không có quyền truy cập mạng, v.v. và root vẫn cần có thể đăng nhập trong những trường hợp đó.
doneal24

2
@ DougO'Neal Nếu /homekhông có sẵn, vấn đề không tồn tại. Sau đó, bạn thực sự đăng nhập với quyền root.
Pilot6

4
@ Pilot6: Có sự khác biệt, hoặc nên có. Ví dụ, trên các máy của tôi, tôi thiết lập tệp. * Shrc của root để làm cho nó rõ ràng rằng tôi đang chạy dưới quyền root - ví dụ như nhắc nhở ở định dạng khác và được tô màu đỏ. Ngoài ra các bí danh được thiết lập để không thực hiện một số điều có thể gây hại nếu được thực hiện dưới quyền root, & c.
jamesqf

29

Lý do tại sao nhà của rootngười dùng /rootvà không phải /home/rootlà vì thường /homelà điểm gắn kết với một phân vùng / ổ đĩa / đĩa riêng biệt ... (vì nhiều lý do, chẳng hạn như không gian đĩa hoặc từ xa, ...)

Nếu vì lý do nào đó, việc gắn kết /homekhông thành công, bạn vẫn có thể kết nối như roottrong thư mục chính của /rootmình để điều tra và sửa chữa mọi thứ

Ngoài ra, để bảo trì, thiết lập ban đầu, thay đổi kích thước, ... bạn sẽ được kết nối rootvà có thể ngắt kết nối / kết nối lại/home


7
+1, Đây phải là câu trả lời được chấp nhận. Bạn có thể thay đổi nhà của root thành bất cứ nơi nào, nhưng chúng tôi để lại / root để bật / và không ở / home vì lý do phục hồi.
ntg

16

Lý do là gì và thư mục gốc / làm gì chính xác?

root có / root là nhà của nó và khi bạn chuyển sang root nó sẽ đưa bạn đến nhà của nó. Đó là bản chất của sudo -i. sudo -skhông giống nhau nhưng không chuyển đổi thư mục. Hướng dẫn sử dụng cho sudo :

-s [command]

Tùy chọn -s (shell) chạy shell được chỉ định bởi biến môi trường SHELL nếu nó được đặt hoặc shell như được chỉ định trong cơ sở dữ liệu mật khẩu. Nếu một lệnh được chỉ định, nó được chuyển đến shell để thực thi thông qua tùy chọn -c của shell. Nếu không có lệnh nào được chỉ định, shell tương tác được thực thi.

-i [command]

Tùy chọn -i (mô phỏng đăng nhập ban đầu) chạy shell được chỉ định bởi mục nhập cơ sở dữ liệu mật khẩu của người dùng đích dưới dạng shell đăng nhập . Điều này có nghĩa là các tệp tài nguyên dành riêng cho đăng nhập như .profile hoặc .login sẽ được đọc bởi trình bao. Nếu một lệnh được chỉ định, nó được chuyển đến shell để thực thi thông qua tùy chọn -c của shell. Nếu không có lệnh nào được chỉ định, shell tương tác được thực thi. sudo cố gắng thay đổi thư mục chính của người dùng đó trước khi chạy shell. Chính sách bảo mật sẽ khởi tạo môi trường thành một tập hợp các biến tối thiểu, tương tự như hiện diện khi người dùng đăng nhập. Phần Môi trường lệnh trong tài liệu thủ công sudoers (5) làm thế nào tùy chọn -i ảnh hưởng đến môi trường trong đó lệnh chạy khi chính sách sudoers được sử dụng.

Người dùng root cần phải là một phần của hệ thống. Khi bạn đặt / home trên một phân vùng khác và root là một phần của / home, bạn sẽ gặp rắc rối nghiêm trọng nếu phân vùng không được gắn kết. Vì lý do tương tự, chúng tôi cũng có

/bin
/sbin 

/usr/bin
/usr/sbin

Khi bạn đặt / usr trên một phân vùng và / usr không gắn kết, bạn vẫn có một hệ thống làm việc.


2
Làm thế nào để trả lời câu hỏi này? Có phải là một bình luận?
Pilot6

2
Sudo -i không phải là một phần của câu hỏi khi tôi trả lời ;-)
Rinzwind

2
Chúng ta có hỏi đáp về sudo -ivs sudo -skhông?
Pilot6

2
Hmm chúng ta có thể. Tôi sẽ có một tìm kiếm. chỉnh sửa Tôi không tìm thấy nhưng tôi nhớ đã nhìn thấy một nhưng đó là trên các diễn đàn
ubfox

2
Có vẻ như tôi đã thấy một cái ở đây, nhưng cũng không thể tìm thấy.
Pilot6

15

Hệ thống tập tin Linux được cấu trúc theo một cách cụ thể. Các tệp nhị phân cần thiết nằm trong /bin/, các tệp bộ tải khởi động đang ở /boot/, hầu hết các tệp thiết bị đều ở trong /dev/, các điểm gắn kết cho phương tiện lưu động đang ở /media/, v.v ...

Xem https://en.wikipedia.org/wiki/Filesystem_HVELy_St Chuẩn .

Một số chi tiết nhỏ có thể khác nhau từ distro đến distro (ví dụ /usr/bin/so với /usr/local/bin/), nhưng nói chung hầu như tất cả các distro Linux đều theo cùng một cấu trúc thư mục.

Để trả lời câu hỏi của bạn:

Thư mục nhà của người dùng đang ở /home/. Về nguyên tắc, Linux là một hệ điều hành đa người dùng. Bạn có thể chỉ có một tài khoản người dùng trên máy tính xách tay có thư mục chính của nó /home/<username>/, nhưng nếu bạn xem /home/trên một máy chủ Linux được chia sẻ, bạn sẽ thấy nhiều thư mục chính: một thư mục cho mỗi tài khoản người dùng. Ý tưởng là mọi người dùng hệ thống chỉ có quyền ghi trong thư mục chính của họ. Nếu tên người dùng của bạn là bobbạn có thể đọc và ghi và xóa các tệp trong /home/bob/nhưng bạn không thể chạm vào bất cứ thứ gì trong /home/alice/hoặc trong /var/log/.

rootlà khác nhau mặc dù. rootlà người dùng quản trị và có các đặc quyền ghi ở mọi nơi trên hệ thống (và có thể hoạt động như bất kỳ người dùng nào của hệ thống). Vì vậy, nó có ý nghĩa rootcó thư mục nhà đặc biệt /root/bởi vì rootkhông phải là người dùng thông thường. Ngoài ra, đó /root/chỉ là một thư mục thông thường không có phép thuật đặc biệt, mặc dù có thể yên tĩnh (thậm chí có khả năng) rằng các tiện ích hệ thống phụ thuộc vào /root/việc trở thành ngôi nhà của người dùng root.

Khi bạn thực thi sudo -itrong một thiết bị đầu cuối, bạn chuyển từ ví dụ như người dùng thông thường bobsang root. Lưu ý rằng công tắc này chỉ ảnh hưởng đến cửa sổ đầu cuối nơi bạn nhập sudo -i. Đối với trình quản lý tệp của bạn, bạn vẫn ở đó bobvà nếu bạn mở một cửa sổ đầu cuối khác, bạn vẫn bobở đó. Trong bối cảnh này, biểu tượng ~là một tốc ký cho thư mục chính của người dùng hiện tại. Cho bob ~phương tiện /home/bob/nhưng cho root ~phương tiện /root/.

Tôi hy vọng rằng làm rõ mọi thứ cho bạn.


3
Đây là một câu trả lời hoàn hảo!
Pilot6

5
Có lẽ đáng chú ý rằng thư mục gốc của Root ban đầu /. Vị trí tiêu chuẩn đã được thay đổi vì lý do bảo mật (mọi người phải có thể liệt kê các tệp trong đó /, vì vậy bất kỳ ai cũng có thể thấy những gì người dùng root đã có.
Austin Hemmelgarn

14

Tôi thấy mọi người đang trả lời những gì xảy ra khi bạn đăng nhập bằng root (bạn nhận được một thư mục ~ không có trong / home) nhưng không ai nói lý do tại sao. Đây là lý do tại sao:

Nếu toàn bộ cấu trúc / ngôi nhà trở nên không sử dụng được và bạn phải sửa nó, hoặc nếu bạn cần phân bổ lại / nhà vì nó hết dung lượng, bạn phải làm như vậy bằng cách nào đó. Bạn không thể đăng nhập như bất kỳ người dùng nào có ~ in / home, vì bạn gặp sự cố ngay khi bạn cố gắng làm bất cứ điều gì. Vì vậy, người dùng root có hir ~ nơi khác.


3
Hãy dùng thử và tùy thuộc vào cài đặt phân phối và bảo mật như một người dùng bình thường mà bạn sẽ không đăng nhập hoặc kết thúc bằng / như cwd và $ HOME chỉ không thể truy cập. Vấn đề là root rất có thể muốn có quyền truy cập vào thư mục chính của nó khi những người khác không có, ví dụ như vì các tệp nhu cầu đặc biệt ở đó. Tương tự trên hầu hết các fss, bạn có không gian dành cho root và tài khoản hệ thống có các thư mục nhà bên ngoài / nhà
PlasmaHH

2
Các câu trả lời từ alexf và arp, được đăng sau đó, về cơ bản là nói điều tương tự. Không ai đọc các bài viết hiện có trước khi thêm câu trả lời của riêng mình?
Jennifer

@Dan - Tôi đã khôi phục các thay đổi của bạn. Để dí dỏm:
Jennifer

(1) Tôi cho rằng đó là một cải tiến để đặt / nhà và ~ trong hộp đánh dấu, nhưng không phải tất cả đều quan trọng để làm như vậy, bởi vì mọi người đều biết ý tôi là gì. Bạn biết ý tôi là gì (2) "bạn sẽ gặp sự cố ngay khi bạn cố gắng" không nhất quán trong căng thẳng. "Bạn" là "bạn sẽ" và "sẽ" là thì quá khứ, vì vậy nó phải đi với "đã thử", thì quá khứ thay vì "thử" thì hiện tại. (3) "hir" là một đại từ mới được phát minh bởi Kate Bornstein; nó bao gồm "anh ấy" và "cô ấy" và rất hữu ích khi bạn không biết giới tính. ("Ze" bao gồm "anh ấy" và "cô ấy".)
Jennifer

@Jennifer Đừng lo lắng. Bạn học được điều gì mới mỗi ngày. Tôi nghĩ hirlà một lỗi đánh máy. Cảm ơn tất cả các thông tin! Tôi khuyên bạn nên giữ định dạng mã khó khăn, nhưng điều đó tùy thuộc vào bạn.
Dan

8

Bạn nói rằng bạn không phải là người dùng nâng cao, vì vậy tôi sẽ cố gắng viết câu trả lời từng bước.

Khi bạn sử dụng Linux, bạn phải nhớ một số điều quan trọng:

  • Linux là một hệ thống nhiều người dùng. Nó đã được hình thành như thế ngay từ đầu, theo triết lý Unix (chú ý cách tiếp cận khác nhau được thực hiện bởi Windows, được hình thành như một hệ thống người dùng)

  • Là một hệ thống nhiều người dùng, Linux có khả năng tách các tệp thuộc về từng người dùng trong hệ thống. Cách Linux thực hiện điều này là bằng cách chỉ định cho mỗi người dùng một thư mục con bên trong thư mục /home/. Mỗi tệp người dùng được sở hữu bởi anh ấy / cô ấy và chỉ (anh) anh ấy có thể mở chúng, sửa đổi chúng hoặc cho phép người dùng khác sử dụng chúng. Ngược lại, mỗi tệp trong hệ thống tệp thuộc về một người dùng và người dùng đó có quyền lực đối với những người có thể xem hoặc sử dụng tệp đó. Như đã đề cập trong một câu trả lời khác, người dùng ban đầu có thể đặt các tệp của họ ở bất kỳ đâu trong hệ thống, nhưng đến một lúc nào đó, điều hiển nhiên là mọi thứ nên được tổ chức tốt hơn và /home/("slash-home") trở thành nơi chứa các tệp của người dùng.

  • Tuy nhiên, có các tệp mà chính hệ thống và / hoặc mỗi người dùng trong hệ thống cần: nhị phân, tệp thiết bị, tệp hệ thống, vân vân (hãy nhớ: trong Linux và trong bất kỳ hệ thống giống như unix nào khác, mọi thứ đều là một tệp) . Các tệp cần thiết toàn cầu này được lưu trữ ở nhiều nơi khác nhau dọc theo hệ thống tệp, được tổ chức trong các thư mục khác nhau trong thư mục gốc của hệ thống tệp : /. Ngoài ra, các tệp cần thiết toàn cầu này không thuộc về một người dùng cụ thể của hệ thống, mà thuộc về chính hệ thống ... nhưng điều đó có thể gây nhầm lẫn: ai sở hữu nhị phân? Ai cho phép các tập tin cần thiết trên toàn cầu?

  • Vì mọi tệp trong hệ thống "cần chủ sở hữu", nên phải có "người dùng đặc biệt" có thể quản trị các tệp cần thiết trên toàn cầu. Hơn nữa, "người dùng đặc biệt" này có thể làm những việc mà không người dùng nào khác trong hệ thống có thể làm: anh ta có thể tạo người dùng khác cho hệ thống. Người dùng này được gọi là "siêu người dùng" (đối với chúng tôi là người chết) hoặc "root" (đối với hệ thống).

  • Bây giờ, siêu người dùng này là một người dùng khác của hệ thống, nhưng có quyền hạn (và trách nhiệm) vượt xa những người dùng khác: bảo trì chẳng hạn. Vì vậy, thật tự nhiên khi nghĩ rằng "root" cần một nơi để đặt công cụ của mình, nhưng không được nhầm lẫn với những thứ thuộc về người dùng khác. Vì vậy, thay vì có một thư mục con bên dưới /home/, "root" có không gian dành riêng của mình trong hệ thống tập tin: /root/(được gọi là "slash-root"). Hãy nhớ rằng: "root" là một người dùng rất đặc biệt, vì vậy nó cần một nơi đặc biệt, đặc quyền để đặt công cụ của mình.

  • Bây giờ, Ubuntu không có tài khoản root được bật theo mặc định, vì vậy người dùng "bình thường" phải có toàn quyền đối với toàn bộ hệ thống. Đó là nơi lệnh sudo("chuyển đổi người dùng và thực hiện") khởi động: nó cho phép người dùng bình thường (trước đây được bao gồm trong danh sách "sudoers") thực hiện các lệnh như thể anh ta là người dùng khác, ví dụ như "root".

  • Cuối cùng, -itùy chọn đó có nghĩa là "mô phỏng đăng nhập ban đầu". Điều đó có nghĩa là sudosẽ đọc dữ liệu của "hồ sơ người dùng mục tiêu" trước khi thực hiện lệnh đã cho. Nếu bạn không cung cấp lệnh, thì sudosẽ bắt đầu một thể hiện shell với hồ sơ (root) của người dùng đích ... và bắt đầu bằng việc chuyển sang thư mục "home" của "người dùng đích". Vì vậy, sudo -isẽ di chuyển bạn để làm thư mục gốc của root ( /root/).

Tôi hy vọng điều này sẽ giúp bạn hiểu những gì xảy ra với sudo -i.


CHỈNH SỬA

Tôi nghĩ rằng tôi đã để lại một số thứ không rõ ràng, vì vậy tôi sẽ thêm chúng ở đây:

  • Tôi đã nói ở trên: "trong Linux, mọi thứ đều là một tập tin". Và tôi có nghĩa là nó, theo nghĩa đen! Tài liệu và hình ảnh của bạn là các tệp, nhưng cũng là thiết bị đầu cuối (ví dụ như những thiết bị bạn có thể truy cập bằng cách nhấn [CTRL] + [ALT] + [Fn]) và các ổ đĩa vật lý và bàn phím của bạn. Một hệ thống giống như unix hoạt động bằng cách đọc hoặc ghi dữ liệu từ / đến tệp và điều hướng luồng dữ liệu đến / từ các tệp thích hợp trong hệ thống, đại diện cho tệp bạn đang làm việc và đầu vào của các phím bạn đang gõ, và đầu ra bạn đang nhìn thấy trên màn hình. Một số tệp này có thể được người dùng sử dụng trực tiếp, nhưng một số tệp khác thì không thể; ví dụ: bạn không thể đọc hoặc ghi trực tiếp vào ổ cứng, nhưng bạn phải để Linux liên kết một thư mục bình thường, có thể duyệt được, với tệp thiết bị (bên dưới /dev/) đại diện cho ổ cứng của bạn.

  • Một hệ thống tập tin Linux có thể mở rộng nhiều ổ đĩa vật lý . Một ví dụ đơn giản là khi bạn cắm ổ đĩa USB: Linux có thể gắn ổ đĩa đó (gắn kết là quá trình hệ thống kết nối một thư mục tiêu chuẩn, nơi bạn có thể thấy các tệp trong trình điều hướng vỏ hoặc tệp, vào tệp thiết bị /dev/) và bạn có thể làm việc với nó và khi bạn hoàn thành, bạn yêu cầu Linux tháo ổ đĩa và sau đó gỡ nó ra khỏi cổng USB. Điều quan trọng ở đây là chu trình "gắn kết - ngắt kết nối" này ảnh hưởng đến * cùng một hệ thống tệp "bạn sử dụng hàng ngày: bạn không tạo một hệ thống tệp mới mỗi khi bạn thêm hoặc xóa ổ đĩa vật lý, nhưng bạn thêm ổ đĩa vật lý đó vào hệ thống tệp ( một lần nữa, so sánh triết lý này với phương pháp của Wndows).

  • Vì hệ thống tệp có thể trải rộng trên nhiều ổ đĩa vật lý, điều hiển nhiên là các tệp khác nhau của hệ thống có thể được ghi vào các ổ đĩa vật lý khác nhau. Một ổ đĩa có thể lưu trữ các nhị phân hệ thống ( /bin/) và một ổ đĩa khác có thể lưu trữ các tệp của người dùng ( /home/và hậu duệ của nó). Trong thiết lập nhiều ổ đĩa, thông thường người ta đã /home/ghi vào một ổ đĩa vật lý khác so với /root/, vì vậy, nếu hệ thống bị hỏng và người dùng không thể đăng nhập vì ổ đĩa /home/ngừng hoạt động, root có thể. (Điều này rất đơn giản ... nhiều thứ cần được sao chép vào mỗi ổ đĩa vật lý để cho phép root đăng nhập nếu không người dùng nào khác có thể, nhưng điều này có thể cung cấp cho bạn một ý tưởng chung).

  • ~ký tự dấu ngã ( ) đó biểu thị thư mục chính của người dùng hiện tại . Nếu bạn đã đăng nhập là "bob", sau đó cd ~sẽ đưa bạn đến /home/bob/, nhưng nếu bạn đã đăng nhập dưới dạng "root", thì cd ~sẽ đưa bạn đến/root/

tl; dr Vì vậy, bây giờ tôi nghĩ rằng tất cả mọi thứ được nói:

  • "root" là một người dùng đặc biệt, với quyền hạn và trách nhiệm vượt xa những người dùng khác

  • "/ Root /" là nơi "root" có thể lưu trữ nội dung của nó, mà không có nguy cơ bị nhầm lẫn với các nội dung khác thuộc về người dùng bình thường. Thư mục này có thể được ghi vào một ổ đĩa vật lý khác /home/.

  • sudo -ibắt đầu một trình bao mô phỏng đăng nhập của root và ngụ ý di chuyển đến thư mục gốc của root. Như với bất kỳ người dùng nào khác, cd ~sẽ đưa bạn đến thư mục chính của bạn, nhưng, nếu bạn đã root, nó sẽ là/root/

  • Nếu hệ thống được cài đặt trên các ổ đĩa vật lý khác nhau, root có thể đăng nhập và cố gắng sửa chữa mọi thứ ngay cả khi một ổ đĩa khác trong hệ thống bị lỗi.


1
Câu trả lời hoàn hảo !
Arch

7

Lý do cốt lõi để thư mục gốc của root được xử lý khác nhau:

Khi gặp sự cố, bạn cần có khả năng thực hiện các tác vụ khôi phục hệ thống ngay khi bạn quản lý để gắn kết / hệ thống tập tin.

Tùy thuộc vào thiết lập của bạn, thư mục nhà của người dùng có thể nằm trên một hệ thống tệp khác hoặc thậm chí chúng có thể được gắn trên mạng.

Để đăng nhập với quyền root (tức là nhập tên gốc và mật khẩu gốc tại dấu nhắc đăng nhập) từ bàn điều khiển, bạn chỉ cần một hệ thống tập tin được gắn.

(Đây cũng là lý do tại sao các tiện ích cốt lõi nằm trong / bin và / sbin thay vì / usr / bin hoặc / usr / sbin - mọi thứ trong / usr đều có thể sử dụng được.)

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.