VIM: “sudo vim bad_idea”?


20

#Vim'deki bir irc kullanıcısı, Sudo'yu Vim gibi kullanmamamı istedi:

sudo vim bad_idea

/ Var / www / gibi konumlarda bir şeyler yaparken, onsuz yazamam. Yani sudo kullanmamak bir sorun haline geliyor. Tabii ki, / tmp / gibi farklı konumlarda değişiklikler yapabilirim ve sonra dir / kopya / var. Ancak, daha kolay bir yol hissediyorum.

  1. Eğer "sudo Vim" yapmıyorsanız, neden?
  2. 1. soruya evetse, sudo kullanmama problemlerini nasıl önlersiniz?

Yanıtlar:


35

İlk kategoriye giriyorum: sudo vim /var/www/html/some_filekötü bir fikir; kaydedilmemiş kabuk kaçmalarına izin verir. Bunun yerine kullanın sudoedit /var/www/html/some_file; Bu aynı etkiye sahiptir.


5
"Kaydedilmeyen kabuk kaçışları" nedir? ve neden sadece / var / www’da önemli değil?
hasen

6
vim diğer komutları komut satırında çalıştırma gücüne sahiptir. Ancak, vim sudo aracılığıyla başlatıldığından ve bu nedenle root olarak çalıştığından, bu komutlardan herhangi biri root ayrıcalıklarıyla çalışır. Bu komutlar "kabuk kaçar" olarak bilinir ve sudo'nun diğer çağrılarının olduğu gibi kaydedilmez. Ve sadece / var / www; Kullanabileceğim her yer burası. Hatta "sudo vi" yi bashrc dosyamda "sudoedit" olarak değiştirdim.
Kevin M,

Neye ulaştığını ve kabul etmek istediğini ancak netleşmek istediğini anlıyorum. Normal su ve sudo root aktivitelerinin günlüğe kaydedilip kaydedilmediği hakkında hiçbir fikrimiz yok. "sudo vim" bir alt kabuğu kök olarak çalıştırmaya izin verir - bu kadarı doğru; Bu kabuk içinde, "sudo" kökün yapıp yapamayacağını kontrol etmeyecek.
pbr

3
Kevin, "sudo vi" ile "sudoedit" takma ismini nasıl başardın? Bash el kitabından ... "/, $,` ve = karakterleri ve yukarıda listelenen kabuk meta karakterleri veya tırnak karakterlerinden herhangi biri takma adda görünmeyebilir. " ... uzay, hakkında konuştuğu karakterlerden biridir.
pbr

9
Tamam, bu nedenle bir takma ad değil, ancak aynı etkiye sahip: 'function sudo () {[[$ 1 == vi]] && vardiya && sudoedit "$ @" || sudo "$ @" komutu; } '
Kevin M

10

Bakınız: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% geçerli dosya adıyla değiştirildi, bu nedenle şunları kullanabilirsiniz:

: w! sudo tişört%


Eğer tee kullanacaksanız, ': w! Sudo tee%> / dev / null' komutunu öneririm, böylece tüm dosyanın size geri yansımasını göremezsiniz. Tipik olarak ': w! Dd of =%' komutunu kullanıyorum, çünkü aynı şeyi yazıp çabuklaştırıyor. Tabii ki, bu sadece sudoedit / sudo -e kullanmayı unuttum.
jamessan

7

vim, kullanıcıların rasgele kabuk komutları çalıştırmalarına izin verir, bu nedenle birçok sistem yöneticisi vim'in sudo ile kullanılmasına izin vermez.

rvim vim ile birlikte verilir. Kabuk komutlarına izin vermeyen, kısıtlı bir halkadır. (Veya aynı nedenlerle vim'i askıya almanıza izin verin.)

Bu uç noktalara kendi kutunuzda gitmeniz gerekip gerekmediği tartışmalıdır.


1
+1. Kesinlikle katılmak. sudo vimsonra girin :!bashve kök olarak bir kabuğunuz rvimvar
dbr

3
Aslında eğer vudo sudo yapabilirseniz, muhtemelen sudo bashveya sudo su -haklısın?
dlamblin

@diamblin Ayrıcalıklar bundan daha ince ayrıntılarla toplanabilir, bu yüzden mutlaka değil. Bu nedenle rvim gereklidir. "sudo vim", tüm amaç ve amaçlar için "sudo su -" ile aynıdır. Bununla birlikte, bir kullanıcının sistem yöneticisi olduğu bir Debian bitty kutusunda, hepsi akademik.
Richard Hoskins

Ubuntu bu konuyla nasıl başa çıkıyor? On CentOS vibaşlattı vimama kök vibaşlattı vi. Ubuntu üzerinde vimvaka ve hem kullanılan sudo viayrıca lansmanlar vim...
cwd

6

Sistem genelinde konfigürasyon dosyalarını düzenlerken, tamamen sorun yok - sadece her zaman sizin kök olduğunuzu ve böylece tüm güce sahip olduğunuzu hatırlayın ve bu ayrıcalıklara artık ihtiyacınız kalmazsa bırakın.

Özel durumda /var/www/, yani web sunucusu sayfaları, bazı mülkiyeti / grupları / izinleri değiştirmeyi düşünmek isteyebilirsiniz - ancak kurulumunuza (ve tek / çoklu kullanıcı, gerçek web sunucusu / sadece localhost, dinamik) / statik vb.)


