chmod Recursive로 디렉토리 및 파일 권한 관리하기

파일과 디렉토리 권한을 수동으로 변경해야 하는 것에 지치셨나요? 파일과 디렉토리 권한을 더 빠르고 효율적으로 수정할 수 있는 방법을 찾고 계신가요? 그렇다면 이 글을 읽으신다면 올바른 곳에 오신 것입니다. 이 기사에서는 명령어 chmod를 사용하여 파일과 디렉토리 권한을 재귀적으로 변경하는 방법을 배울 수 있습니다.

자세한 내용은 계속 읽어보세요!

사전 준비 사항

따라하기 위해서는 Linux 장치와 연습용으로 사용할 파일 및 하위 디렉토리 권한이 있는 디렉토리가 필요합니다.

Linux 사용자 및 그룹에 대해 알아보기

소유자와 그룹은 Linux에서 파일과 디렉토리를 안전하게 관리하기 위해 중요합니다. 소유자는 파일 또는 디렉토리가 할당된 사람으로, 기본적으로는 생성자입니다. Linux에서 파일과 디렉토리는 그룹에도 속합니다. 사용자와 그룹은 chown 명령어를 통해 설정됩니다.

아래 스크린샷에서 초록색으로 강조된 내용은 파일이나 디렉토리를 소유하고 있는 사용자인 mihail을 보여줍니다. 파란색으로 강조된 내용은 파일이나 디렉토리가 속한 그룹을 나타내며, 이 예시에서는 staff 그룹이 소유하고 있습니다.

Listing the owner and group of a set of files and directories

리눅스 파일 및 디렉토리 권한 이해하기

권한은 사용자 또는 그룹이 특정 파일이나 디렉토리에서 수행할 수 있는 작업을 설정합니다. 권한은 문자로 표시되며 숫자 값으로도 할당됩니다.

  • 읽기 (r 또는 4): 사용자 또는 그룹이 파일이나 디렉토리의 내용을 읽을 수 있는지 여부를 나타냅니다. 읽기 권한은 모든 새로 생성된 파일과 디렉토리에 대해 기본적으로 모든 사용자에게 부여됩니다.
  • 쓰기 (w 또는 2): 사용자 또는 그룹이 개체의 내용을 편집할 수 있는지 여부를 나타냅니다. 이 권한은 기본적으로 파일이나 디렉토리 소유자에게만 부여됩니다.
  • 실행 (x 또는 1): 사용자 또는 그룹이 파일을 실행하거나 디렉토리 안에서 명령을 실행할 수 있는지 여부를 나타냅니다. 실행 권한은 기본적으로 디렉토리에만 부여되며 파일에는 부여되지 않습니다.

사용자(u)에게 디렉토리의 실행 권한을 부여하지 않으면 사용자는 디렉토리 내에서 명령을 실행할 수 없기 때문에 내용을 나열할 수 없습니다!

아래 예시에서는 ls -l 명령의 출력을 통해 다른 권한 유형을 확인할 수 있습니다. d 값으로 시작하는 권한은 디렉토리를 나타냅니다.

Listing file and directory permissions

그렇다면 왜 각 객체마다 seemingly 3개의 권한 세트가 있는 것일까요? 권한의 세부 제어는 이 튜토리얼에서 “파티”로 참조되는 섹션으로 권한을 나누어 구현됩니다.

  • 사용자 (u): 파일 또는 디렉토리의 소유자, 파란색으로 표시됨.
  • 그룹 (g): 파일 또는 디렉토리가 속한 그룹의 구성원, 초록색으로 표시됨.
  • 기타 (o): 명시적으로 할당되지 않은 모든 추가 사용자 및 그룹, 빨간색으로 표시됨.
Demonstrating the combined permissions for a file or directory

chmod 재귀적인 명령어를 사용하여 파일 권한 변경하기

적절한 Linux 권한 이해를 통해 파일 권한을 변경하는 방법을 알아보세요. 권한은 아래 예시와 같이 chmod 재귀적인 명령어를 통해 수정됩니다.

1. 우선, ls -l 명령어로 현재 권한을 확인하세요. 여기에는 my_dir/index.js 파일이 표시됩니다.

