Python создает разрешения для каталога tmp - PullRequest
3 голосов
/ 01 марта 2011

Я использую скрипт python для создания копии файловой системы linux.У меня проблемы с разрешениями на созданный каталог / tmp.Каталог / tmp должен иметь 1777 разрешений, то есть:

ls -l /
drwxrwxrwt  17 root     root 16384 2011-03-01 09:50 tmp

, когда я делаю следующее,

os.mkdir('/mnt/tmp',1777)

Я получаю странные разрешения:

ls -l /
d-wxr----t 2 root root  4096 2011-03-01 09:53 tmp

ТогдаЯ задавался вопросом о umask и chmod, поэтому я попробовал это:

os.mkdir('/mnt/tmp')
old_mask=os.umask(0000)
os.chmod('/mnt/tmp',1777)
os.umask(old_mask)

, но я все еще получаю неожиданные разрешения:

ls -l /
d-wxrwS--t 2 root root  4096 2011-03-01 09:57 tmp

Однако, что ДАЕТ мне правильные разрешения для созданного каталогаэто следующее:

os.mkdir('/mnt/tmp')
os.system("chmod 1777 /mnt/tmp")

Я должен заметить, что я запускаю этот скрипт через sudo, но в / etc / sudoers не упоминаются никакие настройки umask.Запуск его как фактического пользователя root не имеет значения.Невозможно запустить его как обычный пользователь, так как я делаю копию FS, которая должна включать файлы, доступные только для root.

Есть идеи здесь?Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

9 голосов
/ 01 марта 2011

Вы должны предоставить разрешения в виде восьмеричного числа.В Python 2.x просто используйте 01777 вместо 1777.В Python 3.x используйте 0o1777.

1 голос
/ 01 марта 2011

Ваше разрешение должно быть в восьмеричном виде (777 в восьмеричном - 511 в десятичном виде). ​​

В Python, как и в C, 0555 - это 555 в основании 8 (восьмеричное). Если вы хотите 1777 в восьмеричном виде, используйте 01777. в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...