6
Gerçekten de +1 - web sunucusu sayfalarını kullanmanın en iyi yoludur. Ayrıcalıklarınızı yükseltmek yerine bunlara erişiminiz olduğundan emin olun.
bedwyr

1
-1 sudoedit aynı işi yapacağı zaman yüksek ayrıcalıklarla vim çalıştırmak için hiçbir sebep yoktur.
sml

4

Bunun gibi bir soru alnımı tokatlamamı sağlıyor. Ben güvenliğin diğer tarafındayım, "ortalama bir insanın kötü niyetli faaliyette bulunmasını engellemesi beklenmiyor veya gerekli değilse, güvenlik kullanıcı deneyimini etkilememelidir."

Vimenin sudo kullanımını önlemek, sadece bir grup yardımcısıdır. Daha önce belirtildiği gibi, birileri sadece kullanabilirsiniz:

sudo su -

Veya

sudo /bin/bash

Veya

sudo nano file

Veya

sudo my_exectuable_text_editor file

vb

Kutuda kötü amaçlı bir şeyler yapan biri için gerçekten endişeleniyorsanız, onlara sudo (veya açık bir şekilde kök şifre) ayrıcalıkları vermeyin. Suudi kullanarak kötü niyetli faaliyetleri önlemek için şerit mermi yoktur ve bir kişinin kötü niyetli bir şey yapamayacağından emin olmak için yalnızca "tüm" düzeltmeleri "uygulayarak kendinizi deli edeceksiniz.

Biri mülkiyet / grupları değiştirmekten bahsetti. Bu, sanki web sunucusu başka bir kullanıcı olarak çalıştırılmış ve dosya izinlerini değiştirmiş gibi, yapışkan bir sorundur, artık aniden siteniz çalışmaz. Belli ki bu sana yardım etmeyecek. Web sunucusunun çalıştığı gruba kendinizi ekleyebilirsiniz, ancak grup dosyalara yazma erişimine sahip değilse, chmod -R g + w * (veya chmod ayrı ayrı dosyalar) gerçekleştirmeniz gerekebilir. Her dosyayı chmod gerekiyorsa ne istediğinizi ve bir güçlük olabilir.

Hatta bazı insanlar rvim kullanmayı önerdi. Elbette, sadece / etc / sudoers içindeki bir satırı yalnızca belirli kullanıcıların sudo rvim'e izin vermesine izin vermek için ekleyebilirsiniz, ancak bu rotaya gitmek zorunda kalırsanız, web tabanlı bir dosya yöneticisi uygulamanız daha iyi olabilir. Bu şekilde, web sunucusunun çalıştığı kullanıcı olarak çalışır, bu nedenle dosya izni sorunu yoktur ve kimin hangi dosyaları düzenlediğini kontrol etmeye devam edebilirsiniz.

Zaten iki sentim.


2

Çalıştırma sudo vim, $HOMEdizini değiştirmeyecek , böylece kök izinleriyle Vim'i çalıştırıyor olacaksınız, ancak $HOMEyine de normal kullanıcınıza işaret ediyor.

Vim'i ilk kez çalıştırıyorsanız, ~/.viminfodosya normal kullanıcı dizininizde ancak kök izinlerinizle oluşturulmuş olabilir.


1
Sudo'ya bağlı. Dizüstü bilgisayarımda sudo vim -c '!echo $HOME' -c qana klasörümü veriyor, ancak sunucumda veriyor /root. Bunun neden birinin olduğuna bakmak zorunda kalabilirim, birinin OS X iken diğerinin Gentoo olması veya /etc/sudoerskurulumun nasıl yapılacağıyla ilgili olabilir .
Nemo157

Aha! haklısın - neden burada .viminfosadece root erişimine izin verildiğini merak ettim .
Ayrat

1

BU KENDİ BİLGİSAYARINIZDAN ... Ben 'sudo vim'i kullanmamanız için bir neden görmüyorum, Denilson’un belirttiği son durumdan başka bir şey - root tarafından sahiplenilen ~ /.

Değilse - bir sistem yöneticisi yapabileceklerinizi ve yapamadıklarınızı kısıtlıyorsa - "man sudo" başına: "çoğu sistemde, sudo'nun noexec işlevselliği ile kabuk kaçmalarını önlemek mümkündür. Ayrıntılar için sudoers (5) kılavuzuna bakın. "

Böylece, bu durumda, eğer sisteminiz alt kabuklarını vim içinden kök olarak çalıştırmanızın potansiyelinden endişe duyuyorsa, noexec özelliğini kullanabilirler. Ama ... ilk davaya geri dönelim - eğer bu SİZİN bilgisayarınızsa, 'sudo vim'i çalıştırırken oldukça güvende olduğunuzu düşünüyorum.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.