Checking the current permission of index.js.

2. chmod 명령어를 실행하고, 파티 (a: 모두)와 권한 (rwx: 읽기/쓰기/실행)을 지정하세요. 전체 명령어는 다음과 같습니다: chmod a=rwx index.js.

Changing index.js’ permissions.

3. 보시다시피, chmod 재귀적인 명령어는 어떤 출력도 반환하지 않습니다. 권한이 변경되었는지 확인하려면 다시 ls -l 명령어를 실행하세요.

Verifying index.js permissions

숫자 값으로 파일 권한 설정하기

읽기 또는 쓰기와 같은 권한과 관련된 숫자를 기억하시나요? 문자 값 대신 숫자로 특정 권한을 지정할 수 있습니다. 값들을 추가함으로써, 쓰기 (2)와 읽기 (4) 권한을 조합한 6과 같은 특정 권한을 만들 수 있습니다.

아래 예시에서는 명령어 chmod 664 main.py를 통해 main.py 파일의 권한을 설정합니다. 숫자 값은 다음과 같이 구성됩니다.

  • 사용자: 읽기 및 쓰기 (6).
  • 그룹: 읽기 및 쓰기 (6).
  • 기타: 읽기 (4).
Changing permissions for main.py.

권한이 변경되면 ls -l 명령어를 사용하여 main.py 파일의 새로운 권한을 확인합니다.

Verifying permissions for main.py

파일 권한 제거 및 추가

지금까지 사용한 비숫자 명령어는 명시적인 권한 설정을 위해 할당 매개 변수 (=)와 함께 chmod 재귀적으로 사용되었습니다. 대신 기존 권한 집합에서 권한을 제거 (-)하거나 추가 (+)할 수 있습니다.

1. 먼저, README.md 파일의 기존 권한을 명령어 ls -l README.md를 통해 나열합니다.

Checking README.md current permissions

2. 다음으로, README.md에 대해 사용자 파티 (u)에 실행 (x) 권한을 추가하고, 다른 파티 (o)에서 읽기 (r) 권한을 제거하기 위해 다음 명령어 chmod u+x,o-r README.md를 사용합니다. 다른 파티 권한은 쉼표 (,)로 구분됩니다.

Changing README.md permissions

3. ls -l README.md 명령어를 실행하여 권한이 수정되었는지 확인합니다.

Checking README.md new permissions

파일 및 디렉토리 권한 재귀적으로 변경하기

진행하고 있지만 한 번에 하나의 파일만 작동하고 있습니다. 만약 권한을 변경해야 할 파일이 많다면 어떨까요? 능력을 높이고 여러 파일의 권한을 변경하는 방법을 배워보세요.

여러 파일의 권한을 변경하는 옵션 중 하나는 chmod 명령을 재귀적으로 실행하는 것입니다. 재귀 옵션인 -R을 사용하면 주어진 경로 내에 있는 하위 디렉토리를 포함하여 모든 파일의 권한이 변경됩니다.

1. 다음 명령을 고려해보세요. chmod -R a=r,u=rwx my_dir. 대부분의 옵션은 이미 보셨을 것입니다.

이 명령은 재귀 옵션(-R)을 통해 디렉토리 my_dir과 그 하위 디렉토리에 있는 모든 파일의 권한을 변경합니다. 파일들은 모든 사용자(a)에 대해 읽기 가능(r)하며, 현재 사용자(u)에 대해서는 읽기, 쓰기, 실행 권한이 부여됩니다.

아래 스크린샷에서는 해당 명령을 실행한 후의 권한 변경 결과를 확인할 수 있습니다. 출력 결과는 없습니다.

Checking my_dir files new permissions

2. 이전과 동일한 디렉토리 my_dir에서 명령 chmod -R a=rwx my_dir을 실행한다고 가정해보세요. 다시 한번 my_dir과 그 하위 디렉토리에 있는 모든 파일의 권한이 변경되어 모든 사용자(a)에 대해 읽기, 쓰기, 실행 권한이 부여됩니다. 재귀적으로 실행되는 chmod은 출력 결과를 표시하지 않습니다.

Checking my_dir files new permissions to confirm every part now has every permission

