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