如何在linux中模拟

Posted

技术标签:

【中文标题】如何在linux中模拟【英文标题】:how to impersonate in linux 【发布时间】:2014-04-15 09:04:05 【问题描述】:

我在 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) 下解决此问题的方法。

【问题讨论】:

【参考方案1】:

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

如果您使用例如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)

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

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

【讨论】:

以上是关于如何在linux中模拟的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cygwin(Linux 模拟器)中使用 Eclipse(IDE)?

如何在 Linux Mint 中以编程方式发送密钥(模拟密钥输入)?

linux container 安装,或者说如何在android平台上安装linux软件

如何在linux下 安装pcsxr

如何利用Ptrace拦截和模拟Linux系统调用

如何在 qemu 模拟器中构建和运行 .img 文件?