Làm thế nào sudo an toàn hơn so với trực tiếp sử dụng su nếu người dùng được cấp quyền truy cập vào tất cả các lệnh?


40

Vì vậy, tôi đã đọc được sự khác biệt giữa việc sử dụng susudo, và mọi người dường như đồng ý rằng sudophương pháp này an toàn hơn là cho phép truy cập vào chính tài khoản gốc. Họ nói rằng với tài khoản root, bạn có thể phá vỡ toàn bộ hệ thống của mình chỉ bằng một lệnh duy nhất. Điều này tôi hiểu. NHƯNG người dùng ban đầu được tạo trên hệ thống cũng có quyền truy cập vào tất cả các lệnh bằng sudo. Điều này tôi có thể tìm ra bằng cách chạy su -l. Nếu đây là trường hợp, sau đó tôi chỉ có thể chạy sudo <game-ending command>để phá hỏng hệ thống của tôi. Vậy làm thế nào là cách tiếp cận này tốt hơn hoặc an toàn hơn sau đó cho phép tôi truy cập trực tiếp vào tài khoản siêu người dùng? Tôi có thể chạy tất cả các lệnh tương tự ...

Có phải bởi vì sử dụng sudotrên dòng lệnh tôi nói rõ ràng với máy tính tôi nghĩ rằng tôi biết tôi đang làm gì? Họ có nghĩ mọi người sẽ quên họ ở dưới tài khoản siêu người dùng trừ khi họ nói rõ ràng như vậy không?

Mọi người cũng nói rằng nếu hệ thống bị xâm nhập và xâm nhập bởi một người nước ngoài, việc thuộc tài khoản root sẽ cho phép họ làm những điều khủng khiếp với hệ thống của tôi. Nhưng dường như với tôi nếu họ đã có quyền truy cập vào tài khoản của tôi và biết mật khẩu của tôi, họ có thể làm những điều khủng khiếp tương tự bằng cách sử dụng sudo và nhập mật khẩu của tôi vì họ thậm chí không cần biết mật khẩu siêu người dùng. Tôi không nhận được gì ở đây?



2
Cảm ơn bạn đã tạo ra câu hỏi này, vì vậy bây giờ có một cái gì đó để hiển thị cho những người tiếp tục nói sudo là an toàn hơn nhưng không thể biện minh cho nó.
dùng253751

Câu trả lời:


40

Cá nhân tôi không nhất thiết coi nó an toàn hơn và hầu hết các lợi ích (của sudo) là trên một hệ thống nhiều người dùng. Trên một hệ thống người dùng, nó có thể là một rửa.

Những lợi ích là (không theo thứ tự cụ thể):

  • sudo có đăng nhập cao cấp. sudo ghi lại từng lệnh.
  • sudo cho phép kiểm soát hạt tốt hơn. Người ta có thể cấu hình sudo để cấp quyền truy cập root cho một số nhưng không phải tất cả các lệnh.
  • sudo sử dụng mật khẩu đăng nhập. Điều này bảo vệ việc phải cung cấp mật khẩu gốc (như bạn làm với su) và có liên quan đến điểm trên liên quan đến quyền kiểm soát / quyền truy cập chi tiết hơn vào root.
  • Trong Ubuntu, theo mặc định, tài khoản root bị khóa. Điều này ngăn chặn các cracker khi đăng nhập (từ xa thông qua nói ssh) họ phải đoán cả tên người dùng và mật khẩu. Nếu tài khoản root không bị khóa, như trường hợp của su, thì họ chỉ cần bẻ khóa mật khẩu của root.
  • sudo -icó lẽ là phương pháp tốt nhất để cô lập các biến môi trường của root với người dùng của bạn. Điều này xuất hiện theo thời gian nhưng là bí truyền vừa phải. Xem https://help.ubfox.com/community/RootSudo#ecial_notes_on_sudo_and_shells
  • một số người cảm thấy rằng phải gõ sudo trước mỗi lệnh họ muốn chạy bằng root hoặc hết thời gian sudo cho phép họ dừng lại và suy nghĩ rõ ràng hơn và giảm lỗi hoặc chạy các lệnh sai. Nếu làm như vậy sẽ giúp bạn đó cũng là một lợi ích.

Có lẽ có nhiều lợi ích hơn, nhưng, đó là những lợi ích chính, IMHO.

Xem thêm - https://help.ubfox.com/community/RootSudo

