Tại sao tôi không có mật khẩu cho loại su su? Có vấn đề với


34

Tôi đã cài đặt Ubuntu bằng GUI, cung cấp cho mình mật khẩu và mọi thứ. Tôi không nhớ quá trình này. Tuy nhiên, điều khiến tôi lo lắng là tôi không biết mật khẩu sau:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Tôi chỉ không biết phải làm gì. Tôi không gặp rắc rối, nhưng tôi chỉ muốn biết những gì đang xảy ra ở đây. Tôi cũng có thể tự khóa các thư mục:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Tôi chỉ có một chút bối rối. Làm thế nào tôi có thể tự khóa mình như thế này? Tôi nghĩ sudolà lệnh quan trọng ở đây. Nhưng tôi đang làm cho foobstệp mở như có thể thông qua chmod, vậy tại sao nó lại khóa tôi?


6
Bạn gần như không bao giờ nên làm chmod -R 777 whatever, trừ khi bạn muốn gây ra rủi ro bảo mật rất lớn.

1
@BroSlow Cảm ơn vì đã đứng đầu. Ngoài câu hỏi này, nhưng làm thế nào một tập hợp đọc đặc quyền ghi vào một thư mục một cách an toàn? 666?
Starkers

1
Chắc chắn tốt hơn, nhưng phụ thuộc vào những gì bạn đang cố gắng làm. ví dụ: bạn có thực sự cần tất cả người dùng để có quyền truy cập r / w vào mọi thứ. Nếu không, bạn có thể làm một cái gì đó như 644 (chỉ đọc cho tất cả mọi người trừ bạn). Và nói chung, tôi sẽ rất cẩn thận khi thực hiện đệ quy chmodrằng nó chỉ thay đổi các tệp bạn dự định.

1
@broslow Bạn có cao không? 666 là 1) vẫn có thể ghi được trên thế giới và do đó có cùng mức độ rủi ro bảo mật và 2) loại bỏ bit thực thi, điều đó có nghĩa là anh ta sẽ không thể chdir vào thư mục đó nữa.
Shadur

@Starkers Vấn đề bảo mật thực sự tôi thấy ở đây là vì một số lý do điên rồ /var/lib/sudođược đặt thành thế giới có thể ghi. Điều này không nên xảy ra và bạn nên cố gắng tìm hiểu tại sao nó lại xảy ra.
Shadur

Câu trả lời:


49

Theo mặc định, roottài khoản superuser ( ) bị vô hiệu hóa và không có bất kỳ mật khẩu nào. Bạn có thể tạo một cái bằng cách chạy:

$ sudo passwd root

Sau đó, bạn sẽ có thể đăng nhập bằng root bằng cách chạy subằng mật khẩu này.

Đối với chmod, lệnh chính xác sẽ là:

$ chmod 777 -R foobs

Bạn cũng có thể dùng:

$ sudo -i

để đăng nhập bằng root bằng mật khẩu của bạn (không tạo mật khẩu gốc như mô tả ở trên).


4
@Oli Có lẽ bạn có thể chỉnh sửa câu hỏi của bạn để thêm sudo su. Điều này cũng cung cấp quyền su vĩnh viễn trong thiết bị đầu cuối.
dậy

13
không sử dụng sudo su, vì nó sẽ làm hỏng môi trường và mọi thứ sẽ vỡ. thay vì sử dụng sudo -i.
strugee

20
Không đặt mật khẩu gốc. Đừng không đặt mật khẩu root.
wchargein

4
chmod 777 hầu như luôn luôn xấu (bit dính được miễn; như được sử dụng với / tmp). Câu trả lời này là một rủi ro bảo mật. Cộng với việc đặt mật khẩu gốc không phải là cách sử dụng Ubuntu; lại mời một rủi ro bảo mật. Vui lòng làm theo câu trả lời của neon_overload.
Rinzwind

4
@WChargin tại sao bạn đề nghị không có tài khoản / mật khẩu root? Tôi thực sự tò mò là một người dùng archlinux.
Rob

67

1. Tại sao bạn không có mật khẩu root

