`/ etc / sudoers` - sadece bir komut için` env_keep` belirtiniz?


23

sudoYalnızca belirtilen komutlar için belirli ortam değişkenlerini korumasını gerektiğini belirtmenin herhangi bir yolu var mı ? Bazı amaçlar için $HOMEenv. Belirli komutları çalıştırdığımda değişken korunuyor. Diğer amaçlar ve diğer komutlar için sıfırlanmasını istiyorum. Bu yapılabilir /etc/sudoersmi?

Düzenle:

cevaplar için teşekkür ederim. Acaba "Neden öyleyse bu işe yaramıyor?" Diye bir soru sorabilir miyim?

Örnekte çalışmaya çalışıyorum, sudo nanookumak istiyorum $HOME/.nanorc. Bunu kullanırsam:

Defaults:simon env_keep=HOME

mükemmel çalışıyor. Bunu kullanırsam:

Defaults!/bin/nano env_keep=HOME

veya bu:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

hiç çalışmıyor. Neden olarak herhangi bir öneriniz var mı? (Debian testindeyim, btw.)

(Not: Ben 's sanmıyorum nanobtw özgü - Ben sadece o tek satırlık bash komut dosyası ile davranışı yeniden yapabilirsiniz echos $HOME).


1
Aynı yapılandırma dosyasını kullanmak için nano'yu sudo aracılığıyla çalıştırmaya çalışmak sudoedityerine , yerine kullanın. sudoeditBir dosyanın içeriğini bir tmp dosyasına kopyalayın ve seçtiğiniz editörü kullanıcı olarak çalıştırın, editör çıktıktan sonra herhangi bir şeyi değiştirip değiştirmediğinizi kontrol edin ve eğer öyleyse orijinalini değiştirildi. Hangi düzenleyicinin çalışmasını istediğinizi $EDITORveya $ VISUAL` env değişkenini ayarlayarak seçebilirsiniz.
Arrowmaster

@Arrowmaster - teşekkürler, bu benim uğraştığımdan daha iyi bir yaklaşım gibi görünüyor. Zaten sudokendime ait bir fonksiyonla uğraştığım için, basitçe bir if [ "$1" == "$EDITOR" ]; thenblok ekledim ve şimdi sudoeditbunun yerine çağırıyorum :)
simon

Yanıtlar:


21

env_keepYalnızca /path/to/command(herhangi bir kural aracılığıyla, herhangi bir kullanıcı tarafından çağrıldığında) ve kullanıcı için joe(hangi komutu çalıştırıyor olursa olsun ) geçersiz kılmak için :

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

Sen kullanabilirsiniz -=veya +=kaldırmak veya bir giriş eklemek için env_keeplistede.


parlak, teşekkür ederim. Bu sözdiziminin uygun bir örneğini bulamadım. Artık benim için hecelemeye başladım, bunu sayfamdan nasıl çözmem gerektiğini görebiliyorum manve kendimi biraz aptal gibi hissediyorum. Hiç şüphe yok ki bu cevap olsa da, başkalarına da yardımcı olacaktır.
simon

1
@simon: Aptal hissetme, ben de sözdizimi açıklamasını sudoers man sayfadaki , biçimsel açıklamadan çıkarmayı zor nasıl yazacaklarını biliyorsanız örnekleri bulmak daha kolay.
Gilles 'SO- kötülük'

hmm - belki de yakında konuştum. Şimdi bunu denediğim için gerçekten işe yaramaz. Revizyonuma bir göz atmanıza sorun olabilir miyim?
simon

1
@simon: Benim tahminim, ayrıca her şeyi yapmanıza izin veren bir girişe sahip olmanız ve bu env_keepayara ( simon ALL = ALL) sahip olmamanızdır . Sudo en son eşleşen girişi kullanır .
Gilles 'SO- kötülük'

Eğer dikkat ederseniz, secure_path ayarlanmışsa, ayrıca Varsayılanları da eklemeniz gerekir: joe! Secure_path
Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Bu satırlar benim kendi gelmektedir /etc/sudoersbu sorunu düzeltmek için pbuilderde görünüyor $HOME(Bu hareket ancak kendi kullanıcı yapılandırma dosyası için root olarak çalıştırılmalıdır /roottür bir sistem ve bir kullanıcı yapılandırma dosyası hem sahip olmanın anlamını ortadan).


evet, bu aklımda olana çok benzer bir kullanım durumu, teşekkürler!
simon

Revizyonumdaki örneklerin neden işe yaramadığı hakkında bir fikriniz var mı?
simon

@simon sudo, config içindeki girişlerin sırasına göre oldukça seçici, daha sonraki girişler öncekilerin üzerine yazacak. Konfigürasyonunuzda böyle bir çatışma olabilir.
Arrowmaster

1

Adam sudoers:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Bu nedenle evet, kullanarak da yapabilirsiniz env_reset, env_keepve env_check/ etc / sudoers içinde.

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.