파이썬 관련 포스팅 목록
2021.11.28 - [Python/os] - Python 현재 작업 경로 가져오기(os.getcwd)
2021.11.27 - [Python/os] - Python 작업 경로 및 디렉토리 변경(os.chdir)
2021.01.08 - [Python/os] - Python 시스템 환경변수 가져오기(os.environ)
2020.06.29 - [Python/os] - Python split 함수(문자열 자르기)
2020.06.24 - [Python/os] - Python 파일 읽기, 쓰기(FILE I/O)
2020.04.29 - [Python/os] - Python For문
Python os.chown함수를 이용하여 특정 파일 소유자 변경하기
안녕하세요.
오늘은 파이썬 os 모듈의 chown 함수에 대해 알아보겠습니다.
chown 함수는 특정 파일의 소유자 또는 속한 그룹을 변경할 때 사용하는 함수입니다.
리눅스에서는 파일 소유자와 그룹, 권한 등이 강력하게 요구됩니다.
우리가 흔히 하는 777은 읽기(4), 쓰기(2), 실행(1) 명령이 모두 부여된다하여 7입니다. 그리고 7이 3개인 이유는 리눅스의 파일 시스템 권한은 맨 앞에서부터 아래와 같습니다.
위의 내용으로 해석하면 777 이란 권한은 해당 파일의 소유자는 해당 파일의 읽기, 쓰기, 실행이 가능합니다. 또한 해당 그룹에 속한 사용자들은 해당 파일의 읽기, 쓰기, 실행이 가능합니다. 마지막으로 그 외 사용자들도 동일한 권한을 가집니다.
따라서 리눅스에서 777 권한을 함부로 남발하여 설정하는 것은 보안성에 취약합니다.
일반적으로 리눅스에서 chown 명령을 사용하여 파일의 소유자를 변경할 수 있습니다.
하지만 파이썬 코드에서도 가끔 파일의 소유자를 변경해야 할 때가 있습니다.
이때 사용하는 것이 os.chown 함수입니다.
함수 구조
함수가 포함된 모듈명
os
함수 원형
chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
인자
path: 파일 소유자를 변경할 파일의 경로명
uid: 바꿀 소유자의 id 값
gid: 바꿀 그룹의 id 값
예제 코드 작성
import os
def get_file_owner(path):
return os.stat(path).st_uid
def print_owner(path):
print('current %s\'s owner : %s' % (path, get_file_owner(path)))
path = '/home/avmd/test.txt'
print_owner(path)
os.chown(path, 1001 1001)
print_owner(path)
라인 설명
6: 파일의 현재 소유자를 출력하는 print_owner 함수를 선언한다.
10: test.txt 파일의 현재 소유자를 출력한다.
12: os 모듈의 chown 함수에 test.txt 파일 경로와 변경할 uid, gid를 인자로 전달한다. 이때 python 명령으로 chown 소유자 변경이 가능한 상태에서 수행해야 한다.
13: 변경된 소유자를 출력한다.
결과
위와 같이 기존의 avmd 사용자의 uid 였던 1000에서 os.chown 인자로 전달한 1001 uid로 소유자가 변경된 것을 알 수 있었습니다.
하지만 chown 사용이 불가능한 권한으로 python 모듈을 실행할 경우 Permission 에러와 함께 예제 코드가 실패할 수 있음을 알아야 합니다. 리눅스는 파일의 소유자 변경이 아주 까다롭기 때문에 일반적인 상황에서 쓰이는 코드는 아닙니다.
마무리
오늘은 os 모듈의 chown 함수에 대하여 알아보았습니다.
우리가 파이썬 코드 개발 중에 흔하게 쓰이는 함수는 아니지만 리눅스 시스템에서 권한과 소유자에 대해 이해하는 데 있어서 chown 함수의 기능 파악도 중요합니다.
또한 리눅스가 아닌 윈도우는 권한 및 소유자 시스템이 전혀 다르기 때문에 잘 사용해야 할 것 같습니다.
관련 글
파이썬 관련 포스팅 목록
2021.11.28 - [Python/os] - Python 현재 작업 경로 가져오기(os.getcwd)
2021.11.27 - [Python/os] - Python 작업 경로 및 디렉토리 변경(os.chdir)
2021.01.08 - [Python/os] - Python 시스템 환경변수 가져오기(os.environ)
2020.06.29 - [Python/os] - Python split 함수(문자열 자르기)