Để cố gắng trả lời một số suy nghĩ khác của bạn:

  • Không có gì về su hoặc sudo ngăn bạn chạy mã độc miễn là bạn biết mật khẩu. Không phải là an toàn hơn hoặc tốt hơn.
  • Crackers có thể có được quyền truy cập shell thông qua một số phương pháp. Khi bạn thấy "chạy mã tùy ý" trong thông báo bảo mật - https ://usn.ub Ubuntu.com/usn/ - điều đó có nghĩa là một trình bẻ khóa có thể chạy / bin / bash hoặc bất kỳ mã nào khác. Do đó, một cracker, thông qua các khai thác khác nhau, có thể có được quyền truy cập shell mà không cần biết tên đăng nhập hoặc mật khẩu của bạn. Không sudo hoặc su giúp với điều này.
  • Nếu một cracker có quyền truy cập shell, chúng có thể gây ra nhiều thiệt hại mà không cần quyền truy cập root. Ví dụ, phần mềm ransomware mã hóa tất cả dữ liệu cá nhân của bạn.
  • Nếu một cracker có quyền truy cập shell vào tài khoản có quyền truy cập root, thông qua su hoặc sudo, cracker có thể có quyền truy cập root thông qua một số phương thức nằm ngoài phạm vi của cuộc thảo luận này. Cả sudo hay su đều vượt trội về mặt này.

Vì vậy, trong khi bạn đã quan sát thấy các vấn đề hoặc sai sót với sudo, su có các lỗ hổng chính xác tương tự và su không vượt trội so với sudo ở các khía cạnh đó, IMHO


Sẽ tốt hơn nếu bạn chọn tham gia để cho phép tất cả người dùng kiểm soát sức mạnh (tắt nguồn và khởi động lại) khi không hoạt động, thay vì nhập các mục hoặc có tên nhóm.
mckenzm

8
Tôi tin rằng lợi thế lớn nhất là phải chứng minh mỗi lệnh là cần quyền siêu người dùng. Tôi nhận thấy trong trải nghiệm ban đầu của mình với Linux, tôi có xu hướng luôn luôn chạy bằng root trong ít nhất một thiết bị đầu cuối khi tôi sửa đổi hệ thống. Thật không may, rất dễ dàng để ban hành một lệnh phá hoại tại thiết bị đầu cuối bởi sự hiểu lầm hoặc nhầm lẫn. Nếu đó là trong 'thiết bị đầu cuối gốc', nó có thể dẫn đến khôi phục từ bản sao lưu hoặc cài đặt lại. sudo đã bảo vệ tôi khỏi điều đó nhiều lần!
rolinger

14
Không thỏa hiệp mật khẩu root có lẽ là lợi thế lớn nhất của sudo. Bạn có thể cho phép root mà không tiết lộ bất kỳ bí mật.
Thorbjørn Ravn Andersen

Bạn không chỉ có thể hạn chế các lệnh mà thậm chí bạn còn có thể hạn chế các đối số được chỉ định. Nhưng tôi không đồng ý rằng root bị khóa có liên quan gì đến nó; bởi vì bạn có thể cấu hình ssh để không cho phép đăng nhập root. Có một cái gì đó khác mặc dù với su so với sudo: sudo bạn sử dụng mật khẩu người dùng của mình, đó là một mật khẩu ít bị xâm phạm hơn và đó thường không phải là một điều tốt. Giống như mọi thứ trên thế giới này, có nhiều cách khác nhau để thực hiện điều gì đó và điều đó không có nghĩa là một cách chính xác hơn những cách khác 100% nếu có. Sau đó là sở thích.
Pryftan

Nhưng nếu bạn có nhiều hơn một người dùng cần quyền truy cập root (đó không phải là điều tôi sẽ tham gia vì đó chỉ là - đó là một cuộc thảo luận sôi nổi nhất) thì sudo có lợi thế ở đó.
Pryftan

10

Hãy tưởng tượng bạn có 20 phút để làm một cái gì đó phức tạp. Bạn hơi nôn nao và bạn phải vội vàng. Bạn hãy sử dụng su mà bạn nói. Bạn sẽ tiết kiệm được một chút thời gian.

Tình cờ bạn gõ

