[ Linux ] 파일, 디렉터리의 소유권 허가권

ma.caron_g·2022년 10월 22일
0

Linux

목록 보기
5/7
post-thumbnail

[ 소유권과 허가권 ]

리눅스는 각각의 파일과 디렉터리마다 소유권과 허가권이라는 속성이 있습니다.

[ 정보 ]

ls -l

다음과 같은 명령을 하면 sample.txt에 대한 파일에 대한 정보가 아래와 같이 출력됩니다.

띄어쓰기를 기준으로

[ 파일 유형 ]

-

어떤 파일의 종류인지 나타냅니다.

  • 디렉토리(d)
  • 일반 파일 (-)
  • 블록 디바이스(d)
  • 문자 디바이스(c)
  • 링크 (l)...

[ 파일 허가권 ]

rw- r-- r--

  • r은 read
  • w는 write
  • x는 execute

rw-는 읽거나 쓸 수 있지만 실행할 수 없습니다.
rwx는 읽고, 쓰고, 실행 가능합니다.

첫 번째 rw-는 소유자(User)의 파일 접근 권한을,
두 번째 r--는 그룹(Group)의 파일 접근 권한을,
세 번째 r--는 그 외 사용자(Other)의 파일 접근 권한을 의미합니다.

각 세자리를 이진수화하여 표현 가능합니다.
가능(1) 불가능(0)

rw- r-- r--을 예로 들자면
6 4 4로 표현 가능합니다.

참고로 디렉터리(폴더)는 해당 디렉터리로 이동하려면 반드시 실행(x) 권한이 있어야합니다.
그래서 디렉토리는 일반적으로 소유자/그룹/기타 사용자 모두에게 실행(x) 권한이 설정되어 있을 것입니다.

cf. 파일 확장명

Windows의 경우 확장자로 파일 종류를 판단하지만, 리눅스는 확장자에 별 의미를 두지 않습니다.
확장명을 갖더라도 큰 의미를 갖지 않으며, 파일의 종류를 확인하려면 file명령어를 사용합니다.

[ 파일 소유권 ]

root(소유자) root(그룹명)

파일 소유권은 파일을 소유한 사용자와 그룹을 의미합니다.
root라는 이름의 사용자가 소유자이며 그룹도 root입니다.

파일의 소유권을 바꾸기 위한 명령어는 chown(change owner)입니다.
사용법은

#chown 새로운사용자이름(.새로운그룹이름) [파일 이름]
>
chown newUser.newGroup sample.txt
# 소유자 이름을 newUser로, 그룹을 newGroup으로 바꿔라.
chown newUser sample.txt
# 소유자 이름만 newUser로 바꿔라.
chgrp newGroup sample.txt
# 소유그룹만 newGroup으로 바꿔라.

파일 속성 변경

# test파일을 작성하고 정보 확인
$ ls -l test
-rw-r--r-- 1 root root 118 Oct 17 10:08 test
# 현재 사용자를 확인
$ whoami
root
# test파일 실행
$ ./test
# 거부됨. - 실행(x)권한이 없으므로 권한을 부여해준다.
-bash: ./test: Permission denied
# 이진수를 통한 파일의 허가권을 변경
$ chmod 755 test
# 파일의 허가권 확인
$ ls -l test
-rwxr-xr-x 1 root root 118 Oct 17 10:08 test
# 파일 실행
$ ./test
./test: line 1: 안녕하세요?: command not found
./test: line 3: 검정: command not found
#마지막 줄에 ls를 입력했더니 ls 명령어가 실행되어 다음 목록들을 출력
sample.txt  snap  test

소유권 변경

# 소유자 변경
$ chown ubuntu test
$ ls -l test
-rwxr-xr-x 1 ubuntu root 114 Oct 17 10:20 test
$
$
# 그룹 변경
$ chgrp ubuntu test
$ ls -l
-rwxr-xr-x 1 ubuntu ubuntu 114 Oct 17 10:20 test

사용자 변경

# su - ubuntu를 통해 사용자 변경
root@:~# su - ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
#
#
#ubuntu로 변경
ubuntu@:~$ pwd
/home/ubuntu
ubuntu@:~$ ls -l /root/test
ls: cannot access '/root/test': Permission denied
# root 디렉터리의 속성 확인
ubuntu@:~$ ls -ld /root
drwx------ 7 root root 4096 Oct 17 10:20 /root

파일을 ubuntu로 소유권을 넘겨주었지만 /root 디렉터리의 속성이 drwx-------로 되어 있기 때문에 접근이 거부되었다.

사용 가능하도록 변경해보자.

# root계정으로 돌아감
$ exit
logout
# ubuntu 폴더에 test 파일을 복사
$ mv test ~ubuntu
# ubuntu로 다시 접속
$ su - ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@hancoma-183098:~$ ls -l test
-rwxr-xr-x 1 ubuntu ubuntu 114 Oct 17 10:20 test
$./test
./test: line 1: 안녕하세요?: command not found
./test: line 3: 검정: command not found
test

다시 파일의 소유자를 root로 변경

$ chown root.root test
chown: changing ownership of 'test': Operation not permitted

오류가 발생하는데 이는, test파일에 바이러스를 심어서 소유를 root로 변경해버리면 ubuntu사용자는 root에게 바이러스 파일을 전달하는 것이다.
그러므로 파일의 소유권을 바꾸는 chown 명령어는 root 사용자만 실행할 수 있다.

[ 링크 ]

파일의 링크는

  • 하드 링크(Hard Link)
    • 원본 inode1 dmf 사용할 때, 하드 링크를 생성하면 하드 링크 파일만 하나 생성되며 같은 inode1을 사용하게 된다.
      하드 링크를 생성하려면 ln 링크대상파일이름 링크파일이름 명령을 실행
  • 심볼릭 링크(Symbolic Link / Soft Link)

cf. inode란?

리눅스/유닉스에서 사용되는 자료 구조로, 파일이나 디렉터리의 여러가지 정보가 있다. 디렉터리는 각자 1개씩 inode가 있으며, 각 inode는 해당 파일의 소유권, 허가권, 파일 종류등의 정보와 해당 파일의 실제 데이터 위치(주소)도 있다. 이러한 inode가 모여 있는 공간이 inode 블록이며, 일반적으로 전체 디스크 공간의 1%를 차지한다. Data 블록은 실제 데이터가 저장된 디스크 공간으로 전체 디스크의 대부분을 차지한다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글