Vim có an toàn khi sử dụng kết hợp với sudo không?


25

Không nên sử dụng sudovới một ứng dụng đồ họa như gedit, như được mô tả tại liên kết này . Theo đó, tôi đã có xu hướng sử dụng vimvới sudo.

Gần đây tôi nhận thấy rằng tôi ~/.viminfođã được sở hữu bởi root trên bản cài đặt khá mới của Ubuntu 16.04 (Xenial Xerus), vì vậy tôi đã tự hỏi liệu ngay cả Vim có được coi là đồ họa hay không nếu có vấn đề nào khác khi gọi sudo vim. Sau khi thay đổi quyền sở hữu cho chính tôi thông qua:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

và sau đó chạy sudo vimtôi không thể ~/.viminfo sở hữu root. Tuy nhiên, tôi chắc chắn rằng gần đây nó đã được sở hữu bởi root.

Là nó không thích hợp để gọi sudo vim?



1
Bạn cũng có thể sử dụng vim mà không cần sudo và khi nói đến việc lưu tệp, bạn có thể sử dụng:w !sudo tee %
ChatterOne

Câu trả lời:


22

Vâng, nó an toàn.

Vấn đề sudo geditlà bởi vì các ứng dụng GUI sử dụng một số tệp nhất định, chẳng hạn như ~/.cache/dconfvà sau khi nâng cao gedit, tệp đó trở thành sở hữu gốc. Chà, tập tin cụ thể đó chứa các cài đặt dành riêng cho người dùng cho các ứng dụng GUI, bao gồm cả máy tính để bàn, vì vậy nếu hệ thống không thể đọc các cài đặt đó - thật tệ. IIRC người dùng không thể khởi động một máy tính để bàn cụ thể. Dữ liệu tập tin gần đây của người dùng recently-used.xbelcũng bị ảnh hưởng.

Mặt khác, Vim không có vấn đề đó. Nó không sử dụng cơ sở dữ liệu liên quan đến GUI và không đưa bất cứ thứ gì vào recently-used.xbel. Nó được tạo ra cho mục đích chỉ dành cho giao diện điều khiển, mặc dù gVim cũng tồn tại. Trên thực tế, trên một số hệ thống, Vim là lựa chọn biên tập duy nhất của bạn. Vì vậy, nó an toàn hơn gedit bởi không gây ra vấn đề tương tự. Bạn vẫn đang chỉnh sửa bằng root trong cả hai trường hợp, vì vậy bạn có thể gây ra sự cố với chỉnh sửa không đúng.

Theo bài đăng trên blog này :

Lần đầu tiên bạn sử dụng vim, tệp ~/.viminfođược tạo và nếu bạn sử dụng sudo vimlần đầu tiên bạn sử dụng vim sau khi cài đặt nó trên một hệ thống mới, các quyền trên ~/.viminfosẽ có chủ sở hữu được đặt thành root thay vì người dùng mặc định.

Mặc dù tác giả chỉ ra rằng nó có thể dẫn đến các vấn đề, nhưng không có gì phức tạp - chỉ chownlà tập tin trở lại với chính bạn.

Xem thêm:


6
Lưu ý rằng vim không an toàn trên hệ thống nhiều người dùng nơi bạn đang cố gắng giới hạn quyền quản trị của người dùng khác. Người dùng có thể sử dụng sudo vimđể có được một bản sao của vim đang chạy với quyền root, sau đó :!/bin/shđể lấy shell root.
Đánh dấu

3
@Mark và điều gì ngăn người dùng chỉ làm sudo /bin/sh? Thực tế mà nói, nếu người dùng đã có quyền truy cập root thì họ không cần phải sử dụng các thủ thuật phức tạp.
Sergiy Kolodyazhnyy

7
Các /etc/sudoerstập tin. Bạn không cần phải làm %wheel ALL=(ALL) ALL- sudocấu hình cho phép nhiều sắc thái hơn thế.
Đánh dấu

1
@Mark OK, điểm tốt ở đó - không phải mọi hệ thống đều có cùng cài đặt.
Sergiy Kolodyazhnyy

Uhm ... Liệu quyền có thay đổi ngay cả khi tệp tồn tại không? Giả sử tôi hack vào tài khoản người dùng không phải quản trị viên, nhưng tôi không biết mật khẩu của nó (có thể tôi đã quản lý để mở shell). Điều này có nghĩa rằng tôi có thể sao chép /bin/bashđến ~/.viminfo, đặt một setuid vào nó và chờ đợi cho người sử dụng để chạy sudo vimđã nó chowned để gốc?
ChatterOne

15

Cũng có thể sử dụng sudoeditđể đạt được điều này; nó mở một bản sao tạm thời của tệp trong trình soạn thảo của bạn, với trình soạn thảo của bạn đang chạy như bạn. Từ trang người đàn ông :

  1. Các bản sao tạm thời được tạo từ các tệp sẽ được chỉnh sửa với chủ sở hữu được đặt thành người dùng gọi.

  2. Trình chỉnh sửa được chỉ định bởi chính sách được chạy để chỉnh sửa các tệp tạm thời. Chính sách sudoers sử dụng SUDO_EDITOR, VISUALEDITORcác biến môi trường (theo thứ tự đó). Nếu không có SUDO_EDITOR, VISUALhoặc EDITORđược thiết lập, chương trình đầu tiên được liệt kê trong trình soạn thảo sudoers(5)tùy chọn được sử dụng.

  3. Nếu chúng đã được sửa đổi, các tệp tạm thời được sao chép trở lại vị trí ban đầu của chúng và các phiên bản tạm thời sẽ bị xóa.

Điều này hoạt động tốt với vim (đó là những gì tôi thường làm) và tôi tưởng tượng nó cũng sẽ cho phép bạn sử dụng gedit. Có một số hạn chế về bảo mật .


