Python Изменение разрешения Dir и всех Subdirs - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь выполнить следующую команду в Python:

shutil.rmtree('/var/www')

, но это дает мне следующую ошибку:

PermissionError: [Errno 13] Permission denied: '/var/www'

Я пытался выполнить эту команду до этогокоманда для изменения прав доступа к каталогу

subprocess.call(['sudo', 'chmod', '-R', '777', '/var/www'])

Что, я думаю, работает, потому что она запрашивает у меня пароль sudo и не выдает ошибку, однако, когда я прихожу к команде rmtree, она все равно выдает

Permission denied: '/var/www'

Что я делаю не так?Также мне нужно, чтобы это работало без запроса пароля sudo во время выполнения.Есть ли способ вставить мой пароль в скрипт Python?

Спасибо

1 Ответ

0 голосов
/ 26 мая 2018

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

chmod -R g+w /var/www/

Что касается второгоВ ответ на ваш вопрос, sudo может прочитать пароль из стандартного ввода, используя флаг -S, который может быть включен в ваш скрипт.Вот пример:

$ echo "password" | sudo -S <command>

Быстрый просмотр страницы man sudo:

-S, --stdin

Запишите подсказку к стандартной ошибке и прочитайте пароль из стандартного ввода вместо использования терминального устройства.За паролем должен следовать символ новой строки.

Другой способ сделать это (который также должен быть добавлен в ваш скрипт):

sudo -S <<< "password" command

Другой подход заключается вотключите запрос пароля, отредактировав файл sudoers с помощью команды visudo и добавив следующую строку:

username ALL=(ALL) NOPASSWD: ALL

Приведенная выше строка позволит username выполнять все команды (последняя ALL)под любым пользователем без запроса пароля.

Безопасный и более ограниченный способ сделать это - использовать:

username ALL=(ALL) NOPASSWD: /usr/bin/python myscript.py

На этот раз мы ограничили username для этого типавыполнения, но для одной команды /usr/bin/python myscript.py.

Я также предпочел бы тщательно проверить разрешения и протестировать эти команды непосредственно из оболочки, прежде чем использовать их в скрипте Python.Это может сэкономить вам много времени на устранение неисправностей.

...