Tại sao người dùng không bao giờ nên sử dụng sudo bình thường để bắt đầu các ứng dụng đồ họa?


114

Tôi đã đọc tài liệu "RootSudo" của comunity và quan tâm đến dòng này:

Bạn không bao giờ nên sử dụng sudo bình thường để bắt đầu các ứng dụng đồ họa như Root.

Tại sao? Sự khác biệt là gì? Vui lòng cung cấp một lời giải thích đơn giản, vì tôi chỉ là một người dùng máy tính để bàn bình thường.



Trên thực tế, gần đây tôi đã có một thời gian khó khăn để cài đặt MATLAB thành / usr / local. Điều này đòi hỏi quyền root để ghi vào / usr / local, nhưng việc chạy trình cài đặt bằng gksu bằng cách nào đó khiến cho không thể chạy chương trình đã cài đặt dưới dạng không root. Chạy trình cài đặt bằng sudo khiến mọi thứ hoạt động tốt.
Bib-mất

Câu trả lời:


129

Các ứng dụng đồ họa thường lưu trữ các cài đặt và dữ liệu cụ thể của người dùng khác trong các tệp cấu hình được ghi trong thư mục nhà của người dùng . Các ứng dụng cơ chế chính sử dụng để xác định những gì chúng nên sử dụng làm thư mục nhà của người dùng là HOME biến môi trường . (Bạn có thể tự kiểm tra nó với echo $HOME).

Giả sử bạn đang chạy gedit(một trình soạn thảo văn bản đồ họa) như root. Nếu bạn chạy sudo gedit, HOMEsẽ tiếp tục chỉ về phía bạn thư mục chính, mặc dù chương trình đang chạy nhưroot . Do đó, geditsẽ ghi các tập tin cấu hình nhưroot vào thư mục chính của bạn. Đây đôi khi sẽ cho kết quả trong các tập tin cấu hình được sở hữu bởiroot và do đó không thể tiếp cận với bạn (khi sau đó bạn chạy chương trình như chính mình chứ không phải là root). Điều này chủ yếu xảy ra khi ứng dụng phải tạo một tệp cấu hình mới. Các tệp mới được tạo, theo mặc định, được sở hữu bởi người dùng tạo chúng (người trong trường hợp này là root, không phải bạn).

Đó là lý do chính tại sao bạn nên chạy các ứng dụng đồ họa với giao diện đồ họa sudothay vì thẳng sudo. Trong Ubuntu và hầu hết các dẫn xuất của nó (bao gồm Xubfox và Lubfox), giao diện đồ họa tiêu chuẩn là gksu/gksudo . Trong Kubfox nó là kdesudo. (Nó phụ thuộc vào môi trường máy tính để bàn đang được sử dụng.)

Nếu bạn muốn sử dụng sudotrực tiếp để chạy một ứng dụng đồ họa như thế nào gedit, bạn có thể chạy:

sudo -H gedit

Các -Hlá cờ làm sudobộ HOMEđể trỏ đến root's thư mục nhà (đó là /root).

Điều đó vẫn không tự động xử lý quyền sở hữu .Xauthoritybằng cách sao chép nó vào thư mục tạm thời (đây là điều khác mà các mặt trận đồ họa sudochăm sóc cho bạn). Nhưng trong trường hợp không thường xuyên .Xauthoritykhông thể truy cập được, bạn sẽ gặp lỗi khi nói và sau đó bạn có thể khắc phục sự cố bằng cách xóa nó ( sudo rm ~/.Xauthority), vì nó tự động được tạo lại. Do đó, bảo vệ .Xauthorityquyền sở hữu và quyền của bạn ít quan trọng hơn bảo vệ quyền sở hữu và quyền của các tệp cấu hình.

Ngược lại với một rootthuộc sở hữu .Xauthority, khi các file cấu hình trở thành sở hữu như root, nó không phải lúc nào cũng như rõ ràng vấn đề là gì (vì các chương trình đồ họa thường sẽ chạy, nhưng không làm việc rất tốt, và đầu ra bất kỳ lỗi nào hữu ích cho giao diện điều khiển). Và đôi khi, đó là một rắc rối lớn hơn để khắc phục, đặc biệt nếu bạn đang ở trong tình huống bạn muốn một hoặc nhiều tệp trong thư mục nhà của mình thuộc sở hữu của một người khác ngoài bạn (vì sau đó bạn không thể khắc phục đơn giản bằng cách đệ quy chowntất cả các tệp của mình trở lại với chính mình).

Do đó, sudo(ít nhất là không -H) không nên được sử dụng để chạy ứng dụng đồ họa trừ khi bạn rất quen thuộc với hoạt động bên trong của ứng dụng và biết chắc chắn rằng nó không bao giờ cố gắng ghi bất kỳ tệp cấu hình nào.


