VIM: Hồi sudo vim bad_idea '?


20

Một người dùng irc trong #Vim đã khuyên tôi không nên sử dụng Sudo với Vim như:

sudo vim bad_idea

Khi tôi đang làm việc ở các vị trí như / var / www /, tôi không thể viết mà không có nó. Vì vậy, không sử dụng sudo trở thành một vấn đề. Tất nhiên, tôi có thể thực hiện các thay đổi ở các vị trí khác nhau, chẳng hạn như / tmp / và sau đó sao chép các thư mục vào / var / www. Tuy nhiên, tôi cảm thấy một cách dễ dàng hơn.

  1. Nếu bạn không "sudo Vim", tại sao?
  2. Nếu có cho câu hỏi thứ 1, làm thế nào để bạn tránh được vấn đề không sử dụng sudo?

Câu trả lời:


35

Tôi thuộc loại thứ nhất: sudo vim /var/www/html/some_filelà một ý tưởng tồi; nó cho phép thoát vỏ mà không đăng nhập. Thay vào đó, sử dụng sudoedit /var/www/html/some_file; Điều đó có tác dụng tương tự.


5
"Thoát vỏ không được đăng nhập" là gì? và tại sao không chỉ quan trọng trong / var / www?
hasen

6
vim có sức mạnh để chạy các lệnh khác trên một dòng lệnh. Tuy nhiên, vì vim đã được bắt đầu thông qua sudo và do đó đang chạy với quyền root, nên bất kỳ lệnh nào trong số đó sẽ chạy với quyền root. Các lệnh này được gọi là "thoát vỏ" và không được ghi lại theo cách gọi khác của sudo. Và nó không bị giới hạn chỉ / var / www; nó ở khắp mọi nơi mà tôi sẽ sử dụng nó. Tôi thậm chí đã đặt bí danh "sudo vi" thành "sudoedit" trong tệp bashrc của mình.
Kevin M

Tôi thấy những gì bạn đang nhận được và muốn đồng ý nhưng làm rõ. Chúng tôi không biết liệu các hoạt động root và sudo bình thường của anh ấy có được ghi lại hay không. "sudo vim" cho phép chạy một subshell với quyền root - điều đó là chính xác; trong lớp vỏ đó, "sudo" sẽ không kiểm soát những gì root có thể và không thể làm.
pbr

3
Kevin, làm thế nào bạn quản lý để bí danh "sudo vi" thành "sudoedit"? Từ sổ tay bash ... "Các ký tự /, $,` và = và bất kỳ ký tự đại diện hoặc ký tự trích dẫn nào được liệt kê ở trên có thể không xuất hiện trong tên bí danh. " ... không gian là một trong những siêu nhân vật mà nó đang nói đến.
pbr

9
OK, vì vậy, đây không phải là bí danh, nhưng nó có tác dụng tương tự: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || lệnh sudo "$ @"; } '
Kevin M

10

Tham khảo: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% được thay thế bằng tên tệp hiện tại, do đó bạn có thể sử dụng:

: w! sudo tee%


Nếu bạn định sử dụng tee, tôi sẽ đề xuất ': w! Sudo%> / dev / null' để bạn không thấy toàn bộ tập tin lặp lại với bạn. Tôi thường sử dụng ': w! Dd của =%' thay vì việc nhập nhanh hơn và đạt được điều tương tự. Tất nhiên, đây chỉ là khi tôi quên sử dụng sudoedit / sudo -e.
jamessan

7

vim cho phép người dùng thực thi các lệnh shell tùy ý, do đó nhiều quản trị viên hệ thống không cho phép vim được sử dụng với sudo.

rvim được bao gồm với vim. Nó là một vim bị hạn chế, không cho phép các lệnh shell. (Hoặc cho phép bạn tạm dừng vim, vì những lý do tương tự.)

Cho dù bạn cần phải đi đến những thái cực trên hộp của riêng bạn là tranh cãi.


1
+1. Hoàn toàn đồng ý. sudo vimsau đó nhập :!bashvà bạn có một vỏ là root - chính xác là tại sao rvimtồn tại
dbr

3
Trên thực tế nếu bạn có thể sudo vim, bạn có thể sudo bashhoặc có thể sudo su -?
dlamblin

@diamblin Đặc quyền có thể được tập hợp với chi tiết tốt hơn thế, vì vậy không nhất thiết phải như vậy. Đó là lý do tại sao rvim là cần thiết. "sudo vim" giống như "sudo su -" cho tất cả ý định và mục đích. Trên hộp bitty Debian, nơi một người dùng là quản trị viên hệ thống, tất cả đều mang tính học thuật.
Richard Hoskins

Làm thế nào để Ubuntu xử lý vấn đề này? Trên CentOS vira mắt vimnhưng khi root vikhởi chạy vi. Trên Ubuntu vimđược sử dụng trong cả hai trường hợp và sudo vicũng khởi chạy vim...
cwd

6

Khi chỉnh sửa các tệp cấu hình trên toàn hệ thống, điều đó hoàn toàn ổn --- chỉ cần luôn nhớ bạn đã root và do đó có tất cả sức mạnh và bỏ các đặc quyền đó ngay khi bạn không cần chúng nữa.