Mặc dù bạn có thể tạo mật khẩu cho tài khoản superuser cho phép bạn đăng nhập bằng root su, nhưng điều đáng nói là đây không phải là cách làm thông thường với Ubuntu (hoặc ngày càng nhiều, các bản phân phối khác). Ubuntu đã chọn không cung cấp thông tin đăng nhập gốc và mật khẩu theo mặc định vì một lý do. Thay vào đó, cài đặt Ubuntu mặc định sẽ sử dụng sudođể cung cấp cho các đặc quyền siêu người dùng. Trong cài đặt Ubuntu mặc định, người đã cài đặt HĐH được cấp quyền "sudo" theo mặc định.

Bất kỳ ai có quyền "sudo" đầy đủ đều có thể thực hiện một cái gì đó "như một siêu người dùng" bằng cách chờ xử lý trước sudolệnh của họ. Chẳng hạn, để chạy apt-get dist-upgradenhư một siêu người dùng, bạn có thể sử dụng:

sudo apt-get dist-upgrade

Bạn sẽ thấy cách sử dụng sudo này khá nhiều ở bất cứ nơi nào bạn đọc hướng dẫn về Ubuntu trên web. Đó là một thay thế để làm điều này.

su
apt-get dist-upgrade
exit

Với sudo, bạn chọn trước những người dùng có quyền truy cập sudo. Không cần cho họ nhớ mật khẩu gốc, vì họ sử dụng mật khẩu của riêng họ. Nếu bạn có nhiều người dùng, bạn có thể thu hồi quyền truy cập siêu người dùng chỉ bằng cách xóa quyền sudo của họ mà không cần thay đổi mật khẩu gốc và thông báo cho mọi người về mật khẩu mới. Bạn thậm chí có thể chọn lệnh nào mà người dùng được phép thực hiện bằng sudo và lệnh nào bị cấm đối với người dùng đó. Và cuối cùng, nếu có vi phạm bảo mật, trong một số trường hợp, có thể để lại dấu vết kiểm toán tốt hơn cho thấy tài khoản người dùng nào bị xâm phạm.

Sudo giúp thực hiện một lệnh đơn giản hơn với các đặc quyền siêu người dùng. Với su, bạn vĩnh viễn thả vào trình bao siêu người dùng phải thoát bằng exithoặc logout. Điều này có thể dẫn đến việc mọi người ở trong vỏ siêu người dùng lâu hơn cần thiết chỉ vì nó thuận tiện hơn đăng xuất và đăng nhập lại sau đó.

Với sudo, bạn vẫn có tùy chọn mở trình bao siêu người dùng (tương tác) vĩnh viễn bằng lệnh:

sudo su

... Và điều này vẫn có thể được thực hiện mà không cần bất kỳ mật khẩu gốc nào, vì sudocung cấp đặc quyền siêu người dùng cho sulệnh.

Và tương tự, thay vì su -cho một vỏ đăng nhập, bạn có thể sử dụng sudo su -hoặc phím tắt của nó sudo -i.

Tuy nhiên, khi làm như vậy, bạn chỉ cần lưu ý rằng bạn đang hoạt động như một siêu người dùng cho mỗi lệnh. Đó là một nguyên tắc bảo mật tốt để không tồn tại như một siêu người dùng lâu hơn mức cần thiết, chỉ để giảm khả năng vô tình gây ra một số thiệt hại cho hệ thống (không có nó, bạn chỉ có thể làm hỏng các tệp mà người dùng của bạn sở hữu).

Chỉ cần làm rõ, bạn có thể , nếu bạn chọn, cung cấp cho người dùng root mật khẩu cho phép đăng nhập bằng root như được mô tả trong câu trả lời của @ Oli's, nếu bạn đặc biệt muốn làm mọi thứ theo cách này. Tôi chỉ muốn cho bạn biết về quy ước ưa thích của Ubuntu sudothay vào đó và cho bạn biết rằng có một sự thay thế.


2. Các vấn đề với lệnh chmod 777 -R của bạn

Câu hỏi của bạn cũng có một phần thứ hai: vấn đề của bạn với lệnh sudo chmod 777 -R foobs.

