Có thể root thực thi một lệnh là không root?


10

Tôi là người dùng root và giả sử tôi muốn chạy bất kỳ ứng dụng nào với tư cách là người dùng khác. Điều này có thể, mà không cần chuyển sang người dùng khác?

Cái gì đó như

# google-chrome user=abc

Tôi thực sự đang thực hiện một chương trình CLI với tư cách là người dùng không root. Tôi đã thiết lập bit dính và tôi đang sử dụng setuid, vì vậy chương trình chạy với quyền root. Bây giờ tôi đang sử dụng system()trong chương trình để gọi một ứng dụng GUI. Nhưng tôi không muốn chạy nó với quyền root, vì vậy tôi muốn tạm thời bỏ quyền root chỉ cho cuộc gọi đó.


1
Bạn có thực sự chạy như root hầu hết thời gian?
Keith

1
@Keith không có gì trong câu hỏi ngụ ý hầu hết thời gian .
kojiro

Hoặc không, đó là lý do tại sao tôi yêu cầu làm rõ.
Keith

Vâng, đó là cách chương trình đầu tiên cho mỗi người dùng được chạy. Quá trình đầu tiên trên hệ thống được chạy dưới quyền root. Có rất nhiều cách để từ bỏ đặc quyền, bao gồm tất cả các cách có thể leo thang đặc quyền, cộng với một số cách khác.
ctrl-alt-delor

Câu trả lời:


9

Một giải pháp di động sẽ là:

su abc -c google-chrome

Tuy nhiên, vì google-chrome đang yêu cầu quyền truy cập X11, điều này có thể sẽ thất bại trừ khi bạn không bảo mật nó, đây sẽ là một ý tưởng rất tồi, đặc biệt là trong khi chạy bằng root.

Nếu cho phép điều chỉnh / chuyển tiếp X11, cách tốt hơn sẽ là

ssh -X abc@localhost google-chrome

hoặc là

ssh -Y abc@localhost google-chrome

Tại sao cách tiếp cận ssh sẽ tốt hơn? Điều này vẫn không chạy bằng phiên X của người dùng gốc chứ?
Steve

1
@Steve Việc sử dụng su abc -c google-chromecó thể sẽ thất bại ngay từ đầu vì abckhông thể sử dụng phiên của root, .Xauthoritykhông thể đọc được abc.
jlliagre

Rất tiếc, tôi đã hiểu lầm bạn, tôi nghĩ bạn có nghĩa là nó sẽ tốt hơn từ góc độ bảo mật
Steve

10

Câu trả lời ngắn gọn: "Có, điều này là có thể".

Nếu bạn muốn thực thi một ứng dụng không phải X thì chỉ cần sử dụng lệnh sau:

sudo -u abc lệnh

Nếu bạn muốn chạy một số ứng dụng X với tư cách là một người dùng khác nhưng với máy tính để bàn của riêng bạn trước tiên, bạn cần tạo một tập lệnh trợ giúp, điều đó sẽ làm cho cuộc sống của bạn đơn giản hơn

  • tạo một thư mục bin trong thư mục nhà của bạn:

mkdir -p ~ / bin

và sử dụng trình soạn thảo văn bản yêu thích của bạn tạo một tệp ~/bin/xsudonhư sau:

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

sau đó làm cho nó thực thi:

chmod + x ~ / bin / xsudo

và sử dụng nó giống như sudonhưng không có bất kỳ công tắc nào:

ứng dụng người dùng xsudo

Thưởng thức.

PS Bắt đầu xsessiontừ roottài khoản được khuyến khích mạnh mẽ!


Bạn đã thử à ? Tôi sợ ví dụ cụ thể này không thể làm việc.
jlliagre

Có, bởi vì để bắt đầu một ứng dụng X từ một phiên người dùng khác, bạn phải cho phép truy cập vào màn hình của bạn. Nhưng điều này cũng có thể. Thật không may, tôi không nhớ chính xác làm thế nào để làm điều này.
Serge

@jlliagre Tuy nhiên, tôi nhớ cách khởi động một ứng dụng X trên cùng một máy chủ một cách khó khăn: ssh -X abc@localhost google-chrome:)
Serge

Hmm ... Tôi đang viết bình luận những gì bạn đã đăng 22 phút trước ...
Serge

Nhưng bạn vẫn có 6 phiếu bầu cho một giải pháp không hoạt động trong khi tôi chỉ có một phiếu cho một giải pháp đúng. Mô hình StackExchange đôi khi khá bực bội ...
jlliagre

1

Có một cách để chạy crom khi đăng nhập vào người dùng root. Nếu bạn mở bình thường, nó sẽ báo lỗi như "crom không thể chạy dưới quyền root".

Để chạy nó mà không gặp lỗi, right clickmáy tính để bàn của bạn, hãy tạo một trình khởi chạy mới bằng lệnh : chromium-browser --user-data-dir. Bạn có thể đặt tên cho nó là những gì bạn muốn, lưu nó, khi bạn mở nó, nó sẽ cung cấp cho bạn trình duyệt crom. (Hoạt động trong Ubuntu 10.04.4 LTS)


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 "" "${@}"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.