Mục đích của người dùng 'không ai' là gì?


93

Sau khi tôi đọc Danh sách tất cả người dùng, tôi nhận thấy rằng có một tài khoản người dùng có tên 'không ai' trong hệ thống Ubuntu của tôi.

Ngoài ra tôi nhận thấy rằng tôi có thể đăng nhập vào tài khoản này từ thiết bị đầu cuối bằng lệnh sau và mật khẩu của tôi:

sudo su nobody

không ai

Nó hoàn toàn không làm phiền tôi, nhưng tôi muốn biết mục đích của người dùng này là gì? Được tạo theo mặc định trên bản cài đặt Ubuntu mới hay được tạo bằng cách cài đặt một gói cụ thể?


8
Lưu ý rằng khi bạn đăng nhập bằng mật khẩu, bạn đang sử dụng mật khẩu của mình cho bước sudo, không phải cho tài khoản của ai (và lý do nó hoạt động là vì siêu người dùng có thể kiện bất kỳ ai mà không cần nhập mật khẩu của họ (mặc dù như được đề cập dưới đây, tôi tin rằng ít nhất là trên các dẫn xuất của RH, nếu vỏ của không ai được đặt thành / sbin / nologin, bạn vẫn không thể đăng nhập ngay cả khi sử dụng superuser (còn gọi là root)
Foon

Đó là trường hợp theo mặc định bây giờ (18.04+?). sudo su nobodytrở lại Tài khoản này hiện không có sẵn. bởi vì shell cho người dùng nobody được đặt thành/usr/sbin/nologin ( getent passwd nobody).
Pablo A

@sarnold - vui lòng xem nhận xét của tôi về câu trả lời Tôi tin rằng bạn đang ám chỉ. Đó là một câu trả lời khá kém, vì nó không lý do hoặc trích dẫn nguồn. Ngoài ra, nó còn đi ngược lại với tất cả những gì tôi biết về tài khoản không ai và cách thức hoạt động của NFS: với root_squashnó sẽ ánh xạ root tới không ai trên các hệ thống từ xa. Điều này ít nhiều chính xác trái ngược với những gì câu trả lời này nêu
vidarlo

Câu trả lời:


85

Nó ở đó để chạy những thứ không cần bất kỳ quyền đặc biệt nào. Nó thường được dành riêng cho các dịch vụ dễ bị tổn thương (httpd, v.v.) để nếu chúng bị hack, chúng sẽ có thiệt hại tối thiểu trên phần còn lại của hệ thống.

Tương phản điều này với việc chạy một cái gì đó như một người dùng thực sự, nếu dịch vụ đó bị xâm phạm (máy chủ web đôi khi bị khai thác để chạy mã tùy ý), nó sẽ chạy như người dùng đó và có quyền truy cập vào mọi thứ mà người dùng có. Trong hầu hết các trường hợp, điều này là xấu như nhận được root.

Bạn có thể đọc thêm một chút về người dùng không có ai trên Ubuntu Wiki:

Để trả lời các lượt theo dõi của bạn:

Tại sao tôi không thể truy cập tài khoản này với su nobody?

sudo grep nobody /etc/shadowsẽ cho bạn thấy rằng không ai không có mật khẩu và bạn không thể không sucó mật khẩu tài khoản. Cách sạch nhất là sudo su nobodythay thế. Điều đó sẽ để lại cho bạn trong một shvỏ bọc hoang vắng .

Bạn có thể đưa ra một ví dụ cụ thể khi được chỉ định sử dụng tài khoản này không?

Khi quyền không cần thiết cho hoạt động của chương trình. Điều này là đáng chú ý nhất khi sẽ không có bất kỳ hoạt động đĩa.

Một ví dụ thực tế về điều này là memcached(một bộ đệm / cơ sở dữ liệu / bộ nhớ trong khóa-giá trị khóa), ngồi trên máy tính của tôi và máy chủ của tôi chạy dưới tài khoản không ai. Tại sao? Bởi vì nó không cần bất kỳ quyền nào và để cung cấp cho nó một tài khoản có quyền truy cập ghi vào các tệp sẽ là một rủi ro không cần thiết.


Chỉ hai điều nữa nếu bạn có thể giải thích: 1) tại sao tôi không thể truy cập tài khoản này su nobodyvà 2) bạn có thể đưa ra một ví dụ cụ thể khi được chỉ định sử dụng tài khoản này không?
Radu Rădeanu

@ RaduRădeanu 1) Tôi đoán đó là vì nó không có mật khẩu được đặt và khi bạn sulà người dùng bình thường, bạn phải cung cấp mật khẩu của người dùng mục tiêu. Hãy thử sudo -isau đó su nobodytừ shell root (sẽ không yêu cầu mật khẩu).
một CVn

2
Network File Systemánh xạ roottới nobodyroot cục bộ không thể truy cập mọi thứ như root từ xa có thể.
Sylwester