Tôi có thể trở thành chủ sở hữu của tất cả các tệp cấu hình (hoặc bất kỳ tệp nào) trong thư mục Trang chủ của mình không, nếu các tệp này đã được sở hữu bởi root?
Nur

@Nur Giả sử không có tệp nào trong thư mục chính của bạn mà bạn muốn sở hữu bởi bất kỳ người dùng nào khác hoặc bạn muốn có bất kỳ thành viên nhóm nào khác (để chia sẻ) , bạn có thể chạy: sudo chmod -R $USER:$USER ~Thật không may, những tiêu chí đó không luôn được áp dụng. Nếu bạn có bất kỳ tệp nào cần giữ nguyên chủ nhóm, bạn có thể chạy sudo chmod -R $USER ~. Điều này thường là đủ. (Nếu bạn có các tập tin cần phải được sở hữu bởi một người dùng khác trong thư mục nhà của bạn, thậm chí đó sẽ là một vấn đề.)
Eliah Kagan

1
@EliahKagan Có chmodthực sự làm điều đó? Tôi luôn nghĩ rằng nó đã chownlàm điều đó. chmodkhông bao giờ làm điều đó cho tôi.
Wyatt8740

2
@ Wyatt8740 Tôi chắc chắn nên viết chownthay vì chmodtrong các bình luận của tôi ở trên. Xin lỗi về điều đó - và cảm ơn vì đã chỉ ra điều này!
Eliah Kagan

2
@TheQuark Trong sudo -H echo $HOME, shell của bạn - chạy như bạn, không phải là gốc - thực hiện việc mở rộng tham số trên $HOME, lấy con đường của bạn thư mục home, sau đó đi đến sudo, mà lần lượt vượt qua các giá trị đã được mở rộng để echotrong đó in nó. sudo -H printenv HOME, sudo -H bash -c 'echo $HOME'sudo -H sh -c 'echo $HOME'tất cả in /root. Điều này tương tự về mặt khái niệm - mặc dù theo một cơ chế khác - với cách x=a echo "$x"không in a(trừ khi xđã có giá trị a).
Eliah Kagan

25

Chỉ cần đặt:

Điều này ngăn chặn các tập tin trong thư mục nhà của bạn trở thành sở hữu của root.

Đọc nó ở đây . Ngoài ra, có thể là một bản sao của "gksudo nautilus" và "sudo nautilus" là gì?


gksudo không còn được bao gồm trong các bản cài đặt Ubuntu và Debian. Xem Itsfoss.com/gksu-replocation-ubfox để biết chi tiết. askubuntu.com/a/1047413/197910 bây giờ là giải pháp tốt hơn.
K7AAY

5

Một thay thế cho gksu nautilusgksu geditlà sử dụng nautilus-admintiện ích bổ sung. Nó cho phép bạn duyệt các tập tin và thư mục với Nautilus và sau đó mở chúng dưới quyền root (Administrator).

Cài đặt là thẳng về phía trước:

sudo apt install nautilus-admin

Bây giờ khi bạn ở nautilus, bạn sẽ có thêm tùy chọn Chỉnh sửa với tư cách quản trị viên:

nautilus admin.gif


gedit vì root không cho phép ưu tiên

Khi bạn chạy geditbằng root, bạn không thể sử dụng các tùy chọn bạn đã thiết lập như một người dùng thông thường cho các điểm dừng tab, chuyển đổi các tab thành khoảng trắng, tên phông chữ, kích thước phông chữ, ngắt dòng, v.v.

Để giải quyết vấn này, tôi đã viết kịch bản sgeditđể thừa hưởng ưu đãi về sử dụng và áp dụng chúng vào thư mục gốc: Làm thế nào tôi có thể đồng bộ gedit gốc của tôi với sở thích của người dùng gedit của tôi?

  • Gọi bằng sgedit filename1 filename2 ...
  • Cài đặt gedit của người dùng cho các điểm dừng tab, phông chữ, ngắt dòng, v.v.
  • Nâng cao để sudo -Hbảo vệ quyền sở hữu tập tin trong khi có quyền hạn root.
  • Yêu cầu mật khẩu nếu cuối cùng sudođã hết thời gian.
  • Nhận cài đặt gedit của sudo
  • So sánh sự khác biệt giữa cài đặt người dùng và sudo gedit
  • Chỉ chạy cài đặt gs trên các khác biệt (giảm 174 lệnh đặt xuống hàng tá hoặc ít hơn. Lần tới, nó có thể chỉ chạy một hoặc hai thay đổi nhưng thường không thay đổi.
  • Gọi geditnhư một tác vụ nền sao cho dấu nhắc thiết bị đầu cuối xuất hiện lại ngay lập tứ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.