簡體   English   中英

腳本不會切換到其他用戶

[英]script does not switch to another user

我正在處理一個腳本,該腳本在某個時候需要切換到root用戶(執行“ sudo rootsh”是在我們的服務器上切換到root的唯一可接受的方法),之后它將執行某個命令。

我不確定我缺少什么,但是當腳本應該切換到root並繼續與啟動腳本的用戶執行命令時,腳本只是忽略了該部分。

如果您檢查生成的whoami.txt文件,您將注意到該用戶不是root用戶。 請記住,執行sudo rootsh命令時,執行腳本的用戶可以切換到root用戶而沒有任何問題。

這是我正在使用的代碼:

import subprocess
def switch_user():
 commands = '''
 sudo rootsh
 whoami > whoami.txt
 sysctl -a | grep kernel.msgmni'''
 process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, 
 stdout=subprocess.PIPE)
 out, err = process.communicate(commands.encode('utf-8'))
switch_user()

知道我在做什么錯嗎? 謝謝。

代替Popen荷蘭國際集團的子進程來運行bash ,並打開一個單獨的特權殼, Popen命令sudo rootsh直接。 如果成功(要求允許用戶在不提供密碼的情況下對sudo rootsh進行許可),則通過與子sudo rootsh 進行通信來傳遞其余命令。

遵循以下原則:

import subprocess

def switch_user():
    # These shell commands will be used as input to the root shell
    commands = '''whoami > whoami.txt
    sysctl -a | grep kernel.msgmni'''

    # Launch the root shell
    process = subprocess.Popen('/usr/bin/sudo rootsh',
            stdin=subprocess.PIPE, stdout=subprocess.PIPE)

    # Send the shell's input to it and receive back its output
    out, err = process.communicate(commands.encode('utf-8'))

switch_user()

您可能需要針對自己的目的對其進行修改。 特別是,如果您的sudo命令位於其他位置,那么您可能需要修改其路徑。 我再次強調,這種方法取決於能否獲得root shell而無需提供密碼。 可以通過這種方式配置Sudo,但這不是默認值。

在與操作系統團隊的成員進行了更徹底的調查之后,我終於設法完成了這項工作。 我將發布此消息,也許將來對某人有用:

import os
os.system("sudo rootsh -i -u root 'sysctl -a | grep kernel.msgmni' > parameter_value.txt")

關鍵是插入-i-u選項:

-i [命令]

-i (模擬初始登錄)選項將由目標用戶的密碼數據庫條目指定的外殼作為登錄外殼運行。 這意味着Shell將讀取特定於登錄的資源文件,例如.profile.login 如果指定了命令,則通過外殼的-c選項將其傳遞到外殼以執行。 如果未指定命令,則執行交互式外殼程序。 sudo嘗試在運行外殼程序之前更改為該用戶的主目錄。 安全策略應將環境初始化為最少的變量集,類似於用戶登錄時出現的變量sudoers(5)手冊中的“ 命令環境”部分記錄了-i選項如何影響命令所在的環境。在使用sudoers策略時運行。

-u用戶

-u (用戶)選項使sudo以root以外的用戶身份運行指定的命令。 要指定uid而不是用戶名,請#uid 當將命令作為uid運行時,許多shell要求使用反斜杠(' \\ ')對#進行轉義。 安全策略可能會將uid限制為密碼數據庫中列出的uid。 只要未設置targetpw選項, sudoers策略就允許不在密碼數據庫中的targetpw 其他安全策略可能不支持此功能。

謝謝大家的答案 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM