필자는 파이썬 3.2.3으로 작성한 공유 git 저장소 작성 스크립트를 사용하고 있으며 대다수의 스크립트가 작동하고 거의 생산 준비가되어 있지만 (여전히 보안을 유지해야 함)), 나는 어색한 버그에 빠져 있었고, 나는 내 인생에 대해 알 수 없다. 내 반복적 인 변경 모드 섹션 동안이상한 os.chmod 동작
:
try:
if (args.debug):
print('Recursively changing the access mode of target directory ' + full_path +
' to ' oct(stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) + '.')
if (args.debug):
print('setting ' + full_path +
' to stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH ')
os.chmod(full_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH)
for root, dirs, files in os.walk(full_path):
for spam in dirs:
if (args.debug):
print('spam in dirs: ' + spam +
'; stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH: ')
os.chmod(os.path.join(root, spam), stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH)
for eggs in files:
if (args.debug):
print('eggs in files: ' + eggs +
'; stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH: ')
os.chmod(os.path.join(root, eggs), stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH)
except OSError as e:
if (args.debug):
print('OSError raised during recursive chmod ' +
oct(stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH) + ' setting. ' +
'Removing the partially created repository.')
shutil.rmtree(full_path)
것은 나는 문제에 실행 된 - 올바르게 제대로 내 디렉토리 권한을 설정 아니에요. 실제로, 그것은 완전한 반대를하고있다; 그것은 모든 나의 디렉토리 허가를 벗겨 내고있다. 디렉토리 트리 스크립트를 실행 한 후이 유사합니다
d-----S--- 7 mat users 4096 Jul 3 23:10 test
ls: cannot open directory /home/mat/git/test: Permission denied
합니다 (setgid를 비트는 나중에, 작업 루프로 설정)로, 는 물론, 내가 모르는 뭔가가있어,하지만 난 정확히 말할 수 없다 stat 모듈의 상수를 사용하고 있습니다. 그리고 그들을 함께 biting ORing 내가 찾는 0o744 값을 얻을 수 있습니다.
누구나 내가 stat 모듈의 상수 대신에 8 진수를 사용한다고 제안하기 전에, 같은 결과로 시도해 보았습니다.
도움이 될 것입니다. ~ M
귀하의 setgid 루프가 다른 권한을 삭제할 수 있습니까? –
@ire_and_curses : 질문의 코드가 괜찮은 것 같아서 답변이 될 수 있습니다. – EOL
@shadowjester :'if (args.debug)'에 괄호를 넣는 것은 매우 드문 일입니다; 그들을 제거하는 것이 좋을 것입니다. 비슷하게, 문자열을 출력하기 위해서'format()'문자열 메소드를 사용할 수 있습니다 : 이것은 다중 문자열 연결을 사용하는 것보다 더 일반적입니다. – EOL