리눅스는 각각의 파일과 디렉터리마다 소유권과 허가권이라는 속성이 있습니다.
ls -l
다음과 같은 명령을 하면 sample.txt에 대한 파일에 대한 정보가 아래와 같이 출력됩니다.
띄어쓰기를 기준으로
어떤 파일의 종류인지 나타냅니다.
rw- r-- r--
rw-는 읽거나 쓸 수 있지만 실행할 수 없습니다.
rwx는 읽고, 쓰고, 실행 가능합니다.
첫 번째 rw-
는 소유자(User)의 파일 접근 권한을,
두 번째 r--
는 그룹(Group)의 파일 접근 권한을,
세 번째 r--
는 그 외 사용자(Other)의 파일 접근 권한을 의미합니다.
각 세자리를 이진수화하여 표현 가능합니다.
가능(1) 불가능(0)
rw- r-- r--
을 예로 들자면
6 4 4
로 표현 가능합니다.
참고로 디렉터리(폴더)는 해당 디렉터리로 이동하려면 반드시 실행(x) 권한이 있어야합니다.
그래서 디렉토리는 일반적으로 소유자/그룹/기타 사용자 모두에게 실행(x) 권한이 설정되어 있을 것입니다.
cf. 파일 확장명
Windows의 경우 확장자로 파일 종류를 판단하지만, 리눅스는 확장자에 별 의미를 두지 않습니다.
확장명을 갖더라도 큰 의미를 갖지 않으며, 파일의 종류를 확인하려면 file명령어를 사용합니다.
파일 소유권은 파일을 소유한 사용자와 그룹을 의미합니다.
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 사용자만 실행할 수 있다.
파일의 링크는
ln 링크대상파일이름 링크파일이름
명령을 실행cf. inode란?
리눅스/유닉스에서 사용되는 자료 구조로, 파일이나 디렉터리의 여러가지 정보가 있다. 디렉터리는 각자 1개씩 inode가 있으며, 각 inode는 해당 파일의 소유권, 허가권, 파일 종류등의 정보와 해당 파일의 실제 데이터 위치(주소)도 있다. 이러한 inode가 모여 있는 공간이 inode 블록이며, 일반적으로 전체 디스크 공간의 1%를 차지한다. Data 블록은 실제 데이터가 저장된 디스크 공간으로 전체 디스크의 대부분을 차지한다.