Sudo`yu $ PATH’a nasıl koruyabilirim?


123

/ Opt / godi / sbin (özel bir dizin) üzerine kurulmuş bir program çalıştırmam gerekiyor. Bu dizini PATH'ime eklerseniz, .bashrc dosyama aşağıdaki satırı ekleyerek

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

daha sonra sadece para cezası komutunu çalıştırabilirim (sudo gerektirdiği için başarısız olması dışında). Ancak sudo kullanmaya çalıştığımda:

sudo godi_console

Aşağıdaki hatayı alıyorum

sudo: godi_console: command not found

Sudo kullandıktan sonra PATH değişkenini incelemek, normal bir kullanıcı olarak sahip olduğum aynı PATH'yi içermediğini gösteriyor:

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PATH neden aynı değil? Yanlış bir şey mi yapıyorum? Debian Jessie'dayım ve ne yazık ki godi_console'ye olan mutlak bağlantıyı sudo yaparak sorunu çözemiyorum çünkü godi_console'un kendisi de PATH'nin doğru bir şekilde ayarlanmasına bağlı.


2
Dene sudo -E godi_console. -E"çevreyi koru" anlamına gelir.
D_Bye

5
@D_Bye, secure_pathve / veya env_reset sudo, Debian gibi birçok dağıtımda olduğu gibi yapılandırılmışsa işe yaramaz .
Stéphane Chazelas

@StephaneChazelas Bilgi için teşekkürler - Debian kullanmıyorum, bu yüzden belki de sessiz kalmalıydım!
D_Bye


İlgili bir soru hakkında sudeğil sudo, olduğu unix.stackexchange.com/questions/460478 .
JdeBP

Yanıtlar:


149

Her zaman yapabilirsin:

sudo env "PATH=$PATH" godi_console

Debian'daki bir güvenlik önlemi olarak, güvenli bir değere ayarlama seçeneği /etc/sudoersvardır secure_path.

Bunu not et:

sudo "PATH=$PATH" godi_console

Nerede sudodavranır içeren argümanlar lider =tek başına ortam değişkeni atamaları gibi karakterler de çalışan çalışmak istiyorum godi_consoleile SİZİN $PATH (aksine secure_pathortamındaki), ancak etkilemeyeceği sudo'ın yürütülebilir için arama yolunu, yani yardımcı olmaz sudoo bulmakta godi_console.


5
Bu cevabı en çok sevdim çünkü ayarları global olarak değiştirmekten kaçınıyor (yani en az ayrıcalık ilkesini koruyor)
Alois Mahdal

5
sudo "PATH=$PATH" godi_console bu arada CentOs7'de çalışmadı. Env'ye ihtiyacım vardı
Hakan Baba

1
@ StéphaneChazelas sudo "PATH=$PATH" godi_consoleHiç gerçekten çalışıyor mu? sudokabul VAR=valueçalıştırıldığı komuta ortamını etkileyen, argümanlar, ancak aksine envya bash, sudobu nasıl etkilemesine izin vermiyor o komutu arar. Bunu sadece (yakın zamanda) Ubuntu 16.04'te test ettim. Ancak exempt_groupseçeneğe eklemeye çalıştım sudoers(sadece test için - bunu bir çözüm olarak görmüyorum!) Ve sonuçlar aydınlatıcıydı. Formun komutları PATH="$PATH" sudo some-commandçalışmaya başladı, ancak formun komutları sudo PATH="$PATH" some-command hala çalışmadı.
Eliah Kagan,

2
@ballsatballsdotballs. Bu takma ad yalnızca etkileşimli kabuklarınızı etkilemeli, nispeten zararsız olmalıdır.
Stéphane Chazelas

2
Sadece bu tür durumlar için psudo adında bir takma ad oluşturuyorum, burada: alias psudo = "sudo env \" PATH = $ PATH \ "". O zaman normal sudo kullanımım etkilenmedi.
mikeTronix

46

Ayrıca varsayılan PATH’yı /etc/sudoers

kullanarak dosyayı düzenleyin visudo

ve hattı istediğiniz zaman güncelleyin: Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin


18

SUDO varsayılan olarak sıfırlanmış env değişkenleri yapıyor.

El kitabına ve env_reset adlı seçeneğe göz atın.

Sadece / etc / sudoers içinde etkisizleştirmen gerekiyor.


5
Güzel! Ubuntu'da secure_path ve env_reset satırlarını görüntüleyebilir ve yorumlayabilirsiniz. Sistemi önemli ölçüde daha az güvenli hale getirir, bu yüzden dikkatli olun.
RawwrBag

Devre dışı bırakma davranışını w / r / t PATH env_resetolarak etkilemiyor gibi görünüyor sudo.
Zanna

5

Bu çalışıyor :

sudo $(which your_command)

gpsNvidia GPU'nun işlemlerini listeleyen betiğimi çağıran örnek :

$ sudo gps
sudo: gps: command not found
$ sudo $(which gps)
  PID TTY          TIME CMD
 9922 tty7     02:42:47 Xorg

Açıklama:

$ set -x;sudo $(which gps);set +x
++ which gps
+ sudo /home/xyztuv/myScripts/shl/gps
  PID TTY          TIME CMD
 9922 tty7     02:42:39 Xorg
+ set +x

3
sudo --preserve-env=PATH env [command]

bu oververes güvenli benim yolumda


1

Bu çalıştı:

sudo "PATH=$PATH" [your command]

$ PATH değerini yol değerinizle değiştirmeyin, sadece bu şekilde yazın

örnek: $ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....


0

Belki tam olarak OP'nin istediği şey değildir, ancak bu yardımcı olabilir:

sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'

Bu , sudoed komutunun içindeki PATH'yi değiştirir.

Düzenleme: Yukarıdakiler oldukça saçma olduğu için bununla ne demek istediğimi bilmiyorum. Bunun yerine aşağıdakileri kullanın:

sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'
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.