배포 스크립트에 실행 권한만 주고 싶어서 chmod 755 deploy.sh를 입력하는 경우가 많다. 동작은 할 수 있지만, 원래 권한을 확인하지 않았다면 그룹과 다른 사용자에게 읽기·실행 권한까지 새로 열어 버린다. 권한을 '추가'하려는지, 세 자리 값을 '설정'하려는지부터 나누면 이 실수를 피할 수 있다.
chmod 755는 권한을 추가하는 명령이 아니다
숫자 권한은 소유자·그룹·기타 사용자 순서로 읽는다. 7은 읽기·쓰기·실행, 5는 읽기·실행이다. 따라서 chmod 755 deploy.sh는 현재 상태와 관계없이 파일 권한을 정확히 rwxr-xr-x로 다시 맞춘다.
예를 들어 배포 스크립트가 처음에 640이라면 소유자는 읽고 쓸 수 있고, 그룹은 읽을 수 있으며, 기타 사용자는 아무 권한이 없다.
640 = rw-r-----여기서 755를 지정하면 소유자의 실행 권한뿐 아니라 그룹과 기타 사용자의 실행 권한도 생긴다. 기타 사용자에게 읽기 권한도 생긴다. 파일이 실행 가능해진 사실만 보면 성공처럼 보이지만, 실제 변경 범위는 훨씬 크다.
755 = rwxr-xr-x실행 권한 하나만 더하려면 chmod u+x를 사용한다
기호 모드는 '누구의 어떤 권한을 어떻게 바꿀지'를 직접 말한다. u는 소유자(user), +는 추가, x는 실행 권한이다.
chmod u+x deploy.sh같은 640 파일에 이 명령을 적용하면 결과는 740이다.
처음: 640 rw-r-----
chmod u+x: 740 rwxr-----
chmod 755: 755 rwxr-xr-xu+x는 소유자의 실행 비트만 건드리므로, 원래 있던 그룹 읽기 권한과 기타 사용자 권한은 그대로 남는다. 이미 필요한 권한을 세심하게 잡아 둔 파일이라면 이 차이가 중요하다.
같은 파일에서 변경 범위를 확인해 보자
운영 파일이 아니라 빈 파일로 결과를 먼저 보면 명령의 성격이 더 선명해진다.
demo_dir=$(mktemp -d)
touch "$demo_dir/deploy.sh"
chmod 640 "$demo_dir/deploy.sh"
ls -l "$demo_dir/deploy.sh"
chmod u+x "$demo_dir/deploy.sh"
ls -l "$demo_dir/deploy.sh"
chmod 755 "$demo_dir/deploy.sh"
ls -l "$demo_dir/deploy.sh"권한 부분만 읽으면 다음 순서다.
-rw-r----- deploy.sh
-rwxr----- deploy.sh
-rwxr-xr-x deploy.sh처음 두 줄의 차이는 첫 번째 묶음, 즉 소유자 권한의 x 하나다. 마지막 줄은 세 묶음이 모두 달라졌다. 권한 명령 뒤에 ls -l로 결과를 보는 습관은 숫자를 외우는 것보다 실수를 빨리 찾게 해 준다.
여기서는 새 임시 디렉터리 안에 파일을 만들어 기존 deploy.sh를 건드리지 않는다. 파일 모드가 755여도 다른 사용자가 실제로 접근하려면 상위 디렉터리를 통과할 권한이 따로 필요하다. 이 예제는 파일 권한 비트의 변경 범위를 비교한다.
숫자 모드와 기호 모드는 언제 선택할까?
새 파일의 권한을 의도적으로 표준화할 때는 숫자 모드가 편하다. 예를 들어 팀 규칙으로 일반 실행 파일을 항상 750으로 정했다면 chmod 750은 그 규칙을 한 번에 적용한다.
반대로 이미 사용 중인 파일에서 한 비트만 바꾸려면 기호 모드가 안전하다. 다음처럼 변경 의도가 그대로 읽힌다.
# 소유자에게 실행 권한만 추가
chmod u+x deploy.sh
# 그룹의 쓰기 권한만 제거
chmod g-w deploy.sh
# 모든 사용자에게 읽기 권한 추가
chmod a+r README.txt권한을 넓히기 전에 그 파일이 비밀값, 설정값, 배포 스크립트 중 무엇인지도 확인하자. 실행이 안 된다는 이유만으로 777을 주는 것은 원인을 숨기고 쓰기 범위를 불필요하게 넓힌다. 실행 주체가 파일을 읽을 수 있는지, 파일이 있는 디렉터리를 통과할 수 있는지처럼 다른 조건도 함께 볼 필요가 있다.
핵심 요약
chmod 755는 실행 권한을 하나 더하는 명령이 아니라 파일의 아홉 권한 비트를 rwxr-xr-x로 다시 설정한다. 기존 권한을 보존한 채 소유자만 실행하게 하려면 chmod u+x를 사용하고, 실행 뒤에는 ls -l로 바뀐 범위를 확인하자.
작성자
기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

