[CentOS - 센토스 리눅스] 04. File Directory & Permission (파일과 디렉터리의 소유와 허가권)
책을 보면 금새 이해가 가지만 사용하지 않으면 금새 까먹을 것 같은 부분을 정리해보았다.
파일에 있어서 디렉터리의 소유권 확인 및 변경에 관한 부분이다.
sample.txt 파일의 소유권을 확인해보자.
-rw-r--r-x. 2 root root 6 5월 27 17:24 sample.txt
맨 앞의 -는 파일유형
-rw-r--r-x. 는 파일허가권
- 일반파일
d 폴더(디렉터리)
l 링크파일(바로가기)
2는 링크수
root는 파일소유자이름
root는 파일소유그룹이름
6은 파일크기(byte)
5월 27 17:24 는 마지막 변경 날짜/시간
sample.txt 는 파일이름을 나타낸다.
파일 허가권은 - 파일유형 뒤에 가장 먼저오는 "rw-", "r--", "r-x"로 3개씩 끊어서 읽을수 있다. (r은 read, w는 write, x는 execute)
첫번째 "rw-"는 소유자(user)의 파일접근 권한
두번째 "r--" 는 그룹(Group)의 파일접근 궎나
세번째 "r--"는 그 외 사용자(other)의 파일접근 권한을 나타낸다.
숫자로도 나타낼 수 있는데 8진수로 표기한다.
소유자(user) |
그룹(group) |
그 외 사용자(other) |
||||||
r |
w |
- |
r |
- |
- |
r |
- |
x |
4 |
2 |
0 |
4 |
0 |
0 |
4 |
0 |
1 |
6 |
4 |
5 |
결국 해석하자면 소유자는 읽기, 쓰기 권한을
그룹은 읽기 권한
그 외 사용자는 읽기, 실행 권한을 가지고 있는 것이다.
그래서 허가권은 변경이 가능한데 chmod 명령어를 통해 속성 변경이 가능하다.
예를 들어 현재 645인 sample.txt의 접근권한을 변경하려면
# chmod 666 sample.txt
라고 적으면 된다.
그러면 해당 파일은 소유자의 권한과 동일한 권한을 그룹과 그 외 사용자가 갖게 된다.
이렇게 변할 것이다.
추가로 파일의 소유권(ownership)을 변경하려면 chown/chgrp 명령을 사용하면 된다. 소유한 사용자와 그룹을 변경할 수 있는 명령어이다.
# chown centos.centos sample.txt 또는
# chown centos sample.txt 및 chgrp centos sample.txt
로 표기하면 현재 root root 로 소유되어 있던 sample.txt 파일은 소유권이 centos 사용자에게 넘어가게 된다.
# chown root.root sample.txt
명령으로 한 번에 소유자와 그룹을 바꿀 수도 있다.
자, 이제 연습을 해보자.
vi 에디터를 활용해서 test 라는 파일을 생성한다.
I를 눌러서 Insert mode를 활성화 시킨 후 다음과 같이 쓴다.
esc > wq 로 저장 후 빠져나온 다음
# ls -l
명령으로 파일이 생성되었는지 확인해본다.
다음과 같이 생성되었을 것이다.
위에서 배운대로 허가권을 풀어보자면 일반파일, 소유자는 읽기, 쓰기가 가능하고 나머지는 읽기만 가능한 test 파일이 생성되었다.
test 파일을 실행시키려고 test 라고 치면 실행되지 않는다
./test 라고 쳐야 되는데 왜냐하면 test라고 쳤을 때 /root의 경로가 지정되어 있지 않기 때문이다.
그래서 ./ 를 입력해서 root 사용자 폴더의 경로를 지정한 후 폴더를 실행해야 한다.
하지만 실행하려니까 허가가 거부가 된다.
허가권을 풀어본대로 소유자에게는 실행 권한이 없기 때문이다.
다음과 같이 실행권한을 부여하고 나면 실행이 된다.
./test 를 입력하고 난 첫줄에 hello 에 대한 명령을 찾지 못했다는 말과 함께
입력해 두었던 ls /var 명령어는 실행되어서 /var 폴더의 리스트를 보여주었다.
그렇다면 이번엔 소유권을 변경해보도록 하자.
기존에 소유자와 그룹은 root root 로 설정되어 있었다.
# chgrp centos centos test
를 입력해서 centos 사용자에게 소유권을 주었다.
연두색 글씨의 test 파일의 소유권을 확인하면 centos centos 로 바뀐 것이 보일 것이다.
그래서 위의 캡쳐와 마찬가지로 centos 사용자로 접속해서 test 파일을 확인해보려고 su - centos 명령을 이용해서 centos 사용자로 로그인을 했다.
그리고 whoami > centos
pwd (현재경로) > /home/centos
ls -l /root/test 를 쳤건만 이게 웬걸 허가 거부를 당햇다. 당황스럽겠지만 허가가 거부된 데에는 이유가 있다. 앞선 test 파일의 허가권을 확인해보면 멀쩡하지만 우리는 현재 centos 사용자로 로그인되어 있어서 슈퍼유저인 root 의 폴더에 접근할 수 없기 때문이다.
# ls -l /
확인해보면 위와 같이 일반사용자는 root 폴더에 접근 권한이 없다. 그렇다면 root 폴더의 접근 권한을 바꾸느냐?
root 폴더의 권한을 바꿀 수 없을 뿐더러 관리자의 폴더를 함부로 손대는 것도 바람직하지 않으므로 차라리 관리자에게 test 파일을 일반사용자 폴더로 넘겨달라고 요청하는 부분이 빠르다. 그러므로 다시 su 명령어를 이용해 root 사용자로 돌아간 다음 test 파일을 centos 사용자에게 넘기도록 하겠다.
root 암호를 입력하면 root 사용자로 로그인되고 다음과 같이 test 파일을
# mv test /home/centos
센토스 홈 폴더로 옮겨준다.
# mv test ~centos
경로를 모르는 경우 위의 명령대로 입력하면 자동으로 centos 사용자의 home 폴더로 들어간다.
overwrite 덮어 쓸거냐고 물어보면 쿨하게 y 라고 입력하고 넘어가자.
# ls
로 확인해보면 test 파일이 사라졌다. /root 에 속해 있던 test 파일을 아예 /home/centos 폴더로 옮겨버렸기 때문이다.
반대로 centos 사용자는 소유주를 root 사용자로 변경할 수 없는데 이는 당연하다.
일반 소유주가 관리자의 폴더에 악성코드를 삽입하고 소유주를 변경해버린다면 말도 안되는 일이기 때문이다.
이와 별도로 symbolic 심볼릭으로도 허가권 변경이 가능하다.
앞서 # chmond 666 test 로 test 파일에 실행권한을 제외한 모든 권한을 user, group, other 에게 부여하였다.
# chmod o-x test
owner 로부터 test 파일의 x(실행) 권한을 뺏는(-) 것이다.
# chmod ugo-r test
user, group, other 로부터 test 파일의 r(읽기) 권한을 뺏는(-) 것이다.
반대로
# chmod ugo +r test
를 통해 빼앗았던 r(읽기) 권한을 다시 부여(+)할 수도 있다.
chmod 는 기존의 권한을 몰라도 사용할 수 있다는 장점이 있다.
마지막으로 링크에 대해 이야기 하고(왜이리 길어지냐...) 마무리 하겠다.
파일의 링크(link)에는 하드링크(hard link)와 심볼릭 링크(symbolic link 또는 soft link 라고도 한다) 두 가지가 있다.
소프트 링크는 windows에서 바로가기 아이콘의 개념과 비슷하다.
하드링크를 생성하면 "하드링크파일"만 하나 생성되며 같은 inode1을 사용한다.
# ln 링크대상파일이름 링크파일이름
심볼릭 링크를 생성하면 새로운 inode2를 만들고, 데이터는 원본파일을 연결하는 효과를 가진다.
# ln -s 링크대상파일이름 링크파일이름
덧붙여 inode란 실제 데이터 파일의 정보를 나타내는 inode 구역에 저장되는 데이터인데 그냥 하나의 객체를 뜻한다고 생각하면 쉽다.
inode1=inode1 but inode1≠inode2
다시말해 하드링크를 생성한 파일은 원본파일과 완전히 동일한 inode 정보를 가지게 되어 이 말인 즉슨 원본파일을 지워도 hard link 파일은 원본 파일의 데이터를 그대로 갖고 있기 때문에 실행이 된다는 말씀이다.
하지만 바로가기라는 특성상 symbolic 링크가 더욱 일반적으로 쓰인다. (hard link는 무쓸모인가...)
# ls -il or # ls -li
파일리스트 맨 앞에 파일 색인번호를 표시한다. 이 명령어로 hardlink 파일과 softlink 파일의 색인번호를 원본파일과 비교할 수 있다.
링크 파일을 만들어서 테스트 해보시길 바라며 이만 마친다.