Привилегии root, полученные с помощью sudo
, применяются только к команде, выполняемой через sudo, и не повышают привилегии вызывающего (в данном случае вашего python скрипта). Итак, ваша первая команда os.system("sudo su")
будет запускать интерактивную оболочку root, но после того, как вы выйдете из нее, а затем ваш код python выполнит последующий вызов os.system("other commands")
, они будут работать с правами обычного пользователя.
Вы можете запускать каждую команду по одной через sudo:
os.system("sudo some_command")
os.system("sudo some_other_command")
Обратите внимание, что каждая команда будет отдельно регистрироваться sudo
в системном журнале, даже если есть несколько команд , sudo
не следует запрашивать пароль более одного раза в течение короткого промежутка времени.
Или, если вам нужно выполнить последовательность шагов, таких как изменение каталогов, которые могут быть невозможны в вызывающей стороне (например, , если каталог недоступен для пользователя, отличного от root, который запускает сценарий python), вы можете сделать, например:
os.system("sudo sh -c 'cd some_dir && some_other_command'")
(только для информации, &&
- это похожа на ;
, но другая команда запускается только в случае успешного выполнения cd
, поэтому это безопаснее, хотя этот пункт относится к синтаксису оболочки, а не к python.)
Если много c ommands, конечно, у вас также есть возможность просто создать отдельный "вспомогательный" сценарий оболочки и запустить весь сценарий через sudo.
os.system("sudo sh /path/to/myscript.sh")
Наконец, обратите внимание, если вы используете свой python сценарий в неинтерактивной среде вам может потребоваться указать sudo
не запрашивать пароль, по крайней мере, для соответствующих вызывающих пользовательских и целевых команд. Для получения дополнительных сведений введите man sudoers
и найдите примеры с NOPASSWD
.