09. Permission
user account는 /etc/passwd
에, group은 /etc/group
에 정의되어 있고 유저나 그룹이 생성되면 etc/shadow
가 수정된다.
root@e78e6ae9e14a:~# > foo.txt
root@e78e6ae9e14a:~# ls -l foo.txt
-rw-r--r-- 1 root root 0 Nov 28 16:02 foo.txt
앞의 10 문자는 file attribute를 나타낸다. 첫번째 문자는 파일타입.
-
: regular filed
: directoryl
: symbolic link. 이 경우 나머지 값은rwxrwxrwx
(dummy 값이다)c
: terminal이나/dev/null
같은 character special fileb
: block special file (HDD, DVD 드라이브 등)
나머지 9자리는 file mode. owner, group, world(전역)의 read, write, execute 권한을 나타냄.
파일인지 디렉토리인지에 따라 조금씩 내용이 달라짐.
- r
- file: open, read
- directory: 파일 list 가능 (execute가 셋업되어 있어야됨)
- w
- file: written or truncated; 다만 파일의 제거나 이름 변경은 directory 속성을 따름
- directory: 디렉토리 하위의 파일의 생성, 제거, 이름변경 (execute가 셋업되어 있어야됨)
- w
- file: 실행가능
- directory: 해당 디렉토리에 접근 가능 (ex.
cd directory
)
파일 모드 변경은 chmod
명령어로 가능. (owner나 superuser만 가능하다)
두가지 방법을 지원하는데
- Octal number representation
- Symbolic representation
Octal
octal (8진법), hexadecimal (16진법)이 많이 사용되는 이유는 컴퓨터가 binairy(2진법)으로 작동하기 때문. hex color처럼 16진법이 더 많이 사용되지만 8진법이 3 bit binary를 표현하기에 좋기 때문에 8진법이 사용됨
| ocatl | binary | file mode |
| 0 | 000 | --- |
| 1 | 001 | --x |
| 2 | 010 | -w- |
| 3 | 011 | -wx |
| 4 | 100 | r-- |
| 5 | 101 | r-x |
| 6 | 110 | rw- |
| 7 | 111 | rwx |
root@e78e6ae9e14a:~# ls -l foo.txt
-rw-r--r-- 1 root root 0 Nov 28 16:02 foo.txt
root@e78e6ae9e14a:~# chmod 600 foo.txt
root@e78e6ae9e14a:~# ls -l foo.txt
-rw------- 1 root root 0 Nov 28 16:02 foo.txt
주로 사용되는 항목들은 다음과 같음
- 7 (rwx)
- 6 (rx-)
- 5 (r-x)
- 4 (r--)
- 0 (---)
Symbolic
symbolic notation은 세가지 파트로 나뉜다.
- 변경이 어디에 적용될 것인지: u (user), g(group), o(others=world), a(all)
- Which operation will be performed: + (추가), -(제거), =(해당 항목만 추가 후 나머지 모두 제거)
- What permission will be set: r, w, x
다음은 몇몇 예시
u+x
: user(u) 에게 execute (x) 권한 추가 (+)+x
:a+x
와 동일. 모두에게 execute 권한 추가go=rw
: group, other(world)에게 r, w 권한 추가. 나머지 권한 (execute)이 있었다면 제거u+x,go=rw
umask
umask는 default permission을 조정해줌.
root@e78e6ae9e14a:~# umask
0002
root@e78e6ae9e14a:~# > foo.txt
root@e78e6ae9e14a:~# ls -l foo.txt
-rw-rw-r-- 1 root root 0 Nov 29 10:17 foo.txt
보통 0002, 0022
가 default value.
root@e78e6ae9e14a:~# rm foo.txt
root@e78e6ae9e14a:~# umask 0000
root@e78e6ae9e14a:~# > foo.txt
root@e78e6ae9e14a:~# ls -l foo.txt
-rw-rw-rw- 1 root root 0 Nov 29 10:17 foo.txt
mask를 0000
로 변경하면 모두 rw
로 변경된 것을 볼 수 있다.
1
로 셋팅되면 mask가 없어지는 것. 아래 표를 보면 world의 기본 모드는 rw-
인데 0002의 마스크의 2의 2진법이 010
이기 때문에 w
가 꺼진다.
| original file mode | --- rw- rw- rw- |
| Mask | 000 000 000 010 |
| result | --- rw- rw- r-- |
0022
일 경우에는 world와 마찬가지로 group의 w
모드도 꺼진다.
| original file mode | --- rw- rw- rw- |
| Mask | 000 000 010 010 |
| result | --- rw- r-- r-- |
대부분의 경우 umask를 변경할 일은 없고, 특별히 보안을 신경써야 할 때 주로 변경한다.
위의 mask는 3자리수면 충분한데 4자리인 이유는 잘 쓰이지 않는 특수 권한이 사용되기 때문.
setuid bit
(4000): 실행 가능한 파일에 적용되면 실제로 파일을 실행하는 권한이 프로그램의 owner로 변경된다. 보통 superuser 권한의 프로그램에 사용되어 일반 유저도 해당 프로그램을 superuser 권한으로 실행시킬 수 있게 해줌. 보안 이슈가 생길 수 있어 쵲대한 적게 적용하는게 좋음setgid bit
(2000): directory에 적용되면 파일을 만든 group이 아니라 directory의 그룹이 사용된다.sticky bit
: 오래된 unix의 잔재. directory에 사용되면 directory의 owner나 superuser가 제외하고는 해당 디렉토리의 파일을 지우거나 이름 변경을 못하게 함. 주로/tmp
같은 shared directory에 적용되어 있음.
각각을 지정하는 방법은 다음과 같음
# setuid
chmod u+s program
# 이렇게 execute에 s가 표시됨
-rwsr-xr-x
# setgid
chmod g+s dir
# 이렇게 directroy execute에 s가 표시됨
drwxrwsr-x
# sticky
chmod +t dir
# world execute에 t가 표시됨
drwxrwxrwt
Changing id
주로 세가지 방법으로 유저 변경.
- logout 하고 다른 유저로 login
su
명령어sudo
명령어
su
: Substitute User
새로운 유저로 shell을 시작함.
-l
option은 특정 유저의 login shell이 열림. 이는 곧 새로운 유저의 env가 로드되고 새로운 유저의 home 디렉토리로 변경되는 것. (보통 이렇게 사용함)
-
가-l
의 축약어이기 때문에 대부분su -
로 사용한다
user가 지정되지 않으면 superuser로 로그인되는데, 그래서 su -
가 superuser login임. (su -l root
와 같은말)
-c
option으로 특정 명령어만 실행시킬 수도 있다.
$ su -c 'less /etc/shadow'
Password:
sudo
: Execute a command as another user
sudo
는 su
와 비슷하지만 더 중요한 기능들을 포함하고 있음
- 관리자가 일반 유저들이
sudo
로 사용할 수 있는 명령어를 컨트롤 가능하다. sudo
명령어를 사용할 때 superuser의 비밀번호가 필요 없음 (사용중인 해당 유저의 password만 있으면됨)sudo
는su
와 다르게 새로운 shell을 시작하지 않고, 다른 유저의 환경얼 불러오지도 않는다.
chown: change file owner and group
chown [owner][:[group]] file...
'backend' 카테고리의 다른 글
Linux prompt: 리눅스 쉘 프롬프트 기본 및 커스터마이징 (0) | 2020.12.18 |
---|---|
Linux environment: 환경변수 (0) | 2020.12.17 |
쉘 익스펜션(Shell expansion): wildecard (*), tilde (~), dot (.) (0) | 2020.12.14 |
[book] The linux command line: Rediretion - standard intput, output, error (0) | 2020.12.13 |
aws ec2에 카프카 세팅해보기 (공부용 kafka) (1) | 2020.12.04 |