Trong trường hợp đặc biệt /var/www/, tức là các trang máy chủ web, bạn có thể muốn nghĩ về việc thay đổi một số quyền sở hữu / nhóm / quyền --- nhưng nếu và phần lớn phụ thuộc vào thiết lập cụ thể của bạn (một người dùng / nhiều người dùng, máy chủ web thực / chỉ localhost, động / tĩnh, v.v.)


6
+1 thực sự - đây là cách tốt nhất để xử lý các trang máy chủ web. Hãy chắc chắn rằng bạn có quyền truy cập vào chúng thay vì nâng cao các đặc quyền của bạn.
bedwyr

1
-1 không có lý do để chạy vim với các đặc quyền nâng cao khi sudoedit sẽ làm công việc tương tự.
sml

4

Một câu hỏi như thế này khiến tôi đập trán. Tôi ở phía bên kia của bảo mật, "bảo mật không nên can thiệp vào trải nghiệm người dùng, trừ khi nó được mong đợi hoặc được yêu cầu để ngăn chặn người bình thường thực hiện hoạt động độc hại."

Ngăn chặn sudo sử dụng vim chỉ là một hỗ trợ ban nhạc. Như đã nêu trước đó, ai đó chỉ có thể sử dụng:

sudo su -

Hoặc là

sudo /bin/bash

Hoặc là

sudo nano file

Hoặc là

sudo my_exectuable_text_editor file

ect

Nếu bạn thực sự lo lắng về việc ai đó làm điều gì đó độc hại trên hộp, đừng cung cấp cho họ quyền sudo (hoặc mật khẩu gốc rõ ràng), thời gian. Không có viên đạn nào để ngăn chặn hoạt động độc hại bằng sudo và bạn sẽ chỉ khiến bản thân mình phát điên bằng cách "áp dụng" tất cả các "cách khắc phục" để đảm bảo một người không thể làm gì độc hại.

Có người đề cập đến việc thay đổi quyền sở hữu / nhóm. Đây là một vấn đề khó khăn vì nếu máy chủ web được chạy như một người dùng khác và bạn thay đổi quyền trên tệp, thì đột nhiên trang web của bạn không hoạt động. Vâng, rõ ràng là sẽ không giúp bạn. Bạn có thể tự thêm mình vào nhóm mà máy chủ web chạy, tuy nhiên, nếu nhóm không có quyền ghi vào các tệp, bạn sẽ cần thực hiện chmod -R g + w * (hoặc chmod từng tệp riêng lẻ) có thể không những gì bạn muốn và có thể là một rắc rối nếu bạn phải chmod mỗi tập tin.

Một số người thậm chí còn đề nghị sử dụng rvim. Chắc chắn, người ta chỉ có thể thêm một dòng trong / etc / sudoers để chỉ cho phép một số người dùng nhất định sudo rvim, tuy nhiên, sẽ hợp lý nếu bạn phải đi theo lộ trình đó, tốt hơn là nên triển khai trình quản lý tệp dựa trên web. Theo cách này, nó đang chạy khi người dùng máy chủ web đang chạy, do đó không có vấn đề về quyền của tệp và bạn vẫn có thể kiểm soát chi tiết xem ai chỉnh sửa tệp nào.

Dù sao hai xu của tôi.


2

Chạy sudo vimsẽ không thay đổi $HOMEthư mục, vì vậy bạn sẽ chạy Vim với quyền root, nhưng $HOMEvẫn trỏ đến người dùng bình thường của bạn.

Nếu đây là lần đầu tiên bạn chạy Vim, có thể xảy ra rằng ~/.viminfotệp được tạo trong thư mục người dùng thông thường của bạn, nhưng có quyền root.


1
Phụ thuộc vào sudo. Trên máy tính xách tay của tôi sudo vim -c '!echo $HOME' -c qkhông cung cấp thư mục nhà của tôi, nhưng trên máy chủ của tôi, nó cung cấp /root. Tôi có thể phải xem lý do tại sao, có thể là do OS X của một người trong khi Gentoo của người kia, hoặc có thể là một cái gì đó để làm với cách /etc/sudoersthiết lập.
Nemo157

aha bạn đã đúng - tôi đã kết thúc ở đây tự hỏi tại sao .viminfochỉ có thể truy cập root của tôi .
Ayrat

1

NẾU ĐÂY LÀ MÁY TÍNH RIÊNG CỦA BẠN ... Tôi không hiểu lý do tại sao bạn không thể sử dụng 'sudo vim', ngoại trừ trường hợp cạnh mà Denilson lưu ý - rằng nó có thể tạo ~ / .viminfo của bạn do root sở hữu.

Nếu không - nếu quản trị viên hệ thống hạn chế những gì bạn có thể và không thể làm - theo "man sudo": "trên hầu hết các hệ thống, có thể ngăn chặn thoát vỏ với chức năng noexec của sudo. Xem hướng dẫn sử dụng sudoers (5). "

Vì vậy, trong trường hợp này, nếu sysadmin của bạn quan tâm đến tiềm năng của bạn khi chạy subshells với quyền root từ bên trong vim, họ có thể sử dụng khả năng noexec. Nhưng ... trở lại trường hợp ban đầu - nếu đây là máy tính CỦA BẠN, tôi nghĩ bạn khá an toàn khi chạy 'sudo vim'.


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.