как олицетворять в Linux

Я разработал многоплатформенное настольное приложение на Python и PyQt, и в нем я хочу реализовать концепцию олицетворения. У меня есть требование, когда пользователь выбирает файл, а приложение проверяет соглашения об именах и другие вещи. Если все в порядке, он копирует файл на сервер, где только олицетворенный пользователь говорит, что (user123) имеет полные разрешения, у другого есть только разрешения на чтение.

Я мог добиться этого в Windows, используя win32security и win32con

ДЛЯ ПЕРСОНАЛЬНОГО ВХОДА

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).


person Rao    schedule 15.04.2014    source источник


Ответы (1)


Во-первых, подумайте, действительно ли ваша задача требует олицетворения на уровне ОС.

  • Если вы используете, например, PySmbClient для доступа к общему файловому ресурсу Windows, затем вы сами управляете всеми подключениями и можете просто предоставить smbclient разные учетные данные.

  • Если вы используете PyKDE4.kio, насколько я знаю, то же самое применимо (KIO использует smbclient).

  • Если вы обращаетесь к файловому серверу через существующее монтирование на уровне системы, фактического «олицетворения», как в Windows, не происходит; это делается путем простого изменения эффективного UID процесса. и обычно это можно сделать, только если программа имеет привилегии root (или эквивалентные привилегии CAP_SETUID в Linux).

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

    (Это не гарантирует работу с сетевыми файловыми системами, которые хранят учетные данные в связках ключей ядра ... У меня пока нет ответа.)

  • Однако большинство программ для настольных компьютеров не имеют прав суперпользователя (и не должны их иметь). В этом случае seteuid () недоступен, и привилегированные действия обычно выполняются привилегированным демоном, с которым настольное приложение связывается с помощью некоторой формы IPC (обычно D-Bus).

person user1686    schedule 28.04.2014