Root'un root olmayan bir komutu yürütmesi mümkün müdür?


10

Ben kök kullanıcıyım ve herhangi bir uygulamayı başka bir kullanıcı olarak çalıştırmak istediğimi varsayalım. Bu başka bir kullanıcıya geçmeden mümkün mü?

Gibi bir şey

# google-chrome user=abc

Aslında kök olmayan bir kullanıcı olarak bir CLI programı yürütüyorum. Yapışkan bitini ayarladım ve setuid kullanıyorum, bu yüzden program kök ayrıcalıklarıyla çalışıyor. Şimdi system()program içinde bir GUI uygulaması çağırmak için kullanıyorum . Ama ben root olarak çalıştırmak istemiyorum, bu yüzden sadece bu çağrı için geçici olarak root ayrıcalıklarını bırakmak istiyorum.


1
Çoğu zaman gerçekten kök olarak mı çalışıyorsunuz?
Keith

1
@Sorudaki hiçbir şey çoğu zaman ima edilmez .
kojiro

Ya da değil, bu yüzden açıklama istiyorum.
Keith

Evet, her kullanıcı için ilk program bu şekilde çalıştırılır. Sistemdeki ilk işlem root olarak çalıştırılır. Ayrıcalığı artırabilecek tüm yollar ve biraz daha fazlası dahil olmak üzere ayrıcalık bırakmanın birçok yolu vardır.
ctrl-alt-delor

Yanıtlar:


9

Taşınabilir bir çözüm:

su abc -c google-chrome

Ancak, google-chrome X11 erişimi gerektirdiğinden, güvenli olmadığından bu muhtemelen başarısız olacaktır, bu da özellikle kök olarak çalışırken çok kötü bir fikir olacaktır.

X11 ayarına / yönlendirmesine izin verilirse, daha iyi bir yol

ssh -X abc@localhost google-chrome

veya

ssh -Y abc@localhost google-chrome

SSH yaklaşımı neden daha iyi olur? Bu, kök kullanıcının X oturumunu kullanarak çalışmaya devam etmez mi?
Steve

1
@Steve kullanmak su abc -c google-chromemuhtemelen ilk başta başarısız olur çünkü root'un abcoturumunu kullanamaz, .Xauthorityokunamaz abc.
jlliagre

Üzgünüz, seni yanlış anladım, bunun güvenlik açısından daha iyi olacağını düşündüğünü sanıyordum
Steve

10

Kısa cevap: "Evet, bu mümkün".

X olmayan bir uygulamayı yürütmek isterseniz, aşağıdaki komutu kullanın:

sudo -u abc komutu

Bazı X uygulamalarını başka bir kullanıcı olarak çalıştırmak istiyorsanız, ancak önce kendi masaüstünüzle, hayatınızı daha kolay hale getirecek bir yardımcı komut dosyası oluşturmanız gerekir.

  • ana dizininizin altında bir bin klasörü oluşturun:

mkdir -p ~ / bin

ve en sevdiğiniz metin düzenleyicisini kullanarak ~/bin/xsudoaşağıdaki gibi bir dosya oluşturun :

#!/bin/bash
# (C) serge 2012
# The script is licensed to all users of StackExchange family free of charge
# Fixes/Enhancements to the script are greatly appreciated. 
# 
# SUDO_ASKPASS has to be set to the path of ssh-askpass
# fix the following two lines if your distribution does not match this autodetection
. /etc/profile.d/gnome-ssh-askpass.sh
export SUDO_ASKPASS="${SSH_ASKPASS}"

SUDOUSERNAME="$1"
shift
xauth nlist "${DISPLAY}"|sudo -HA -u $SUDOUSERNAME env --unset=XAUTHORITY \
bash -c "xauth nmerge - ; $*"

sonra çalıştırılabilir yapın:

chmod + x ~ / bin / xsudo

ve sudoherhangi bir anahtar olmadan aynı şekilde kullanın :

xsudo kullanıcı uygulaması

Zevk almak.

Başlangıç PS xsessiongelen roothesaba kesinlikle önerilmez!


Onu denedin mi ? Korkarım bu özel örnek işe yaramaz.
jlliagre

Evet, çünkü bir X uygulamasını başka bir kullanıcı oturumundan başlatmak için görüntülemenize izin vermeniz gerekir. Ancak bu da mümkündür. Ne yazık ki bunun tam olarak nasıl yapılacağını hatırlamıyorum.
Serge

@jlliagre Ancak, aynı ana bilgisayarda bir X uygulamasını zor bir şekilde nasıl başlatacağımı hatırlıyorum: ssh -X abc@localhost google-chrome:)
Serge

Hmm ... 22 dakika önce yayınladığınız yorumlara yazıyorum ...
Serge

Ama hala doğru olmayan bir çözüm için 6 oyunuz var. StackExchange modeli bazen oldukça sinir bozucu ...
jlliagre

1

Kök kullanıcıya oturum açıldığında krom çalıştırmanın bir yolu vardır. Normalde açarsanız, "krom kök olarak çalıştırılamaz" gibi bir hata verir.

Hatası olmadan çalıştırmak için right clickmasaüstünüzde, komutuyla yeni başlatıcısı oluşturun: chromium-browser --user-data-dir. İstediğinizi adlandırabilir, kaydedebilirsiniz, açtığınızda size krom tarayıcı verecektir. (Ubuntu 10.04.4 LTS'de çalışır)


1
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e)


execute () {
    function="${1}"
    command="${2}"
    error=$(eval "${command}" 2>&1 >"/dev/null")

    if [ ${?} -ne 0 ]; then
        echo "${function}: $error"
        exit 1
    fi
}


executeAsNonAdmin () {
    function="${1}"
    command="${2}"

    eval setPasswordAsker="SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass"
    run="runuser ${SUDO_USER} --session-command=\"${setPasswordAsker}\" --command=\"${command}\""
    execute "${function}" "${run}"
}


executeAsNonAdmin "" "${@}"
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.