1
@ RaduRădeanu Xin lưu ý lịch sử chỉnh sửa. Khi tôi kiểm tra lệnh ban đầu (không phải là gì), ban đầu tôi đã kết thúc bằng một dấu gạch ngang (/ bin / sh) nhưng bây giờ tôi không thể sao chép nó. Chỉnh sửa ban đầu của bạn là tốt. Không phải tôi là người đã thay đổi nó.
Oli

1
Tôi luôn nghĩ rằng nobodyNFS thực sự / chủ yếu được sử dụng như các trạng thái linuxst Chuẩnbase .
dgonzalez

29

Trong nhiều biến thể Unix, "không ai" là tên thông thường của tài khoản người dùng không sở hữu tệp, không thuộc nhóm đặc quyền và không có khả năng nào ngoại trừ những người dùng khác có.

Người ta thường chạy daemon như không ai, đặc biệt là máy chủ, để hạn chế thiệt hại có thể được thực hiện bởi người dùng độc hại đã giành quyền kiểm soát chúng. Tuy nhiên, tính hữu dụng của kỹ thuật này sẽ giảm nếu có nhiều hơn một daemon được chạy như thế này, bởi vì sau đó việc giành quyền kiểm soát một daemon sẽ cung cấp quyền kiểm soát tất cả. Lý do là các quy trình không thuộc sở hữu của ai có khả năng gửi tín hiệu cho nhau và thậm chí gỡ lỗi lẫn nhau, cho phép chúng đọc hoặc thậm chí sửa đổi bộ nhớ của nhau.

Thông tin được lấy từ http://en.wikipedia.org/wiki/Nobody_(username) .


-1: nobodyhoàn toàn dành cho NFS và không được sử dụng bởi các dịch vụ khác và chắc chắn không phải bởi quản trị viên hệ thống. Cảm ơn.
đăng

22

Người dùng không ai được dành riêng cho NFS.

Các anwers ở trên là khá sai, bởi vì họ cho rằng đó nobodylà id người dùng kiểu ẩn danh / khách "chung chung".

Trong mô hình kiểm soát truy cập UNIX / Linux mô hình người dùng ẩn danh / khách không tồn tại và đây là những gợi ý không hay:

  • " Chung để chạy daemon như nobody, đặc biệt là các máy chủ, để hạn chế thiệt hại mà có thể được thực hiện bởi một người dùng độc hại người giành quyền kiểm soát của họ. " Vì rằng sau: " Tuy nhiên, tính hữu ích của kỹ thuật này được giảm nếu có nhiều hơn một daemon được chạy như thế này, bởi vì sau đó giành quyền kiểm soát một daemon sẽ cung cấp quyền kiểm soát tất cả chúng ".
  • " Một ví dụ trong thế giới thực của điều này là memcached(bộ nhớ cache / cơ sở dữ liệu / bộ nhớ trong khóa-giá trị khóa), ngồi trên máy tính của tôi và máy chủ của tôi đang chạy trong nobodytài khoản. Tại sao? Bởi vì nó không cần bất kỳ quyền nào và để cung cấp cho nó một tài khoản có quyền truy cập ghi vào tệp sẽ là một rủi ro không cần thiết. "

Các nobodytên người dùng với người dùng id 65534 đã được tạo ra và dành cho một mục đích cụ thể và nên được sử dụng chỉ cho mục đích đó: để thay thế cho người sử dụng "unmapped" và id người dùng trong xuất khẩu cây NFS.

Đó là, trừ khi ánh xạ người dùng / id được thiết lập cho xuất khẩu cây NFS, tất cả các tệp trong xuất sẽ xuất hiện thuộc sở hữu của nobody. Mục đích của việc này là để ngăn tất cả người dùng trên hệ thống nhập truy cập vào các tệp đó (trừ khi họ có quyền "khác"), vì không ai trong số họ (ngoại trừ root) có thể / trở thành nobody.

Do đó, đó là một ý tưởng rất tồi để sử dụng nobodycho bất kỳ mục đích nào khác, vì mục đích của nó là làm tên người dùng / id người dùng cho các tệp mà mọi người không thể truy cập được.

Mục nhập Wiki cũng rất sai.

Thực tiễn UNIX / Linux là tạo một tài khoản mới cho mỗi "ứng dụng" hoặc khu vực ứng dụng cần một miền kiểm soát truy cập riêng và không bao giờ sử dụng lại nobodybên ngoài NFS .


Câu trả lời này không trích dẫn bất kỳ nguồn khác nhau, và rõ ràng mâu thuẫn với một số trong những câu trả lời khác, mà làm trích dẫn nguồn. Tiền thưởng hiện tại cho thấy câu trả lời này là đặc biệt tốt, trong trường hợp đó nên trích dẫn một số nguồn, hoặc trong danh sách có một số lý do.
vidarlo


