如何在Linux冒充(how to impersonate in linux)

2019-10-19 21:03发布

我已经开发了Python和PyQt的一个多平台的桌面应用程序,并在其中我想实现模拟的概念。 我在那里用户选择一个文件和应用程序将检查命名约定和其他的东西的要求。 如果一切都很优良然后将其复制到服务器只有模拟用户的文件可以说(user123)有其他的完全权限只读取权限。

我可以能够通过实现这个在windows win32securitywin32con

冒充LOGIN

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)下一个方法了这一点。

Answer 1:

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

  • 如果您使用如PySmbClient访问Windows文件共享,那么你管理所有连接你自己,你可以只给不同的凭据SMBCLIENT。

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

  • 如果在现有的系统级访问文件服务器的安装,没有实际的“冒充”作为Windows; 它是通过简单地改变处理完成‘有效UID’ ,一般只有在程序具有特权(或Linux上的根等效CAP_SETUID特权)来完成。

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

    (这并不能保证与存储在内核钥匙扣凭据网络文件系统的工作......我还没有一个答案。)

  • 然而,大多数的桌面程序没有root权限( 不应该让他们)。 在这种情况下,个seteuid()是不可用,特权行为是由使用某种形式的IPC(通常d-总线)的桌面应用中的联系人特权守护程序正常进行。



文章来源: how to impersonate in linux