Python: проверка аутентификации NFS

Ребята, я полагаю, что у меня есть два вопроса: один специфичен для python, а другой - для NFS.

Суть в том, что моя программа получает «имя пользователя», «uid», IP-адрес сервера NFS и exported_path в качестве входных данных от пользователя. Теперь он должен убедиться, что экспортированный путь NFS доступен для чтения/записи этим пользователем/uid.

Моя программа работает как root на локальной машине. Прямой подход состоит в том, чтобы «useradd» пользователя с заданным именем пользователя и uid, смонтировать экспортированный путь NFS (запустить как root для монтирования) на некоторую временную точку монтирования, а затем выполнить «su username -c коснитесь /mnt_pt/tempfile'. ЕСЛИ имя пользователя и идентификатор пользователя введены правильно (и сервер NFS настроен правильно), это касание временного файла приведет к успешному созданию tempfile в удаленном каталоге NFS. Это цель.

Теперь два вопроса: (i) Есть ли более простой способ сделать это, чем создать нового пользователя unix, смонтировать и коснуться файла для проверки разрешений NFS?

(ii) Если это то, что нужно сделать, то мне интересно, есть ли какие-либо модули/пакеты python, которые помогут мне выполнить команды, связанные с «useradd», «userdel»? В настоящее время я намерен использовать соответствующие двоичные файлы (/usr/sbin/useradd и т. д.), а затем вызвать subprocess.Popen для выполнения команды и получения вывода.

Спасибо за любое понимание.


person helpmelearn    schedule 20.03.2011    source источник
comment
Я не понимаю, почему вы делаете useradd и su, если вы уже работаете как root. Почему бы просто не сделать setuid или seteuid?   -  person Gabe    schedule 20.03.2011


Ответы (2)


i) Вы могли бы сделать что-то более загадочное, но, не прикасаясь к файлу, вы, вероятно, не собираетесь тестировать именно то, что вам нужно тестировать, поэтому я думаю, что, вероятно, сделаю это так, как вы предлагаете.

ii) Вы можете проверить модуль python pwd, если хотите проверить существование пользователя. или тому подобное, но вам, вероятно, придется использовать сами программы useradd/userdel для выполнения грязной работы.

Возможно, вы захотите рассмотреть возможность использования sudo для своей программы, чтобы все это не приходилось запускать от имени пользователя root, это кажется довольно рискованным предложением.

person easel    schedule 20.03.2011
comment
Спасибо. Взглянув на pwd, может быть полезно проверить, существует ли уже это имя пользователя и т. Д. Что касается запуска sudo, то мое быстрое исследование, похоже, показало, что нет никакого способа программно sudo (он будет запрашивать pwd). Если вы знаете способ, пожалуйста, прокомментируйте. Есть и другие причины, по которым для моей программы может потребоваться запуск root, но мне любопытно, можно ли запустить sudo в скрипте! - person helpmelearn; 20.03.2011
comment
Вы можете предоставить разрешения sudo конкретному пользователю для выполнения определенных команд и разрешить их выполнение без запроса пароля. Например, вот строка sudoers, которую я использую, чтобы разрешить веб-серверу запускать trac-хук через sudo на компьютере с Ubuntu: www-data ALL = (ALL) NOPASSWD: /home/trac/trac-ve/bin/trac-post-commit-hook. Man sudoers довольно сложно интерпретировать, но в нем есть все, что вам нужно. - person easel; 20.03.2011

Существует набор Python для тестирования функциональности сервера NFS.

git://git.linux-nfs.org/projects/bfields/pynfs.git

Хотя это для NFSv4, вы можете просто принять его и для v3.

person kofemann    schedule 27.04.2012