Thứ nhất, cảnh báo sau đây cho thấy sự cố bảo mật nghiêm trọng tiềm ẩn trên máy của bạn:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Điều này có nghĩa là ở một số giai đoạn, bạn đã thiết lập /var/lib/sudođược thế giới. Tôi tưởng tượng bạn đã làm điều này ở một số giai đoạn bằng cách sử dụng một lệnh như thế nào sudo chmod 777 -R /. Thật không may, bằng cách này, có lẽ bạn đã phá vỡ tất cả các quyền của tệp trong toàn hệ thống của mình. Không chắc đây sẽ là tệp hệ thống quan trọng duy nhất có quyền được thay đổi thành có thể ghi trên thế giới. Về cơ bản bạn có một hệ thống dễ bị hack bây giờ và cách dễ dàng duy nhất để lấy lại là cài đặt lại.

Thứ hai, lệnh bạn đang sử dụng:

sudo chmod 777 -R foobs

Khi thao tác các tệp trong thư mục chính của bạn, trong trường hợp này ~/Desktop, bạn không cần phải sử dụng sudo. Tất cả các tệp bạn tạo trong thư mục chính của bạn dù sao cũng phải được bạn sửa đổi (và nếu không, điều gì đó buồn cười đang diễn ra).

Ngoài ra, bạn cần nhận thức đầy đủ về hậu quả của việc thay đổi quyền truy cập tệp, chẳng hạn như thực hiện đệ quy hoặc trên một số lượng lớn tệp. Trong trường hợp này, bạn đang thay đổi cẩn thận thiết lập quyền truy cập tệp để có thể ghi trên thế giới. Bất kỳ người dùng nào khác, hoặc bất kỳ phần mềm máy chủ có lỗi nào trên máy, có thể dễ dàng truy cập để ghi đè lên tất cả các tệp và thư mục này.

Gần như chắc chắn rằng chmod 777 -R [dir]đó không phải là một giải pháp thích hợp cho bất kỳ vấn đề nào bạn đang cố gắng giải quyết (và như tôi đã đề cập ở trên, có bằng chứng cho thấy bạn đã thực hiện nó với các tệp hệ thống trong / var / lib và tôi cũng giả sử nhiều vấn đề khác nơi).

Một vài quy tắc cơ bản của ngón tay cái:

  • Nếu bạn chỉ làm rối với các tập tin của riêng bạn trong thư mục nhà, máy tính để bàn, v.v., bạn không bao giờ cần phải sử dụng sudohoặc quyền siêu người dùng. Nếu bạn làm thế, đó là một dấu hiệu cảnh báo rằng bạn đang làm gì đó sai.

  • Bạn không bao giờ nên sửa đổi thủ công các tệp hệ thống thuộc sở hữu của các gói. Ngoại lệ: trừ khi bạn thực hiện cụ thể theo cách được ghi lại bởi các gói đó, chẳng hạn như bằng cách sửa đổi cấu hình của chúng trong /etc. Điều này cũng áp dụng để thay đổi quyền tập tin. Nếu một hướng dẫn hoặc cố gắng khắc phục sự cố yêu cầu sudohoặc quyền siêu người dùng và đó không chỉ đơn giản là thay đổi cấu hình trong / etc /, đó là dấu hiệu cảnh báo rằng bạn đang làm gì đó sai.


Giải thích tuyệt vời .. Thumbs up .. :)
Saurav Kumar

7
Tôi nghĩ rằng "sudo -i" là cách "chính thức" để lấy shell root, thay vì "sudo su"
Tối đa

3
Có, bạn nên sử dụng sudo -ihơn sudo su.
Seth

sudo -i(hoặc sudo su -) không phải là tốt hơn về mặt phổ biến mà chỉ khác nhau - chúng khởi chạy một vỏ đăng nhập mô phỏng môi trường đăng nhập của người dùng root, ví dụ, .profiletệp hoặc .logintệp của người dùng root. Đây là tốt hơn nếu bạn muốn môi trường trong shell giống như một vỏ đăng nhập gốc hơn là một vỏ tương tác xảy ra với các đặc quyền siêu người dùng. Có lẽ tốt hơn là sử dụng các shell dựa trên đăng nhập nếu sử dụng shell, nhưng đó là điều cần thiết: điểm của câu trả lời là Ubuntu chủ yếu được thiết kế để sử dụng sudođể chạy các lệnh với các đặc quyền siêu người dùng.
thomasrutter
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.