Sự khác biệt giữa gksudo và gksu là gì?


58

Có sự khác biệt nào giữa hành vi của gksu foogksudo fookhông?
Chúng có thể được sử dụng thay thế cho nhau?

Câu trả lời:


39

Cả hai tệp đều trỏ đến cùng một vị trí:

$ ls -l /usr/bin/gksudo 
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu

... gksudođược liên kết đến gksu. Nhưng điều này không có nghĩa là họ làm những điều tương tự, cách xa nó.

Các ứng dụng có thể phát hiện lệnh được sử dụng để chạy nó. Điều này thường là argv[0]trong các ngôn ngữ kiểu C hoặc $0trong các kịch bản shell kiểu Bourne. Ứng dụng có thể xem xét điều đó và trong trường hợp này, thực sự nó thay đổi cách thức hoạt động. Dấu hiệu đầu tiên của điều này là trong man gksutrang:

gksu  is  a  frontend  to  su  and gksudo is a frontend to sudo.

Nếu bạn tìm trong nguồn ( apt-get source gksu) cho run_mode, bạn sẽ thấy cách nó phát hiện ra điều này:

  { /* support gksu_sudo_run */
    gchar *myname = g_path_get_basename (argv[0]);
    if (!strcmp(myname, "gksudo"))
      run_mode = SUDO_MODE;
    g_free (myname);
  }

Bạn có thể ghi đè lên điều này bằng --su-mode/ -w--sudo-mode/ -Sđối số (để bạn có thể chạy các lệnh tương đương mà không cần gksudoliên kết tượng trưng ... Nhưng điều đó tùy thuộc vào bạn.

Nếu bạn muốn biết các "chế độ" này thực sự khác nhau như thế nào, chỉ có một chút thoát ra gksu. Bạn cần phải theo nó vào libgksu. Đây là thư viện thực sự kiểm tra các quyền trước khi bàn giao cho hệ thống.

Nếu không có chế độ nào được chỉ định (ví dụ: bạn gọi gksumà không có đối số) vào thời điểm nó đến libgksu, nó sẽ kiểm tra Gconf (như Stefano chỉ ra) và nếu nó vẫn không thể quyết định, nó sẽ mặc định ở suchế độ.


1
Để thêm vào nhận xét của Oli's; Mặc dù gksudo được liên kết với gksu, nhưng trong Ubuntu, theo mặc định, chúng tôi sẽ chỉ sử dụng gksudo vì chúng tôi đã bật / apps / gksu / sudo-mode. Vì vậy, trừ khi ai đó buộc gksu tùy chọn chế độ --su không được sử dụng.
Vish

5
@Oli: Tôi sẽ không ngay lập tức kết luận rằng không có sự khác biệt chỉ vì đó là một liên kết tượng trưng. Nhìn vào busybox, tùy thuộc vào tên của symlink, các hành động khác nhau được thực hiện. Trong trường hợp này, tôi không biết điều đó có đúng hay không, nhưng AFAIK thực sự là như vậy.
Lekensteyn

1
-1, rất sai lệch: phần mềm có thể hành xử khác nhau tùy thuộc vào tên được sử dụng để gọi chúng. Ví dụ bashbật chế độ nghiêm ngặt POSIX khi được gọi là sh. Và gksu cũng biết tên gọi.
MestreLion

Sử dụng internet trên điện thoại di động của tôi với màn hình quá nhỏ và ngón tay quá lớn, tôi phải vô tình bị hạ thấp. Tôi
ủng hộ

37

Trong Ubuntu (!), Không có sự khác biệt.

  • gksuthông thường sẽ đăng nhập người dùng root và chạy một ứng dụng trong phiên này. Tuy nhiên, trên Ubuntu, nó mặc định sử dụng "chế độ sudo", tương đương với việc chạy gksudo. Điều này là do trên Ubuntu, bạn không thể đăng nhập bằng root theo mặc định.

  • gksudolà đồ họa tương đương với sudo(và như Oli chỉ ra, chỉ là một liên kết tượng trưng cho gksu)

Từ mục gcsu của gksu:

văn bản thay thế

Hơn nữa, về sự khác biệt giữa sudo và gksudo:

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. Bạn nên sử dụng gksudo (kdesudo trên Kubfox) để chạy các chương trình như vậy. gksudo đặt HOME = ~ root và sao chép .Xmasterity vào thư mục tmp. Đ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. (AFAICT, đây là tất cả những gì đặc biệt về môi trường của quá trình bắt đầu với gksudo so với sudo).
 - (từ tài liệu cộng đồng thông qua Chris Wilson )


14

Tôi biết rằng đây là một chủ đề cũ, nhưng tôi đã được yêu cầu nói với bạn về một sự khác biệt tinh tế nhưng thiết yếu giữa gksugksudo.

Mặc dù tôi đã nhìn lâu và chăm chỉ, tôi không thể tìm thấy một sự khác biệt được ghi nhận ở bất cứ đâu, và nó vẫn tồn tại. Tôi cũng chưa tìm ra lý do tại sao có sự khác biệt. Tôi thấy điều này là một cách khó khăn khi tôi vô tình xóa một số tệp hệ thống chính xác vì sự khác biệt này (được thảo luận trong một chủ đề trong Diễn đàn Ubuntu ) - Tôi đã sử dụng gksu, nhưng kể từ đó tôi đã chắc chắn luôn sử dụng gksudo.

Để tóm tắt, hãy thử điều này.

  1. Tạo ba tệp trong một số thư mục:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Chạy sáu lệnh sau. Năm đầu tiên cho kết quả tương tự (dự kiến) (tức là chỉ abc.tmp) trong khi thứ sáu bao gồm một tệp bổ sung ( abctmp) mà nó không nên.

    find . -regextype posix-egrep -regex '.*\.tmp' -print
    sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu --sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    

Hãy tưởng tượng những vấn đề khi bạn thay thế -printvới -deletetrong findlệnh (đó là chính xác những gì đã xảy ra với tôi, gây ra một số tập tin hệ thống bị xóa).

Vì vậy, xin vui lòng sử dụng gksudothay vì gksu.


Chỉ cần thử điều này trên 12.04LTS. Đừng hiểu đầy đủ tại sao nhưng có một sự khác biệt. Mã nguồn cho gksu cho thấy gksudotương đương với việc gõgksu --sudo-mode
Warren Hill

@WarrenHill - vâng, trên lý thuyết! Nhưng không phải trong thực tế. Tôi không biết tại sao.
Paddy Landau

2
Thú vị, và được xác minh vào ngày 13.04. Chắc chắn trông giống như một lỗi xử lý báo giá.
l0b0

4
Nộp một lỗi .
l0b0

1
@ l0b0 - cảm ơn, tôi đã thêm phiếu bầu của mình vào lỗi.
Paddy Landau
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.