@ mook765 Phần đó ổn. Đoạn về NFS, tuy nhiên, tôi không mò mẫm. Ví dụ với root_squashbật, rootđược ánh xạ tới người dùng nobody, vì vậy các tệp có chủ sở hữu nobodysẽ hoàn toàn không có ý nghĩa. Ngoài ra, tuyên bố rằng các tệp thuộc sở hữu của bất kỳ ai có nghĩa là không thể truy cập được đối với bất kỳ ai có ý nghĩa rất nhỏ, vì các quyền của tệp tách biệt với quyền sở hữu trong UNIX. Tôi không nói rằng tất cả mọi thứ trong câu trả lời là sai, chỉ là các yếu tố của nó không có ý nghĩa gì đối với tôi :)
vidarlo

1
@vidarlo, câu trả lời này không gợi ý rằng bạn nên đặt các tệp được sở hữu nobody. Nó nói với bạn rằng nobodyNFS sẽ sử dụng khi ánh xạ quyền, và đó là điểm quan trọng nhất đối với tôi. Làm thế nào NFS sử dụng nobodylà ít thú vị hơn so với thực tế là nó không sử dụng nobody. Cảm ơn.
đăng

@sarnold câu trả lời vẫn hoàn toàn sai trong vấn đề này theo ý kiến ​​của tôi. Nếu một người dùng đọc câu trả lời và man exports, anh ta có thể rất bối rối.
vidarlo

17

Người nobodydùng được tạo theo mặc định trên bản cài đặt mới (được kiểm tra trên Ubuntu Desktop 13.04).

Trong nhiều biến thể * nix, nobodylà tên thông thường của tài khoản người dùng không sở hữu tệp, không thuộc nhóm đặc quyền và không có khả năng ngoại trừ những người dùng khác ( nobodyngười dùng và nhóm không có bất kỳ mục nào trong /etc/sudoerstệp) .

Người ta thường chạy daemon như nobody, đặc biệt là các máy chủ, để hạn chế thiệt hại mà có thể được thực hiện bởi một người dùng độc hại người giành quyền kiểm soát của họ. Tuy nhiên, tính hữu dụng của kỹ thuật này sẽ giảm nếu có nhiều hơn một daemon được chạy như thế này, bởi vì sau đó việc giành quyền kiểm soát một daemon sẽ cung cấp quyền kiểm soát tất cả. Lý do là nobodycác quy trình được tạo ra có khả năng gửi tín hiệu cho nhau và thậm chí gỡ lỗi lẫn nhau, cho phép chúng đọc hoặc thậm chí sửa đổi bộ nhớ của nhau.

Nguồn : Wikipedia - Không ai (tên người dùng)


Các nobodyquy trình được tạo ra có thể gửi tín hiệu cho nhau và thậm chí kết nối với nhau trong Linux, có nghĩa là một quy trình không thuộc sở hữu có thể đọc và ghi bộ nhớ của một quy trình không thuộc sở hữu khác.

Đây là mục nhập mẫu của nobodyngười dùng trong /etc/passwdtệp:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Như bạn có thể nhận thấy, nobodyngười dùng có /bin/shvỏ đăng nhập và /nonexistentthư mục chính. Như tên cho thấy, /nonexistentthư mục không tồn tại, theo mặc định.

Nếu bạn bị hoang tưởng, bạn có thể đặt nobodyshell mặc định là như /usr/sbin/nologinvậy, từ chối đăng nhập ssh cho nobodyngười dùng.

Nguồn : LinuxG.net - Người dùng Linux và Unix Không ai


Câu trả lời này sẽ xứng đáng +1 nếu đoạn không chính xác từ Wikipedia bị xóa. Cảm ơn.
đăng

3

không ai là người dùng đặc biệt và tài khoản nhóm. Bởi vì nó là tên người dùng thực tế (và tên nhóm) và có thể được sử dụng bởi các quy trình và thậm chí người dùng, nên nó không thực sự là ai cả . Ví dụ, một số cấu hình Apache không có ai là người dùng / nhóm sở hữu các tệp và thư mục trang web. Vấn đề xảy ra khi nhiều quy trình có thể sử dụng không có người dùng, chẳng hạn như thư mục NFS và máy chủ web.


0

Sửa lỗi nhỏ cho ' Người dùng không ai chỉ dành riêng cho NFS. ' câu trả lời. Người nobodydùng cũng được sử dụng cho các container không có đặc quyền với các liên kết gắn kết tại thời điểm này.

Điều này được lấy từ systemd-nspawn, cụ thể là tùy chọn gắn kết --bind:

Lưu ý rằng khi tùy chọn này được sử dụng kết hợp với --private-users, các điểm gắn kết quả sẽ được sở hữu bởi người dùng không ai. Đó là bởi vì mount và các tệp và thư mục của nó tiếp tục được sở hữu bởi những người dùng và nhóm máy chủ lưu trữ có liên quan, không tồn tại trong container, và do đó hiển thị dưới ký tự đại diện UID 65534 (không có ai). Nếu các liên kết gắn kết như vậy được tạo, bạn nên đặt chúng ở chế độ chỉ đọc, sử dụng --bind-ro =.

systemd-nspawn

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.