Bạn là một quản trị viên, nhưng không root
. Người root
dùng có thể làm bất cứ điều gì. Quản trị viên có thể thực hiện các hành động nhưroot
, nhưng thông thường những gì quản trị viên không thực hiện root
. Bằng cách đó, bạn có toàn quyền kiểm soát hệ thống của riêng bạn, nhưng chỉ khi bạn chọn sử dụng nó.
Ubuntu yêu cầu mật khẩu của bạn khi bạn cố gắng thực hiện root
, để đảm bảo đó thực sự là bạn.
Tài khoản người dùng: Con người và mặt khác
Người dùng thực sự có tài khoản người dùng để đại diện cho họ. Bạn đã tạo một tài khoản như vậy khi bạn cài đặt Ubuntu. Nhưng không phải tất cả tài khoản người dùng đại diện cho người dùng thực sự .
Người dùng thực sự được cấp (và bị từ chối) khả năng thông qua tài khoản người dùng của họ. Họ phải sử dụng tài khoản người dùng của mình để sử dụng hệ thống; do đó, khả năng và giới hạn tài khoản người dùng của họ áp dụng cho họ.
Tài khoản người dùng cũng được sử dụng để mã hóa các bộ khả năng và giới hạn. Một số tài khoản người dùng - thực tế, trừ khi bạn có nhiều người dùng máy - tồn tại để các chương trình hoặc lệnh nhất định có thể được chạy với danh tính của họ, một danh tính với khả năng và giới hạn phù hợp cho công việc.
Ví dụ: www-data
người dùng tồn tại để nếu bạn chạy một máy chủ web, nó sở hữu dữ liệu mà máy chủ có thể truy cập được. Không có người dùng thực sự nào phải được trao quyền để thực hiện các thay đổi không được kiểm soát đối với những dữ liệu đó và máy chủ web không phải được trao quyền để thực hiện bất kỳ hành động nào không cần thiết để phục vụ web. Do đó, cả dữ liệu web và phần còn lại của hệ thống đều an toàn hơn trước sự cố vô tình hoặc cố ý, so với việc máy chủ web được điều hành bởi một số người dùng có tất cả quyền hạn của máy chủ web (và có quyền hạn của máy chủ web sở hữu).
Tài khoản người dùng không quan trọng nhất của con người
Các superuser , có username là root
, là một tài khoản người dùng không phải con người với sự kết hợp rất cụ thể về khả năng và hạn chế: tất cả các khả năng, và không có giới hạn .
root
Được phép làm bất cứ điều gì. Vẫn có những điều root
không thể làm được vì bản thân hệ thống không thể thực hiện hoặc có ý nghĩa đối với chúng. Vì vậy, root
không thể giết chết một quá trình trong giấc ngủ không bị gián đoạn , hoặc làm cho một tảng đá quá nặng để di chuyển, sau đó di chuyển nó .
Nhiều quy trình hệ thống quan trọng, như init
, chạy như root
và root
được sử dụng để thực hiện các tác vụ quản trị.
Tôi có thể đăng nhập như root
?
Có thể định cấu hình root
tài khoản để có thể đăng nhập bằng mật khẩu, nhưng điều này không được bật theo mặc định trong Ubuntu. Thay vào đó, bạn có thể nghĩ root
như là giống như www-data
, lp
, nobody
, và các tài khoản khác không phải con người. (Chạy cat /etc/passwd
hoặc getent passwd
để xem tất cả.)
Người dùng đăng nhập bằng tài khoản người dùng của riêng họ và sau đó nếu một số tác vụ được thực hiện với tài khoản người dùng khác, họ sẽ khiến tác vụ đó được thực hiện với danh tính đó mà không thực sự đăng nhập như người dùng đó.
Bạn cũng có thể định cấu hình những người dùng không phải là người khác www-data
, vì vậy người ta cũng có thể đăng nhập như họ. Tuy nhiên, điều đó khá hiếm, trong khi ở một số HĐH giống Unix khác, thông thường đăng nhập như root
trong một thiết bị đầu cuối . Những rủi ro của chạy một giao diện đồ họa hoàn toàn như root
, kết hợp với bao nhiêu chương trình đồ họa không được thiết kế để chạy như root
và có thể không hoạt động đúng, có nghĩa là bạn không bao giờ nên cố gắng để có được một root
thuộc sở hữu phiên máy tính để bàn .
Xin lưu ý rằng mặc dù đăng nhập như root
bị vô hiệu hóa trong Ubuntu, có nhiều cách để lấy root
shell mà không cần xác thực root
, điều này tạo ra hiệu ứng tương tự: phổ biến nhất là sudo -s
hoặc-i
, chế độ phục hồi và các kỹ thuật tương tự . (Đừng lo lắng nếu bạn không biết những thứ đó là gì.) Đây không thực sự đăng nhập: trong chế độ khôi phục, bạn sẽ trở thành root
trước khi bất kỳ đăng nhập nào xảy ra; với các sudo
phương thức dựa trên, bạn chỉ đang chạy shell với quyền root.
Quản trị viên
Trong Ubuntu, quản trị viên là người dùng có thể làm bất cứ điều gì họ muốn root
, khi họ chọn làm như vậy .
Cài đặt hệ thống> Tài khoản người dùng. "Eliah Kagan" là một quản trị viên, vì vậy anh ta có thể làm những việc như root
, nhưng anh ta thì khôngroot
.
Tôi là quản trị viên trên hệ thống Ubuntu của mình. Khi tôi chạy các chương trình, thông thường chúng chạy như ek
("Eliah Kagan" là tên đầy đủ tương ứng với ek
tên người dùng.)
Khi tôi chạy AbiWord hoặc LibreOffice, nó chạy như ek
. Khi tôi chạy Firefox, Chromium, Empathy hoặc Pidgin, nó sẽ chạy như ek
. Các chương trình chạy để cung cấp giao diện máy tính để bàn chạy như ek
.
Tuy nhiên, tôi là quản trị viên, vì vậy nếu tôi cần thực hiện một nhiệm vụ quản trị, tôi có thể làm như vậy.
sudo
Trên dòng lệnh, tôi thường sử dụng sudo
để chạy một lệnh như root
:
sudo command...
Điều này sẽ nhắc tôi nhập mật khẩu của tôi . (Không phải root
mật khẩu; root
không có.)
- Bởi vì tôi là quản trị viên, tôi có thể thực hiện các hành động như
root
. Trong cấu hình mặc định, tôi phải nhập mật khẩu của mình để làm điều này.
- Người dùng không phải là quản trị viên có thể thực hiện các hành động như
root
, ngay cả bằng cách nhập mật khẩu của họ. sudo
các lệnh sẽ thất bại nếu người dùng chạy chúng không phải là quản trị viên.
Bởi vì quản trị viên là những người dùng hoàn toàn bình thường ngoại trừ khả năng thực hiện các hành động như root
, việc chạy một lệnh yêu cầu root
đặc quyền vẫn sẽ thất bại, ngoại trừ khi lệnh được chạy nhưroot
.
Ảnh chụp màn hình minh họa nhu cầu sử dụng sudo
để thực hiện các nhiệm vụ hành chính. (Dựa trên "Sandwich" của Randall Munroe .)
sudo, đồ họa
Các chương trình đồ họa có thể chạy như root
thông qua các mặt trận đồ họa chosudo
, chẳng hạn như gksu
/gksudo
và kdesudo
. Ví dụ, để chạy GParted như root
tôi có thể chạy gksudo gparted
. Sau đó, tôi sẽ được nhắc đồ họa cho mật khẩu của tôi.
Vì tôi được nhắc về mặt đồ họa, không cần phải có thiết bị đầu cuối. Đây là một trong những cách các công cụ quản trị được chạy như root
.
Bộ công cụ
Polkit (từng được gọi là PolicyKit) là một cách khác để quản trị viên thực hiện mọi việc như root
. Một chương trình truy cập một dịch vụ thực hiện hành động. Đôi khi, hành động đang chạy toàn bộ chương trình; đôi khi hành động bị hạn chế hơn.
Ngày nay, nhiều tiện ích quản trị hệ thống đồ họa được thiết lập để sử dụng polkit theo mặc định, thay vì sử dụng sudo
.
Một ví dụ về tiện ích như vậy là Trung tâm phần mềm. Nó tận dụng tối đa lợi thế của polkit, yêu cầu người dùng chỉ nhập mật khẩu khi họ muốn làm một cái gì đó yêu cầu root
đặc quyền. (Điều này cũng có thể với sudo
xác thực dựa trên, nhưng khó hơn và xấu hơn để thực hiện.)
Trong Trung tâm phần mềm, tôi có thể tìm và đọc về một ứng dụng; sau đó tôi hỏi mật khẩu khi tôi muốn cài đặt nó.
Polkit khác nhau như thế nào
Bất kỳ chương trình đồ họa có thể được chạy như root
với gksudo
và các mặt trận đồ họa khác sudo
. (Chương trình có thể không hoạt động tốt, tùy thuộc vào việc nó có được thiết kế để sử dụng hay không root
. Nhưng lệnh để khởi động chương trình sẽ được thực thi như root
.)
Mặc dù polkit hiện nay phổ biến hơn sudo
GUI trước vì cách các ứng dụng trên Ubuntu thực hiện các hành động như root
đằng sau hậu trường, polki sẽ chỉ chạy một ứng dụng đồ họa như root
thể có một tệp cấu hình cho phép nó và cho biết những hành động nào có thể được thực hiện .
Polkit, phi đồ họa
pkexec
là lệnh được sử dụng để chạy một chương trình với polkit.
Giống như sudo
, pkexec
có thể chạy các lệnh phi đồ họa. (Và nó không yêu cầu tệp cấu hình xác định khả năng của lệnh - nó chỉ đơn giản chạy lệnh như root
.)
pkexec command...
pkexec
nhắc nhở về mật khẩu bằng đồ họa, ngay cả khi nó được chạy từ Terminal (đây là một trong những cách hành vi của nó tương tự như gksudo
chạy thẳng sudo
).
(Nếu không có GUI - ví dụ: nếu bạn đã đăng nhập từ bảng điều khiển ảo hoặc phiên SSH chỉ có văn bản hoặc GUI không hoạt động đúng - thì pkexec
sẽ xuống cấp một cách duyên dáng và nhắc mật khẩu của bạn trên dòng lệnh .)
Khi xác thực được thực hiện thành công, lệnh sẽ chạy trong thiết bị đầu cuối.
Chạy các lệnh như những người dùng khác bên cạnh root
root
là đặc biệt bởi vì nó được làm bất cứ điều gì có thể được thực hiện. Nhưng đó là tài khoản người dùng giống như bất kỳ tài khoản nào và cách chạy các lệnh như root
với sudo
(trực tiếp hoặc với giao diện đồ họa) hoặc polkit có thể được sửa đổi một chút để chạy lệnh như bất kỳ người dùng nào khác:
sudo -u username command...
gksudo -u username command...
pkexec --user username command...
Gì? Bạn chỉ cần gõ sudo
đầu tiên? Bảo mật đó thế nào?!
Chạy các lệnh với sudo
là giống như gọi sự không tương xứng của giáo hoàng .
Khi bạn thực hiện một lệnh vớisudo
[gọi bất khả xâm phạm của giáo hoàng] , Ubuntu [Công giáo] cố gắng hết sức để đảm bảo bạn thực sự là bạn [thực sự là Giáo hoàng].
Vâng, tôi biết tính không sai lầm của giáo hoàng (ngay cả khi quy phạm) là tuyên bố; song song là không hoàn hảo.
Cố gắng làm một cái gì đó như root
với sudo
(hoặc polkit) là một vấn đề lớn - Ubuntu sẽ không chỉ để điều đó trôi qua như tất cả những lần khác bạn chạy một chương trình.
Bạn được nhắc nhập mật khẩu của bạn. (Sau đó, bạn đã làm như vậy được ghi nhớ trong một thời gian ngắn, vì vậy bạn không phải liên tục nhập mật khẩu khi quản trị hệ thống của mình.)
Bên cạnh việc nhắc nhở bạn cẩn thận , điều này bảo vệ chống lại hai tình huống:
- Ai đó sử dụng máy tính của bạn (hoặc thiết bị di động), có thể dưới chiêu bài kiểm tra email của họ hoặc một số mục đích vô hại tương tự. Ở đây, họ vẫn có thể gây hại cho họ - ví dụ: họ có thể sửa đổi hoặc xóa tài liệu của bạn. Tuy nhiên, họ không thể quản trị hệ thống, vì họ không thể nhập mật khẩu của bạn.
- Các chương trình không được yêu cầu quản trị hệ thống không thể thực hiện được, trừ khi bạn nhập mật khẩu. Ví dụ: nếu trình duyệt web của bạn bị xâm phạm bởi lỗi bảo mật và chạy mã độc, nó vẫn không thể thực hiện các tác vụ quản trị. Nó không thể tạo và xóa người dùng, sửa đổi các chương trình được cài đặt dưới dạng
root
(bao gồm mọi thứ được cài đặt bởi trình quản lý gói, chẳng hạn như LibreOffice) hoặc thay đổi hệ thống ở mức sâu.
Tôi đã nghe nói về su
. Cái gì vậy Tôi có thể sử dụng nó?
su
xác thực như một người dùng khác và chạy một lệnh (hoặc bắt đầu một vỏ tương tác). Có thể giới hạn người được phép sử dụng su
, nhưng su
xác thực bằng mật khẩu của tài khoản đích , không phải mật khẩu của người dùng đang chạy.
Ví dụ, chạy như tên người dùng , giống như .su username -c 'command...'
command...
sudo -u username command...
Nhưng khi bạn chạy một lệnh như username
với sudo
, bạn nhập mật khẩu của bạn . Khi bạn chạy một lệnh như username
với su
, bạn nhập username
mật khẩu .
Vì su
thực hiện xác thực cho người dùng đích , với su
bạn chỉ có thể chạy các lệnh khi người dùng có tài khoản được bật .
Các root
tài khoản (giống như www-data
và nobody
) bị tắt theo mặc định. Không có mật khẩu sẽ hoạt động để đăng nhập như root
. Vì vậy, bạn không thể sử dụng su
để chạy các lệnh như root
.
Bạn có thể sử dụng su
để chạy các lệnh như một người dùng khác có thể đăng nhập (thường bao gồm tất cả các tài khoản người dùng trên hệ thống của bạn đại diện cho con người).
Khi đăng nhập với tư cách là khách, bạn hoàn toàn không thể sử dụng su
.
Kết hợp su
vàsudo
Một người không phải là quản trị viên thậm chí có thể sử dụng su
để chạy sudo
như một quản trị viên. (Mặc dù điều này cũng ổn, vì họ cần mật khẩu của quản trị viên để chạy các lệnh với tư cách quản trị viên.) Đó là, một người dùng hạn chế có thể sử dụng su
để chạy sudo
để chạy lệnh như root
. Điều này có thể trông giống như:
su username -c 'sudo command...'
(Chạy các chương trình đồ họa theo cách này đòi hỏi sự chăm sóc đặc biệt .)
Sẽ không phải su
là một cách an toàn hơn để chạy các lệnh như root
?
Chắc là không.
Điều gì xảy ra nếu người dùng không được phép hành động như root
vậy?
Biến họ thành người dùng hạn chế thay vì quản trị viên.
Điều gì nếu một chương trình chạy như một cố gắng quản trị để sudo
đến root
?
Trừ khi bạn đã cấu hình lại sudo
để cho nó thành công mà không cần mật khẩu, nó sẽ thất bại.
Không thể là một chương trình không nên chạy như root
cõng trên một sudo
lệnh gần đây , vì vậy không cần mật khẩu?
Điều này sẽ rất khó thành công. Ngày nay, hầu hết các hệ điều hành (bao gồm Ubuntu) đã được sudo
cấu hình theo mặc định để dấu thời gian của nó chỉ áp dụng trong một ngữ cảnh cụ thể.
Ví dụ: nếu tôi chạy sudo ...
trong một tab Terminal và xác thực thành công, sudo
trong một tab khác (hoặc được chạy bởi một chương trình GUI không liên quan hoặc tôi chạy từ bảng điều khiển ảo hoặc phiên SSH) sẽ vẫn nhắc mật khẩu. Ngay cả khi nó chạy ngay sau đó.
Không phải một chương trình đang chạy như người dùng X có quyền truy cập vào mật khẩu của người dùng X?
Không.
Nếu một chương trình độc hại có thể chạy như một quản trị viên, nó có thể "lắng nghe" những gì đang được nhập khi quản trị viên xác thực bằng sudo
hoặc polkit không?
Có khả năng, có. Nhưng sau đó nó có thể "lắng nghe" mật khẩu được nhập vào su
.
Nếu tôi nói với ai đó mật khẩu của tôi
Đừng nói với mọi người mật khẩu của bạn.
Điều gì sẽ xảy ra nếu ai đó phải biết mật khẩu của tôi để làm điều gì đó thay cho tôi, nhưng tôi không muốn để họ quản trị hệ thống?
Tốt nhất, họ nên có một tài khoản người dùng riêng cho phép họ làm những gì họ cần làm. Ví dụ: có thể chia sẻ tệp giữa các tài khoản, cho phép nhiều người dùng viết thư cho họ, trong khi vẫn từ chối quyền truy cập cho người dùng khác.
Tuy nhiên, trong trường hợp một người ít tin cậy hơn có thể được phép chia sẻ tài khoản của bạn, thì đó phải là một tài khoản người dùng hạn chế. Bạn có thể tạo một tài khoản riêng cho mục đích này (điều này có ý nghĩa - nếu đó là tài khoản dành cho bạn và người khác mà bạn muốn có các khả năng khác nhau, thì đó phải là một tài khoản khác).
Vì vậy, sẽ là điều an toàn nhất là để không cho phép cả hai sudo
và su
và làm cho mọi người đăng nhập như root
, cách thủ công?
Không, bởi vì có những nhược điểm nghiêm trọng liên quan đến việc cho phép mọi người đăng nhập như root
tất cả. Bất cứ khi nào có thể, nên thực hiện số lượng hành động nhỏ nhất có thể root
. Ngay cả hầu hết các hành vi liên quan trực tiếp đến việc quản trị một hệ thống (ví dụ: xem những gì người dùng được định cấu hình và đọc nhật ký) thường không yêu cầu root
đặc quyền.
Ngoài ra, cũng giống như khả năng một chương trình độc hại có thể xem ai đó những gì khi họ chạy sudo
hay su
, hoặc tạo ra một giả sudo
/ su
mật khẩu nhanh chóng, có khả năng một chương trình độc hại có thể tạo ra một màn hình đăng nhập giả danh, quá.
Điều gì làm cho một người dùng một quản trị viên?
Thành viên nhóm.
Trong Ubuntu 12.04 trở lên , quản trị viên là thành viên của nhóm được gọi sudo
.
Trong Ubuntu 11.10 trở về trước , quản trị viên là thành viên của nhóm được gọi admin
.
Khi hệ thống Ubuntu trước 12.04 được nâng cấp lên 12.04 trở lên, admin
nhóm sẽ được giữ khả năng tương thích ngược (và tiếp tục trao quyền quản trị cho người dùng trong đó), nhưng sudo
nhóm cũng được sử dụng.
Tài khoản người dùng hạn chế
Tôi có thể sử dụng tài khoản người dùng hạn chế thay vì tài khoản quản trị viên không?
Nếu bạn thích, chắc chắn. Tạo tài khoản người dùng hạn chế trong Cài đặt hệ thống > Tài khoản người dùng và đăng nhập với tư cách người dùng đó.
Tôi có thể biến tài khoản quản trị viên của mình thành tài khoản người dùng hạn chế không?
Có, chỉ cần loại bỏ nó khỏi sudo
và admin
các nhóm (xem ở trên).
Nhưng bạn nên đảm bảo có ít nhất một tài khoản quản trị viên khác, để bạn có thể quản trị hệ thống của mình. Nếu không có, thì bạn phải khởi động vào chế độ phục hồi hoặc CD trực tiếp và làm cho một số người dùng trở thành quản trị viên . (Điều này tương tự với việc đặt lại mật khẩu quản trị viên bị mất .)
Các công cụ đồ họa để quản trị người dùng và nhóm thường sẽ ngăn bạn tạo một hệ thống không có quản trị viên hoặc ít nhất là cảnh báo bạn. Các công cụ dòng lệnh thường sẽ không (tin tưởng rằng bạn biết bạn đang làm gì).