Sudo'dan PATH geçirme


13

Kısacası : sudo PATH'i her zaman yıkamamak için nasıl yapılır?

Sunucumda dağıtılan bazı web sitelerim var (Debian testi) Ruby on Rails ile yazılmış. Onları barındırmak için Mongrel + Nginx kullanıyorum, ancak Mongrel'i yeniden başlatmam gerektiğinde (örneğin bazı değişiklikler yaptıktan sonra) gelen bir sorun var.

Tüm siteler VCS'de kontrol edilir (git, ancak önemli değildir) ve sahibim ve grubum kullanıcıma ayarlanmışken, Mongrel, haklarında ciddi şekilde kısıtlanmış olan, melez, melez kullanıcı altında çalışır. Bu yüzden Moğol kök (UID'yi otomatik olarak değiştirebilir) veya melez altında başlatılmalıdır.

Mongrel'i yönetmek için mongrel_cluster gem kullanıyorum çünkü herhangi bir miktarda Mongrel sunucusunu tek bir komutla başlatmaya veya durdurmaya izin veriyor. Ancak PATH içinde olması için /var/lib/gems/1.8/bin dizinine ihtiyacı vardır: bu, mutlak yolla başlatmak için yeterli değildir .

Kök .bashrc'de PATH'yi değiştirmek hiçbir şey değiştirmedi, sudo'nun env_reset ve env_keep'i değiştirmedi.

Yani soru: PATH'e bir dizin nasıl eklenir veya kullanıcının PATH'ı sudo'da nasıl tutulur?

Güncelleme: bazı örnekler

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Ayrıca Debian kararlı (lenny) de tam olarak bu şekilde çalıştığını söyleyebilirim.


Yanıtlar:


12

Birkaç saat boyunca aynı sorunla mücadele etti. Debian lenny'de, ekleyerek düzeltebilirsiniz

Defaults        exempt_group=<your group> 

sudoers dosyasına.

Bu derlenmiş - güvenli yol seçeneği, (bildiğim kadarıyla) dolaşmanın tek yoludur.

Özellikle, bu aynı zamanda kullanıcıların sudo olduklarında şifrelerini girmeleri gerekliliğinden de muaf tutacaktır.


3

Eğer varsa secure_pathayarlanır /etc/sudoers, sen oynayabilir env_reset/ env_keephepsi sizin gibi ve yoluna herhangi bir fark yapmaz. Böyle bir şey görürseniz, yorum yapın.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Hayır, elbette ayarlanmadı.
whitequark

0

Adam sudo env_reset ve env_keep seçeneklerine bakmak söyleyebilirim . Ama bunu zaten yapmışsınız gibi geliyor (sadece yanlışlıkla env_keep "keepenv" diyoruz). Eğer varsa devre dışı (varsayılan etkindir) env_reset seçeneği, bunu silmek zorunda değil düşünüyorum herhangi env değişkenleri. Ancak bu daha az güvenlidir.

Ayrıca sudo için bir secure_path seçeneği de vardır; Bence bu varsayılan olarak etkindir. Devre dışı bırakmayı deneyebilirsiniz.

Yukarıdaki seçenekler / etc / sudoers dosyanızda belirtilmiştir. Ayrıca -isudo için komut satırı seçeneği de vardır. Bu sudo'nun /root/.profile veya /root/.login komutunu çalıştırmasına neden olur. İstediğiniz yolu orada ayarlayabilirsiniz.


1
Hayır, env_reset kapatıldığında PATH değişmeye devam eder (silinmez). Muhtemelen bu / * / sbin dizinlerini eklemek için yapılır. Hayır, -i seçeneği etkileşimli bir kabuk başlattığı için uygun değildir ve yalnızca bir komut çalıştırmam gerekir.
whitequark

Tamam, Debian (LVM'ye geçiş nedeniyle) ve RubyGems'i yeniden yükledikten sonra sorun ortadan kalktı; cevabınız en yararlı olanıydı, böylece şimdi kabul edilebilir.
whitequark

-1

Yanlış bir şey yapıyorsun. Ayrıca, / etc / sudoers dosyanızla ne yaptığınızı belirtmediniz. İşte yapmanız gerekenler - bu bir CentOS sistemi, BTW:

İlk olarak, bu doğru env_keep ayarı ile (fark PATH orada):

Sudo grep -5 YOLU / etc / Sudoers Varsayılan = "RENK HOSTNAME'deki HISTSIZE inputrc KDEDIR \ LS_COLORS POSTA PS1 PS2 QTDIR ADI \ DİL LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL DİL LINGUAS \ _XKB_CHARSET XAUTHORITY yolunu görüntülemek" env_keep

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

İyi görünüyor. Şimdi env_keep ayarını kaldıralım ve tekrar deneyelim:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Ne üzücü bir YOL:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
Ben iki kat daha fazla kontrol! Yayındaki güncellemeyi kontrol edin.
whitequark

Aynı problemim var, kesinlikle bahsettiğiniz doğru ayarlara
sahibim
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.