python - 如何在 linux 中模拟

标签 python linux impersonation rhel

我用 python 和 PyQt 开发了一个多平台桌面应用程序,我想在其中实现模拟的概念。我有一个要求,用户选择一个文件,应用程序将检查命名约定和其他内容。如果一切正常,那么它会将文件复制到服务器中,只有模拟用户可以说 (user123) 具有完全权限,其他只有读取权限。

我可以通过使用 win32securitywin32con 在 Windows 中实现这一点

模拟登录

Self.handel=win32security.LogonUser(self.loginID,self.domain,self.password,win32con.LOGON32_LOGON_INTERACTIVE,win32con.LOGON32_PROVIDER_DEFAULT)
win32security.ImpersonateLoggedOnUser(self.handel)

并返回给用户

win32security.RevertToSelf()

谁能建议在 Linux (RHEL 6) 下解决这个问题的方法。

最佳答案

首先,考虑您的任务是否真的需要操作系统级别的模拟。

  • 如果您使用例如PySmbClient 访问 Windows 文件共享,然后您自己管理所有连接,您只需向 smbclient 提供不同的凭据即可。

  • 如果您使用 PyKDE4.kio,据我所知同样适用(KIO 使用 smbclient)。

  • 如果您通过现有的系统级装载访问文件服务器,则不会像在 Windows 中那样进行实际的“模拟”;只需更改流程即可完成'"effective UID"通常只有当程序具有 root 权限(或 Linux 上的 root 等效 CAP_SETUID 权限)时才能完成。

    uid = pw.getpwnam(username).pw_uid
    
    os.seteuid(uid)
    ...
    os.seteuid(0)
    

    (这不能保证与在内核 key 环中存储凭据的网络文件系统一起工作......我还没有答案。)

  • 但是,大多数桌面程序没有 root 权限(而且不应该有)。在这种情况下,seteuid() 不可用,特权操作通常由桌面应用使用某种形式的 IPC(通常是 D-Bus)联系的特权守护进程完成。

关于python - 如何在 linux 中模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23079096/

相关文章:

python - ImageMagick 未授权将 PDF 转换为图像

linux - 对 bash 行为感到困惑 - Bash/awk mystery

c - 写入宽字符流

子进程中的 C++ windows LocalSystem 模拟失败

c# - 使用 ASP.NET 设置模拟

python - 如何将对话框按钮链接到主窗口功能并使关闭事件与功能分开

python - 在删除发布后段的同时增加预发布的bump2version

python - 使用静态方法而不是函数中的子函数的必要性

linux - tar 创建一个空文件夹,我该如何摆脱它?

c# - 帮助理解模拟