Fabric: Bagaimana cara menerapkan panggilan "Sudo su -"?

Dibuat pada 29 Okt 2013  ·  9Komentar  ·  Sumber: fabric/fabric

Apakah ada cara untuk meniru perintah "Sudo su - user_name" dan kemudian menjalankan perintah yang saya butuhkan?

Mencoba run dan sudo dan sayangnya tidak ada cara untuk membuatnya. Tolong bantu

Komentar yang paling membantu

@polusok @kusnier Saya bekerja dengan batasan serupa. Anda dapat mencoba meneruskan perintah Anda dengan cara ini.

run('echo "whoami" | sudo su - nama pengguna')

Semua 9 komentar

Apakah '-' penting dalam apa yang Anda coba lakukan? (mis. memanggil login) atau apakah Anda hanya mencoba menjalankan perintah sebagai pengguna lain selain pengguna dan root saat ini?

Jika pengaruh login tidak penting maka Anda dapat melakukan hal berikut ...

sudo("mkdir /var/www/new_docroot", user="www-data")

atau

   with settings(sudo_user='mysql'):
            sudo("whoami") # prints 'mysql'

atau jika login itu penting (cara hacky) Anda bisa melakukan ini, saya kira ...

   sudo("su - usernaeme -c 'command to be run'")

Ya - penting bagi saya. Saya perlu menerapkan

  • masuk ke server dengan kredensial saya
  • dalam login shell sebagai pengguna lain dengan izin khusus dan lingkungan yang dikonfigurasi
  • menjalankan perintah

Harap perhatikan bahwa saya hanya memiliki kata sandi akun saya dan saya tidak memiliki kata sandi untuk pengguna tersebut di langkah 2 oleh karena itu saya harus terhubung melalui

sudo su - user_name

Sayangnya, saya tidak dapat menggunakannya karena dilarang karena izin saya

sudo("su - usernaeme -c 'command to be run'")
Sorry, user user_name is not allowed to execute '/usr/bin/su - another_user -c pwd' as root on server.

Ada saran lain?

@polusok : Sudahkah Anda menemukan solusi? Saya memiliki masalah yang sama. Saya hanya dapat menggunakan sudo su - jboss untuk menjadi pengguna jboss.

@polusok @kusnier Saya bekerja dengan batasan serupa. Anda dapat mencoba meneruskan perintah Anda dengan cara ini.

run('echo "whoami" | sudo su - nama pengguna')

npalrecha, itu tampaknya berfungsi tetapi meminta kata sandi pada setiap perintah. Apakah benar-benar tidak ada cara untuk hanya Sudo su - pengguna dan menjalankan semua perintah berikutnya sebagai pengguna itu?

Saya memiliki masalah yang sama... Jika Anda dapat mengubah file /etc/sudoers , itu mungkin solusi termudah. Baris Anda mungkin terbaca username host = ALL tetapi seharusnya terbaca username host = (ALL) ALL .

Inilah solusi saya untuk mereka yang tidak bisa.
Perhatikan bahwa melakukan sudo(command, user="otheruser") dengan solusi ini tidak akan berhasil.

class Sudosu:
    def __init__(self, user):
        self.user = user

    def __enter__(self):
        self.old_sudo_prefix = env.sudo_prefix
        self.old_sudo_user, env.sudo_user = env.sudo_user, self.user
        env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"

    def __exit__(self, a, b, c):
        env.sudo_prefix = self.old_sudo_prefix
        env.sudo_user = self.old_sudo_user

Gunakan seperti itu...

<strong i="17">@task</strong>
def test():
    with Sudosu(user=username):
        sudo("whoami")

Atau, sebagai dekorator ...

def sudosu(user):                                                                        
    def wrap(f):                                                                         
        def inner(*args, **kwargs):                                                      
            old_sudo_prefix = env.sudo_prefix                                            
            old_sudo_user, env.sudo_user = env.sudo_user, user                           
            env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"       

            f(*args, **kwargs)                                                           

            env.sudo_prefix = old_sudo_prefix                                            
            env.sudo_user = old_sudo_user                                                
        inner.__name__ = f.__name__                                                      
        return inner                                                                     
    return wrap                                                                          

Gunakan seperti itu...

<strong i="24">@task</strong>
@sudosu("username")
def whoami():
    sudo("whoami")

atau...

sudo = sudosu("username")(sudo)

<strong i="28">@task</strong>
def whoami():  
    sudo("whoami")

Apapun cara Anda merasa seperti. Preferensi saya adalah sebagai konteksnya.

Tentu saja, Anda dapat mengatur env.sudo_prefix , tetapi Anda perlu mengatur ulang jika ingin melakukan sudo normal.

Juchiu, saya memiliki harapan yang tinggi tetapi itu tidak berhasil untuk saya. Saya pada dasarnya mendapatkan kesalahan yang sama yang diberikan oleh fabric saja. Saya menggunakan Red Hat Enterprise Linux Server rilis 5.4 (Tikanga). Solusi Npalrecha berfungsi, tentu saja tidak elegan.

Kesalahan:
Maaf, pengguna xxxx tidak diizinkan untuk mengeksekusi '/bin/su - yyyy -c -u
yyyy /bin/bash -l -c whoami' sebagai root di server saya.com.com.

Dieksekusi: sudo -S -p 'kata sandi sudo:' su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami"

Sepertinya masih mencoba meneruskan -u yyyy ke Sudo. Saya percaya bahwa ketika Anda melakukan panggilan sudo() , Anda masih memasukkan user sebagai kwarg.

Tetapi pesan kesalahan Anda menarik, karena sepertinya Anda mungkin tidak diizinkan di Sudo untuk mengeksekusi su dengan argumen tertentu, terutama karena Anda diizinkan untuk sudo su - yyyy secara normal.

FWIW, argumennya sepertinya tidak masuk akal bagi saya, tetapi saya menemukan apa yang aneh.
Sudo tampaknya telah mencoba menjalankan perintah su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami" . Su kemudian tampaknya mencoba mengeksekusi -u "achuser" /bin/bash -l -c "whoami" , tetapi hanya menjalankan whoami karena dianggap -c dilewatkan beberapa kali, dan hanya membutuhkan yang terakhir. Saya mungkin akan mencoba untuk menghindari hal ini terjadi.

Ini lebih merupakan makanan milis daripada masalah sebenarnya dengan kain - akan ditutup seperti itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

acdha picture acdha  ·  4Komentar

peteruhnak picture peteruhnak  ·  4Komentar

bitprophet picture bitprophet  ·  6Komentar

TimotheeJeannin picture TimotheeJeannin  ·  3Komentar

zhaoguixu picture zhaoguixu  ·  5Komentar