rm -rf /*

thay vì

rm -rf ./*

Hệ thống của bạn hiện đang tự đóng cục và bạn có 10 phút cho đến khi hết hạn.

Nếu bạn chọn rõ ràng khi bạn cần root, bạn có thể giảm thiểu khả năng điều này xảy ra. Root có thể không cần thiết cho rm -r ./*lý do tại sao sử dụng nó? Tại sao phải mạo hiểm?

Đó là những gì an toàn của Ý có nghĩa là ở đây. Giảm thiểu rủi ro của người dùng (tất cả người dùng, không chỉ người mới bắt đầu) phạm sai lầm nghiêm trọng.

Tất nhiên, đây là một ví dụ cực đoan không được phép xảy ra trong môi trường sản xuất (tôi đảm bảo nó đã xảy ra trong môi trường prod).

Bảo mật khôn ngoan có một số thứ mà sudo cũng tốt hơn cho. Như @Panther nói - đăng nhập, hạn chế, mật khẩu gốc là SPOF, v.v.)


4
Chết tiệt, bạn không cần phải đợi lâu như vậy nếu bạn chỉ làm ... chown -R nobody:nobody /hoặc thậm chí chown -R nobody ../là root. chmodTất nhiên cũng có vấn đề tương tự trong chế độ đệ quy. Nhưng điểm tốt nhất bạn thực hiện là bạn chỉ nên root khi bạn cần điều đó; càng ít đặc quyền đăng nhập của bạn càng tốt cho sử dụng bình thường.
Pryftan

2
+1 để lập trình khi bạn đang nôn nao.
rút tiền vào

4
Vì vậy, điều này khác với sudonhư thế nào? Bạn viết sudo rm -rf /*thay vì sudo rm -rf ./*và bùng nổ trở lại.
ilkkachu

2
@ilkkachu về mặt lệnh thực tế, nó tạo ra sự khác biệt tối thiểu với những gì xảy ra. Nhưng bạn đã phải tuyên bố rõ ràng rằng bạn muốn làm điều này với quyền root. Đó là điểm. An toàn là về quản lý rủi ro. Tất nhiên bạn vẫn có thể gạch hệ thống. Nhưng bạn càng có ít thời gian để có quyền root, bạn càng ít có cơ hội phạm sai lầm nghiêm trọng. An toàn là tất cả về giảm thiểu xác suất.
dijksterhuis

2
@ilkkachu Vì bạn sẽ khôngsudo rm -rf ./*. Bạn có thể có quyền truy cập ghi vào nội dung trong thư mục hiện tại, vì vậy bạn không cần sudo cho lệnh đó. Vì vậy, các lệnh typoed đầu lên được rm -rf /*, trong đó sản lượng một chuỗi dài của "Permission denied" thông điệp, cho bạn biết bạn cần phải ctrl-ctrước khi nó được cho những thứ bạn thực sự có thể xóa, thay vì chỉ xóa tất cả mọi thứ trong /bin, /boot, /dev, và một nửa trong số /etctrước bạn thậm chí nhận ra có gì đó không ổn
Ray

9

Tôi muốn thêm một chút quan điểm lịch sử vào các câu trả lời khác. Thật không may, tôi không có bất kỳ nguồn nào sẵn sàng ngoại trừ những ký ức của riêng tôi về các cuộc thảo luận và bài báo trên tạp chí Usenet.

Cách đây một thời gian, vào những năm 1990, các bản phân phối đã giúp cài đặt Linux trên phần cứng của bạn dễ dàng hơn, thậm chí không có nhiều kiến ​​thức về máy tính. ¹ Vì vậy, Linux bắt đầu thu hút ngày càng nhiều người mà trước đây không được biết đến như là quản trị viên hệ thống một số phương ngữ UN * X. Thay vào đó, nhiều hệ thống đã được sử dụng cho (một người dùng) như Windows 95/98. Và họ đã học được rằng hầu hết các tác vụ quản trị hệ thống Linux khiến nó cần phải hoạt động dưới tài khoản "root" kỳ lạ đó.

Do đó, một số người dùng chỉ cần đăng nhập bằng root và sử dụng tài khoản đó cho tất cả công việc hàng ngày của họ. Tại sao họ phải gõ suvà nhập lại mật khẩu gốc hoặc đăng nhập vào một tty mới chỉ cho một số lệnh quản trị? Nhưng sử dụng root cho tất cả mọi thứ tất nhiên không phải là một ý tưởng tốt, vì bạn có thể gây hại nhiều hơn cho hệ thống của bạn với một số lệnh không trung thực ở sai vị trí. Điều này thậm chí đã khiến một số distro (có phải là SuSE?) Để sửa đổi nền màn hình cho người dùng root để hiển thị một cảnh báo lớn rằng bạn chỉ nên sử dụng tài khoản đó cho các tác vụ quản trị viên.

Vì vậy, cách Ubuntu với sudomột số lợi thế (ngoài những cách đã được liệt kê bởi Panther ).

  • Bạn không thể đăng nhập trực tiếp vào gốc account.² :-)
  • Quá trình cài đặt sẽ không yêu cầu bạn nhập mật khẩu gốc (bổ sung), bạn chỉ cần một mật khẩu (người dùng).
  • sudolưu trữ thông tin đăng nhập của bạn, vì vậy đối với nhiều lệnh quản trị theo trình tự, bạn chỉ phải nhập mật khẩu của mình một lần (ngược lại su). Điều này làm giảm sự thôi thúc chỉ cần mở một trình bao hoặc một thiết bị đầu cuối mới với quyền root .
  • Và nó giúp dễ dàng hơn để nói với người dùng trực tuyến và trong tài liệu về những lệnh họ phải nhập với tư cách quản trị viên và không.

Và đối với những người không dám tự làm, đã có những bữa tiệc cài đặt.
² Nhưng bạn có thể sử dụng một lệnh như sudo -ihoặc sudo su - rootđể lấy shell gốc sau khi bạn đăng nhập như một người dùng bình thường.
Nhưng tất nhiên bạn biết rằng bạn không nên đơn giản sao chép và dán các lệnh từ Internet , phải không?


Bạn đang nói trong Ubuntu rằng bạn không thể làm gì: sudo su -hay sudo su - root? Bởi vì tôi đã thấy các khiếu nại tương tự, ví dụ MacOS X không có root nhưng điều đó hoàn toàn sai khi chỉ cần thực hiện lệnh đầu tiên ...
Pryftan

2
Tất nhiên là có một tài khoản root . Tôi đã nói rằng bạn không thể "đăng nhập trực tiếp", nghĩa là bạn không thể nhập người dùng rootvà mật khẩu tại dấu nhắc đăng nhập hoặc hộp thoại đăng nhập X và bắt đầu phiên của bạn với quyền root. Nhưng bạn có thể sử dụng một trong các lệnh của mình (tôi thích sudo -ivì nó ngắn hơn và tôi lười biếng) để lấy shell root.
Dubu

1
Vui lòng đọc lại bình luận của tôi :) Tôi nói rằng một số người nói rằng MacOS X không có tài khoản root nhưng thực tế nó có và nó nhắc tôi về điều này (tôi không đánh đồng nó là không có tài khoản root trong Ubuntu). Nhưng đối với tất cả tôi biết các nhà phát triển tại Ubuntu đã đủ điên rồ để vá sudo để không cho phép điều đó vì vậy câu hỏi của tôi.
Pryftan

1
@Pryftan Như tôi đã nói trong nhận xét của tôi ở trên, cả hai lệnh của bạn đều hoạt động và sẽ giúp bạn có được một vỏ gốc. Tôi sẽ thêm nó vào câu trả lời của tôi.
Dubu

Đúng. Tôi biết điều đó :) Tôi đã không nói rằng đó là sai hay không đúng. Tôi đã nói rằng nó nhắc tôi về một số điều mà một số người nói nhưng không chính xác khi nói. Do đó làm đậm phần đó.
Pryftan

2

Có thể vô hiệu hóa đăng nhập root thông qua ssh trong nhiều thập kỷ. Cách Ubuntu vô hiệu hóa tài khoản root và khiến mọi người sudo mọi thứ không gì khác hơn là một mánh lới quảng cáo. Chỉ cần "sudo -s" và bạn có một vỏ gốc. Vô hiệu hóa đăng nhập root thông qua ssh và để nó ở đó.


8
... trên lưu ý đó, chỉ sử dụng khóa cho bất kỳ thông tin đăng nhập ssh nào, không chỉ tài khoản root, thực tế tuyệt vời.
rackandboneman

Đúng. Tôi đã lưu ý điều này trong một bình luận chỉ một vài phút trước đây. Otoh được đặc quyền ít nhất là tốt nhất trên tất cả vì vậy chỉ nâng cao khi bạn cần và điều này phù hợp cho dù bạn đăng nhập bằng ssh hoặc cục bộ. Và những gì @rackandboneman nói là tất nhiên cũng hoàn toàn chính xác mặc dù đối với tôi, tôi tắt tính năng dừng toàn bộ root từ xa ngay cả với các phím ssh bất kể hệ thống.
Pryftan

0

Tùy thuộc vào cấu hình, sudo <game ending command>sẽ không nhất thiết phải làm việc. Tất nhiên, nếu sudoerscấu hình ghi "người dùng ALL = (ALL) ALL", sudosẽ không bảo vệ thêm. Tuy nhiên, bạn có thể chỉ định danh sách các lệnh đặc quyền bạn cần chạy thường xuyên, như cài đặt các gói mới và bỏ qua các lệnh nguy hiểm như rm.

Bằng cách này, bạn có thể chạy tất cả các lệnh nếu bạn đăng nhập như root, nhưng vì bạn sẽ chỉ cần điều này đôi khi, nguy cơ chạy <game ending command>sẽ giảm đáng kể.


1
Và các đối số cụ thể cho các lệnh, quá.
Pryftan

1
Và mỗi nhóm chứ không phải mỗi người dùng. sử dụng các nhóm là vô giá trong môi trường nhiều người dùng, nhân viên có thể đến và đi và nơi bạn có thể cần các vai trò cụ thể.
Panther

0

Sudo đó cho phép bạn chỉ cho phép một số lệnh nhất định không phải là lợi ích duy nhất của sudo trên su.

Trong hầu hết các cửa hàng, nó thậm chí không phải là lợi ích quan trọng nhất.

Với sudo, bạn biết ai đã thực hiện một lệnh cụ thể.

Bây giờ có lẽ điều này không quan trọng với bạn. Ví dụ: bạn có thể là người dùng duy nhất của máy tính. Nếu vậy, thì sudo có thể không tốt hơn su.

Nhưng nhiều máy chủ lưu trữ có nhiều hơn một quản trị viên.

sudo sau đó trở nên rất hữu ích vì nếu ai đó làm sai, sudo cho bạn biết ai đã làm điều đó.

Điều đó cho phép bạn hiểu tại sao xảy ra lỗi và giáo dục mọi người ngăn ngừa lỗi tái diễn hoặc nếu cần, để xóa các công cụ khỏi một ai đó.

Như một phần thưởng, khi mọi người biết rằng hành động của họ được ghi lại, họ thường cẩn thận hơn một chút.

Sudo không hoàn hảo.

Nếu hai người làm "sudo sh" cùng một lúc, thì có thể khó quy các lệnh cho người này hoặc người kia.

Và một quản trị viên độc hại luôn có thể xóa hoặc chỉnh sửa nhật ký - mặc dù thực hiện việc đó một cách sạch sẽ không phải lúc nào cũng dễ dàng như mọi người nghĩ, đặc biệt là nếu bạn đã đăng nhập tập trung.

sudo không nhất thiết phải dừng một hành động ngu ngốc hoặc độc hại, vì tất cả các lý do được xác định trong câu hỏi ban đầu.

Nhưng nó mang lại cho bạn cơ hội tốt hơn để ngăn ngừa tái phát.


1. Chỉ khi bạn dành thời gian để cấu hình đúng cách. Điều mà hệ thống Ubuntu mặc định không làm (và không thể làm được). 2. Chỉ khi người dùng không có cách nào để chỉnh sửa nhật ký sau thực tế, họ có thể trừ khi các lệnh họ có thể chạy bị giới hạn. (Không có trong trường hợp sử dụng Ubuntu mặc định)
ilkkachu

@ilkkachu, mặc dù bạn có một số điểm tốt, lập luận của bạn ở đây không có ý nghĩa gì ở đây. Điểm không phải là cài đặt mặc định, điểm là có thể cấu hình và tinh chỉnh sudo. Bạn không thể cấu hình su để thực hiện những cách này cả. su là tất cả hoặc không có gì, không có cách nào để hạn chế các lệnh và vấn đề là sudo cung cấp khả năng ghi nhật ký cao hơn. Cả su hoặc sudo đều không cung cấp bất kỳ sự bảo mật nào đối với những gì một cracker có thể hoặc không thể làm trên một hệ thống bị xâm nhập và không ai có thể sudo theo cách này. Nhật ký sudo có giá trị lớn trong hoạt động hàng ngày.
Panther

@Panther, tốt, tiêu đề câu hỏi cho biết "... nếu người dùng được cấp quyền truy cập vào tất cả các lệnh?" Vì vậy, tôi đã cho rằng chúng có nghĩa là cấu hình Ubuntu mặc định thông thường sudocho phép mọi thứ. Chắc chắn, bạn có thể định cấu hình nó để giới hạn các lệnh mà người dùng được phép chạy, nhưng tôi không nghĩ đó là trường hợp trong câu hỏi như đã hỏi.
ilkkachu

Trả lời mở rộng.
Ben Aveling

@ilkkachu - đọc lại câu trả lời của tôi "Cá nhân tôi không nhất thiết coi nó an toàn hơn và hầu hết các lợi ích (của sudo) là trên một hệ thống nhiều người dùng. Trên một hệ thống người dùng, nó có thể là một rửa." Sau đó tôi tiếp tục giải thích những ưu điểm khác của sudo, một trong số đó là cấu hình.
Panther
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.