3. 숫자 메소드는 어떨까요? 아래에 표시된 대로, 재귀 메소드는 숫자 권한과 함께 작동합니다, chmod -R 770 my_dir. 여기서는 사용자와 그룹에게 전체 권한을 부여하지만, 다른 사용자에게는 권한을 부여하지 않습니다.

Recursively changing permissions with the numeric method

4. ls -l을 실행하여 my_dir 파일과 하위 디렉토리의 권한이 숫자 메소드로 설정되었는지 확인하세요.

Checking the permissions set once again, this time with the numeric method

특별 권한을 통해 파일 및 폴더 동작 정의

특별 권한을 사용하면 표준 권한 집합과는 다른 여러 가지 추가 권한을 사용할 수 있습니다. 특별 권한은 총 세 가지 있습니다. 다음은 이러한 특별 권한의 작동 방식과 파일 또는 디렉토리에 이러한 권한을 추가하는 방법입니다.

SUID (사용자 + S) 권한 설정하기

보통 SUID라고 표시되며, 사용자에 대한 특별 권한입니다. SUID는 단일 기능을 가지고 있습니다. 즉, SUID가 설정된 파일은 실행하는 사람에 관계없이 해당 파일의 소유자로서 실행됩니다.

예를 들어, index.js를 고려해보겠습니다. 추가적인 SUID 권한을 주려면, chmod u+s index.js를 실행합니다.

이제, ls -l index.js를 실행하면 사용자의 권한에 x 대신 s가 있는 것을 확인할 수 있습니다.

Checking index.js new permissions

SGID (그룹 + S) 권한 설정하기

보통 SGID라고 표시되며, 이 특별 권한은 두 가지 기능을 가지고 있습니다:

  • 파일에 대해 설정되면, 파일은 실행하는 사람에 관계없이 해당 파일을 소유하는 그룹으로 실행될 수 있습니다.
  • 디렉토리에 설정된 경우, 해당 디렉토리에서 생성된 파일은 디렉토리 소유자의 그룹 소유권으로 설정됩니다.

index.php 파일에 대해 연습해 보세요. 이 파일에 SGID 권한을 추가하려면 다음 명령을 실행하십시오: chmod g+s index.php.

이제, ls -l index.php를 실행하면 그룹의 퍼미션이 s로 표시됩니다.

Checking index.php new permissions

다음은 디렉토리로 이동하세요: my_dir. 다음 명령을 사용하여 이 디렉토리에 SGID 권한을 추가할 수 있습니다: chmod g+s my_dir. 이 디렉토리에서 생성된 파일은 이제 디렉토리 소유자의 그룹 소유권으로 설정됩니다. ls -ld my_dir을 사용하여 디렉토리의 새로운 권한을 확인할 수 있습니다 (매개변수 d는 출력을 디렉토리에만 제한합니다).

Checking my_dir new permissions

스티키 비트 권한 변경

마지막 특수 권한은 “스티키 비트”로 알려져 있습니다. 이 권한은 개별 파일에 영향을 주지 않습니다. 그러나 디렉토리 수준에서 파일 삭제를 제한합니다. 해당 디렉토리의 소유자만 해당 디렉토리 내의 파일을 제거할 수 있습니다.

익숙한 my_dir 디렉토리에 스티키 비트를 추가하세요. 다음과 같이 명령을 실행하십시오: chmod +t my_dir.

스티키 비트를 추가할 때, other 그룹(o)을 +t 앞에 표시하지 않습니다.

my_dir의 새로운 권한을 확인하면 아래 스크린샷에 표시된 것처럼 other 퍼미션에 대문자 T가 표시됩니다.

Checking my_dir new and special permissions

결론

축하합니다! 당신은 chmod 재귀에 대해 많은 주제를 다뤘습니다. 이제 전능한 chmod 도구로 발생하는 귀찮은 권한 문제를 해결할 준비가 되었습니다. 심지어 재귀(-R) 옵션의 힘을 활용하는 방법도 배웠습니다.

다음에 파일 또는 디렉토리 권한을 관리해야 할 때, 다양한 기능을 활용하여 chmod을 어떻게 구현할 계획이 있으신가요?

Source:
https://adamtheautomator.com/chmod-recursive/