Apakah mungkin untuk menjalankan perintah sebagai non-root?

10

Saya adalah pengguna root, dan anggap saya ingin menjalankan aplikasi apa pun sebagai pengguna lain. Apakah ini mungkin, tanpa beralih ke pengguna lain?

Sesuatu seperti

# google-chrome user=abc

Saya sebenarnya menjalankan program CLI sebagai pengguna non-root. Saya telah mengatur bit sticky dan saya menggunakan setuid, jadi program ini berjalan dengan hak akses root. Sekarang saya menggunakan system()di dalam program untuk menjalankan aplikasi GUI. Tapi saya tidak ingin menjalankannya sebagai root, jadi saya ingin untuk sementara waktu menghapus hak akses root hanya untuk panggilan itu.

adnan kamili
sumber
1
Apakah Anda benar-benar berjalan sebagai root sebagian besar waktu?
Keith
1
@ Keith tidak ada dalam pertanyaan menyiratkan sebagian besar waktu .
kojiro
Atau tidak, itu sebabnya saya meminta klarifikasi.
Keith
Ya begitulah program pertama untuk setiap pengguna dijalankan. Proses pertama pada sistem dijalankan sebagai root. Ada banyak cara untuk menghilangkan privilege, termasuk semua cara yang dapat meningkatkan privilege, ditambah lagi.
ctrl-alt-delor

Jawaban:

9

Solusi portabel adalah:

su abc -c google-chrome

Namun, karena google-chrome memerlukan akses X11, ini kemungkinan akan gagal kecuali Anda tidak mengamankannya, yang akan menjadi ide yang sangat buruk, terutama saat dijalankan sebagai root.

Jika penyetelan / penerusan X11 diizinkan, cara yang lebih baik adalah

ssh -X abc@localhost google-chrome

atau

ssh -Y abc@localhost google-chrome
Jlliagre
sumber
Mengapa pendekatan ssh lebih baik? Bukankah ini masih berjalan menggunakan sesi X pengguna root?
Steve
1
@Steve Menggunakan su abc -c google-chromekemungkinan akan gagal di tempat pertama karena abctidak dapat menggunakan sesi root, .Xauthoritykarena tidak dapat dibaca abc.
jlliagre
Ups, maaf saya salah paham, saya kira maksud Anda akan lebih baik dari sudut pandang keamanan
Steve
10

Jawaban singkat: "Ya, ini mungkin".

jika Anda ingin menjalankan aplikasi non-X maka gunakan saja perintah berikut:

perintah sudo -u abc

Jika Anda ingin menjalankan beberapa aplikasi X sebagai pengguna lain tetapi dengan desktop Anda sendiri terlebih dahulu, Anda perlu membuat skrip pembantu, yang akan membuat hidup Anda lebih sederhana

  • buat folder bin di bawah direktori home Anda:

mkdir -p ~ / bin

dan menggunakan editor teks favorit Anda buat file ~/bin/xsudosebagai berikut:

#!/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 - ; $*"

lalu buat itu bisa dieksekusi:

chmod + x ~ / bin / xsudo

dan menggunakannya dengan cara yang sama sudotetapi tanpa switch:

aplikasi pengguna xsudo

Nikmati.

PS Mulai xsessiondari rootakun sangat tidak disarankan!

Serge
sumber
Apakah kamu sudah mencobanya ? Saya khawatir contoh khusus ini tidak bisa bekerja.
jlliagre
Ya, karena untuk memulai aplikasi X dari sesi pengguna lain Anda harus mengizinkan akses ke tampilan Anda. Tetapi ini juga mungkin. Sayangnya saya tidak ingat bagaimana tepatnya ini bisa dilakukan.
Serge
@ jlliagre Namun, saya ingat bagaimana memulai aplikasi X pada host yang sama dengan cara yang sulit: ssh -X abc@localhost google-chrome:)
Serge
Hmm ... Saya menulis komentar apa yang sudah Anda posting 22 menit yang lalu ...
Serge
Tetapi Anda masih memiliki 6 suara untuk solusi yang tidak berfungsi sementara saya hanya mendapatkan satu untuk yang benar. Model StackExchange kadang-kadang cukup membuat frustrasi ...
jlliagre
1

Ada cara untuk menjalankan kromium saat masuk ke pengguna root. Jika Anda membukanya secara normal, itu akan memberi Anda kesalahan seperti "kromium tidak dapat dijalankan sebagai root."

Untuk menjalankannya tanpa kesalahan, right clickdesktop Anda, membuat peluncur baru dengan perintah: chromium-browser --user-data-dir. Anda dapat memberi nama apa yang Anda inginkan, menyimpannya, ketika Anda membukanya, itu akan memberi Anda browser kromium. (Bekerja di Ubuntu 10.04.4 LTS)

pengguna299161
sumber
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 "" "${@}"
Alberto Salvia Novella
sumber