4
Điều này sẽ tốt hơn nhiều nếu bạn muốn sử dụng cấu hình vim của riêng bạn thay vì root.
NieDzejkob

2
Điều này cũng an toàn hơn nếu bạn không muốn chạy mã plugin ngẫu nhiên dưới quyền root (tuy nhiên, các plugin đang chạy vì bạn cũng có thể gây ra nhiều thiệt hại nếu chúng độc hại, vì vậy đừng sử dụng các plugin mà bạn không tin tưởng vào địa điểm đầu tiên).
Kevin

2

Liên kết rất cũ (2013). Nó khuyến nghị sử dụng gksudohoặc gksucho các ứng dụng đồ họa nhưng cả hai đều trở nên lỗi thời. Sau đó, câu trả lời được chấp nhận cũng cho thấy sudo -Hmặc dù.

Sự đồng thuận chung trong cộng đồng Ask Ubuntu gần đây là sử dụng:

sudo -H gedit /path/to/filename

Vấn đề duy nhất vẫn là sudokhông có hồ sơ cho cài đặt tab, tiện ích mở rộng, gói từ, tên phông chữ, kích thước phông chữ, v.v. Bạn có thể thừa hưởng những điều này từ hồ sơ người dùng của mình mặc dù với tập lệnh bao bọc như thế này: Làm cách nào tôi có thể đồng bộ hóa thư mục gốc của mình gedit với sở thích của người dùng của tôi?


2

Có, nó là an toàn để sử dụng sudo vim. Những vấn đề tôi gặp phải là

  • Phải thoát khỏi tập tin và mở sudo vimlại để có thể chỉnh sửa.

  • Có gốc vimrclà mặc định, không phải là công cụ hữu ích tùy chỉnh của tôi.

Đây là một chức năng bạn có thể đưa vào bashrcđể cho phép vim tự động sudo nếu bạn không thể chỉnh sửa tệp bình thường.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

Trên Ubuntu sudotheo mặc định duy trì $HOMEbiến môi trường, điều đó có nghĩa là sudo vim sẽ sử dụng .vimrc tùy chỉnh của bạn và điều đó cũng có nghĩa là điều đó sudo vimsẽ thay đổi quyền sở hữu của ~/.viminforoot: root và gây cho bạn một số bất tiện.
Marius Gedminas

Câu trả lời được chấp nhận không đồng ý với bạn về viminfo.
jeremysprofile

1

Sử dụng vi là root. Sẽ có lúc bạn cần chỉnh sửa một tệp yêu cầu quyền sudo hoặc root, như thay đổi tệp giao diện mạng hoặc có thể chỉnh sửa tệp cấu hình sshd của bạn. Sử dụng root cho công cụ đồ họa là xấu vì mọi người sẽ kết nối với IRC hoặc duyệt web dưới dạng root. Nếu họ bị nhiễm virus trong khi làm như vậy, nó sẽ có quyền truy cập root đầy đủ.


2
Có ít nhất một ngoại lệ cụ thể để sử dụng vi làm root. Không bao giờ nên chỉnh sửa tệp kiểm soát đường dẫn sudo (/ etc / sudoers bằng vi. Đối với tập tin đó, nên sử dụng lệnh visudo. Bạn thậm chí không chỉ định tập tin nào đang được chỉnh sửa, đó chỉ là trường hợp đặc biệt.
dùng628388

1

Một điều chưa được đề cập trong các câu trả lời khác là việc chạy vim với root sẽ cung cấp quyền riêng tư gốc cho bất kỳ plugin nào bạn đã cài đặt. Vì vậy, câu hỏi liệu có an toàn khi chạy bằng root hay không phụ thuộc vào việc bạn có tin tưởng các nhà phát triển plugin (hoặc người đóng góp cho dự án của họ) để không sở hữu hệ thống của bạn vào cốt lõi hay không.

Vim thường được hiệu chỉnh bởi các nhà bảo trì gói trong tất cả các bản phân phối linux, vì vậy thật dễ dàng để tin tưởng. Tuy nhiên, các plugin vim thường được cài đặt trực tiếp từ các repos GitHub và thường có ít người dùng kiểm tra hơn (có thể là không). Nói cách khác, không có quá trình kiểm tra với họ.

Nếu bạn không tải plugin khi đang root, thì tôi đoán việc chạy với quyền root phụ thuộc vào việc bạn có tin tưởng các nhà phát triển vim hay không. Tuy nhiên, bạn có thể bỏ qua việc phải tin tưởng họ, bằng cách sử dụng sudoedit được tạo bởi cùng một nhà phát triển của sudo, những người mà chúng tôi đã tin tưởng với quyền truy cập root. GKFX và NieDzejkob đã đề cập tại sao sudoedit là lý tưởng. Ngoài điểm bạn không cần phải tin tưởng quyền truy cập root cho bất kỳ ai khác ngoài các nhà phát triển của sudo, bạn có thể tải tất cả các plugin bạn đã tin cậy bằng tài khoản người dùng thông thường của mình.


Cuộc thảo luận về việc không tin tưởng các nhà phát triển khác nhau có vẻ hơi không đầy đủ; nếu bạn sudoedit /etc/apt/sources.listđã cài đặt một plugin bị xâm nhập, nó có thể chèn một kho lưu trữ độc hại và có quyền truy cập root vào lần tới khi bạn chạy các bản cập nhật. Tôi chắc chắn có một danh sách dài các tệp được bảo vệ gốc mà áp dụng một cái gì đó tương tự. Và tất nhiên, không phải mọi virus đều cần root; người ta có thể lấy chi tiết ngân hàng của bạn mà không cần nhiều hơn một phần mở rộng trình duyệt.
GKFX
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.