오늘은 Linux에서 유저 및 그룹의 권한설정 방법에 대해 알아보겠습니다.
1. Linux의 사용자 및 그룹 개념
Linux는 여러 사용자가 접속할 수 있는 OS시스템입니다.
여러 사용자가 동시에 시스템을 사용할 수 있다는 것은,
그 사용자들이 사용한 파일과 권한들을 관리해 주어야 한다는 뜻입니다.
다양한 사용자들을 관리하기 위해,
모든 권한을 가진 root가 존재하구요.
나머지 사용자들은 그룹에 포함시켜 관리합니다.
2. group
각 파일은 소유자와 그룹에 속하며,
그룹에 속한 사용자들은 해당 그룹의 권한을 공유합니다.
group에 관한 정보들은
"/etc/group"에서 볼 수 있습니다.
아래 명령어로 쉽게 확인할 수 있습니다.
- cat /etc/group
나오는 정보는 다음과 같은 순서로 나오는 것을 볼 수 있습니다.
비밀번호는 "x"로 나와서 가려지구요. 그룹에 속한 사용자 이름도 가려지는 경우가 많습니다.
그룹명: 비밀번호: 그룹ID: 그룹에 속한 사용자 리스트(","로 구분)
/etc/passwd에서 사용자에 대한 정보가 기술되어 있습니다.
가장 처음에 나오는 사용자는 root이구요. ID도 0입니다.
사용자명: 비밀번호: 유저ID: 소속된 그룹의 ID: 전체이름: 홈디렉토리명: 기본Shell의 이름<bash>
3. 권한
3-1. 권한 표시
사용자와 권한에 대해 알아보았으니,
권한을 어떻게 설정하면 되는지 알아보죠.
권한은 크게 3가지로 나누어 집니다.
read의 r, write의 w, execute의 x로,
'r', 'w', 'x'이 세가지에 대해 알파벳만 보고 무슨 권한인지 알 수 있습니다.
- r: 읽기: 파일 내용을 읽거나 디렉토리 내용을 나열할 수 있는 권한.
- w: 쓰기: 파일 내용을 수정하거나 디렉토리 파일을 추가, 삭제할 수 있는 권한.
- x: 실행: 파일을 실행하거나 디렉토리에 접근할 수 있는 권한.
보통 서버에서 파일을 생성하고,
'ls -la'명령어를 실행해보면,
아래와 같이 파일의 권한이 나오는 것을 볼 수 있습니다.
순서대로 해석해 볼까요?
소유자와 그룹은 모든 권한을 가지고,
기타 사용자들은 읽기와 실행만 할 수 있도록 되어 있습니다.
- d: 디렉토리를 의미, 파일의 경우는 '-'로 표시
- rwx: 처음 세문자는 소유자의 권한
- read, write, execute 권한을 모두 소유
- rwx: 다음 세문자는 그룹의 권한을 의미(파일을 만든 사용자의 기본 그룹)
- read, write, execute 권한을 모두 소유read, execute 권한만 소유
- r-x: 다음 세문자는 기타 모든 사용자의 권한을 의미
- read, execute 권한만 소유
3-2. 숫자로 표현하는 권한
리눅스에서는 r,w,x에 각각 숫자로 매칭해서 권한을 설정할 수 있습니다.
실행(x)이1, 쓰기(w)가 2, 읽기(r)가 4입니다.
- r = 4
- w = 2
- x = 1
이숫자들을 이용해서 아래와 같이 사용할 수 있습니다.
chmod는 권한을 설정하는 명령어인데요.
755로 권한을 표시해 설정하였습니다.
chmod 755 filename
755라는 숫자를 자세히 볼까요.
리눅스에서 숫자로 권한을 설정할 때는,
3자리 숫자를 사용하는데요.
각각 다음과 같은 의미를 가지고 있습니다.
위치 | 권한 종류 | 의미 |
첫째자리 | 소유자(Owner) 권한 | 파일 소유자에 대한 권한 |
둘째자리 | 그룹(Group) 권한 | 파일의 권한을 공유하는 그룹에 대한 권한 |
셋째자리 | 기타 사용자(Other) 권한 | 소유자 및 그룹이 아닌 다른 사용자들에 대한 권한 |
만약,755라면 다음과 같은 의미가 되겠지요.
- 첫 번째 숫자 7: 소유자(owner)의 권한으로, 읽기(4) + 쓰기(2) + 실행(1) = 7
- 두 번째 숫자 5: 그룹(group)의 권한으로, 읽기(4) + 실행(1) = 5
- 세 번째 숫자 5: 기타 사용자(others)의 권한으로, 읽기(4) + 실행(1) = 5
그러니까, 모두 다 읽을 수는 있는데,
그룹사용자와 기타사용자는 쓰기는 못하며,
소유자, 그룹사용자, 기타사용자 모두 실행할 수 있다는 뜻 입니다.
만약 소유자나 그룹에 속해있지 않은 사용자는,
아무것도 못하게 하려면,
750으로 설정해주면 됩니다.
- 첫 번째 숫자 7: 소유자(owner)의 권한으로, 읽기(4) + 쓰기(2) + 실행(1) = 7
- 두 번째 숫자 5: 그룹(group)의 권한으로, 읽기(4) + 실행(1) = 5
- 세 번째 숫자 0: 아무 권한도 없음
2. 유저 권한 설정
2. sticky bit
sticky bit를 실제로 설정한 명령어를 보겠습니다.
- chmod -R 1777 /srv/http/my-project
위의 명령어와 옵션들은 각각 다음과 같은 의미를 가집니다.
- chmod: 파일 권한을 변경하는 명령어
- -R: 리커시브(재귀적) 옵션
- 지정한 디렉토리 내 모든 파일과 서브디렉토리에 대해 작업을 수행합니다.
- 1777: 권한을 나타내는 숫자로, 여기서는 특정한 권한 패턴을 나타냅니다.
- 이 패턴은 SUID와 sticky bit을 설정한 것입니다.
- 이 패턴은 SUID와 sticky bit을 설정한 것입니다.
위에서 1777이라는 숫자에 대해서 더 알아보겠습니다.
이는 다음과 같이 다시 구성되어 집니다.
- 1은 sticky bit
- Sticky bit은 디렉토리 내의 파일을 해당 파일의 소유자만이 삭제할 수 있도록 하는 보안 기능 중 하나입니다.
- 7은 소유자에게 읽기, 쓰기 및 실행 권한을 부여,
- 2는 그룹에게 읽기와 실행 권한을, 나머지
- 7은 다른 사용자에게 읽기, 쓰기 및 실행 권한을 부여합니다.
위에서 언급한, Sticky bit(스티키 비트)는 UNIX 및 유닉스 계열 운영 체제에서 사용되는 파일 및 디렉토리 권한의 일부로서, 특정 디렉토리 내에서 파일을 삭제하는 권한을 제한하는 보안 기능입니다.
일반적으로, 디렉토리 내의 파일은 해당 디렉토리에 쓰기 권한이 있는 사용자라면 누구나 삭제할 수 있습니다. 하지만 디렉토리에 sticky bit이 설정되어 있으면, 해당 디렉토리 내의 파일은 그 파일의 소유자만이 삭제할 수 있습니다. 다른 사용자는 자신이 만든 파일 외에는 삭제할 수 없습니다.
스티키 비트는 주로 /tmp 디렉토리와 같은 공유 디렉토리에서 여러 사용자가 파일을 생성하고 삭제할 때의 보안 이슈를 해결하기 위해 사용됩니다. 이렇게 하면 다양한 사용자가 서로의 파일을 보호할 수 있습니다.
4. 유저권한 읽기
ls -la를 해보면 아래와 같은 파일 권한이 왼쪽에 표시가 됩니다.
- drwxr-xr-x
위와 같은 권한이 있다고 하겠습니다.
무슨 의미일지 하나씩 보도록 하기전에,
아래 3가지 문자에 대해 이해하고 있어야 합니다.
구분 | 내용 |
r | 읽기(read) 권한 |
w | 쓰기(write) 권한 |
x | 실행(execute) 권한 |
이제 하나씩 보도록 하겠습니다.
- d: 디렉토리를 의미, 파일의 경우는 '-'로 표시
- rwx: 처음 세문자는 소유자의 권한을 의미
- read, write, execute 권한을 모두 소유
- r-x: 다음 세문자는 그룹의 권한을 의미(파일을 만든 사용자의 기본 그룹)
- read, execute 권한만 소유
- r-x: 다음 세문자는 기타 모든 사용자의 권한을 의미
- read, execute 권한만 소유
정리해 보면, 이 파일을 생성한 소유자만 쓰기 권한을 가지고,
나머지 사용자들은 모두 읽기와 실행권한만 가지고 있습니다.
4. 실행권한 추가하기
리눅스에서 스크립트 파일을 생성했는데,
실행권한이 없으면,
당연히 실행이 되지 않습니다.
'ls -la' 명령어를 실행해 보면,
아래와 같이 되어 있는 것을 볼 수 있습니다.
-rw-r--r-- 1 user staff 812 Jan 1 11:51 docker-cleanup.sh
이럴 때는 아래 명령어를 입력해 주기만 하면 됩니다.
이 명령어는,
소유자(u)에게 읽기, 쓰기, 실행 권한을 부여하고,
그룹(g)과 기타 사용자(o)에게 읽기와 실행 권한을 부여해 줍니다.
chmod +x <실행파일>
그럼 아래와 같이 바뀌는 것을 볼 수 있습니다.
그룹과 기타 사용자에게는 쓰기 권한인 w를 부여하지 않은 것을 볼 수 있습니다.
- -rwxr-xr-x 1 user staff 812 Jan 1 13:52 docker-cleanup.sh
만약 소유자에게만 실행권한을 추가하려고 한다면 아래와 같이 명령어를 넣어주면 됩니다.
chmod u+x <실행파일>
당연히 실행권한을 최소화 하는 것이 보안에 도움이 되겠지요.
'Linux > Linux 명령어, 스크립트, 설정' 카테고리의 다른 글
리눅스에서 자주 사용하는 스크립트 사용법 총정리 (0) | 2025.01.14 |
---|---|
실행중인 서버의 IP주소 알아내기: ifconfig (1) | 2024.09.14 |
linux 환경변수 설정 방법 정리: Bash 와 Z Shell PATH 및 기본 에디터 변경(Nano) (0) | 2024.04.09 |
Linux 명령어 및 단축키 중 자주 사용하게 되는 것 정리 # 권한변경 (1) | 2024.02.01 |
SCP로 서버에 파일 전송하기: 리눅스 기반 안전한 파일 전송 방법 (1) | 2024.01.31 |
Script를 실행하는 방법:Linux Bash Shell Script (0) | 2020.04.25 |
댓글