본문 바로가기
Linux

[Linux] 권한 설정

by JINJINC 2023. 3. 22.
728x90
반응형

퍼미션

1.상대모드(심볼릭 모드)

리눅스 퍼미션
상대모드 퍼미션

 

2.절대모드(수치화)

리눅스 퍼미션 절대모드 수치화
리눅스 퍼미션 절대모드(수치화)

#파일의 접근 권한

-리눅스 ==  multi.user 환경이기 때문에 
계정간, 파일에 대한 접근을 관리할 필요성이 있음 
각 계정 간, 그룹 간 파일에 대한 접근 권한을 관리가 필요하다. 

[root@server1|09:49:00~]#ls -l claccc
-rwx------. 1 root root 72 10월 23 09:46 claccc
==> 권한
u  g      o 
 -소유자 , 그룹, 기타   => 권한 
 -rwx      ---    ---   

Read : 읽기 복사가능, ls를 통한 확인까지  (조회에 대한 권한)
Write : 쓰기 가능 ( 수정, 삭제, 이동,모두 가능)
eXecute : 실행 (셀 스크립트 같은 실행 파일에 대한 실행권, 디렉터리의 경우 명령을 수행할 권리)

@ 기본적으로 파일은 읽기. 쓰기에 대한 권한을 갖고
 디렉터리는 일고 쓰고 실행에 대한 권한을 갖겠다.
(물론 셀 스크립트 같은 실행파일은 예외)

#권한 표기 방법 연습
문자표기 
rwxr-x-r--    ==>  소유자 읽기 쓰기 실행 가능, 그룹 읽고, 실행 가능 , 기타 읽기
r-xr--r-- => 소유자 읽실, /  그룹 읽 /기타 읽
rw-r----- => 소유자 읽쓰 /그룹 읽 / 기타 x 

숫자표기 가능  (비트 부여) 
r=2의 2제곱 =  4
w = 2의 1 제곱 = 2
x = 2 .의 0 제곱 = 1
rwx =7
rw = 6
rx = 5 
wx =3
x =1
r = 4

rwxr-x-r--    ==>  소유자 7 그룹 5 기타 4 => 111/101/100
r-xr--r-- => 소유자 5 /  그룹 4 /기타 4 ==> 101/100/100
rw-r----- => 소유자 6 /그룹 4 / 기타 0 ==> 110/100/000

 

#chmod  파일의 접근권한 변경 명령어

chmod [옵션] [ 권한] [대상] 
-R : 하위대상에 대해서도 명령어 적용 

 

[root@server1|10:36:05~]#chmod u=rwx claccc

[root@server1|10:37:18~]#ls -l claccc
-rwx------. 1 root root 72 10월 23 09:46 claccc

chmod u=x /export/home/samadal/
chmod u=rwx claccc ( 지정 ) rwx
chmod u-x claccc (빼기)   rw
chmod u+x claccc(추가) 
chmod u=rw,g=r,o=--- claccc (여러 권한을 한번에 부여) 


777 전부다 실행권한을 갖는다. 
644 실행권한 모두 뺀다. 

문자표기로 할시 대문자로 실행권한을 부여시, 디렉터리에 대해서만 실행권한 적용해준다.
(일반 파일에 대해서는 부여 x)

숫자모드시 
chmod 755 clac(바로 지정)

 

# 소유권 변경 명령어 

chown

chown [옵션]   소유자:소유그룹   파일명
chown [옵션]   소유자.소유그룹   파일명

 

#stat

해당 파일의 정보를 보는 명령어

이름, 성질, 사이즈,inode, 연관파일의 수, 접근, 수정, 변경 시간 등 모두 다 볼 수 있는 명령어 


# Context

SELinux : security Enforeced Linux
- 보안을 강화한 리눅스 문맥설정
문맥이 맞지 않으면 접근권한이나 계정이 맞더라도 접근을 제어 

[root@server1|10:54:46~]#getenforce
Enforcing
[root@server1|10:55:59~]#setenforce 1   ==> on 
[root@server1|10:56:15~]#setenforce 0   ==> off (임시) 
[root@server1|10:56:18~]#getenforce
Permissive   = > 허용은 하지만 보안문맥에 어긋날 시, 로그로 남기고 경고메세징

 

# 기본 접근 권한 

파일이 생성되면서 갖게되는 기본적인 권한 범위

UMASK 

Umask
umask

umask ==> 기본 접근 권한에 대한 마스크 설정 

666 = > 파일의 full권한

022 = > umask

rwrr  644 => 기본 접근 권한 

umask 명령어를 치면 나에게 해당하는 유마스크를 확인할 수 있다

 



# 특수접근권한 

기본 접근 권한 ==> 특정 대상에게 그 경계선을 지정 
특수 접근 권한 ==> 누군가의 권한을 일시적으로 빌려오는 용도로 사용 

▶ setuid 와 setguid

'SetID/SetGID'는 파일에 대한 소유권을 다른 사용자에게 할당하여, 소유권이 없는 사용자도 파일에 대한 소유권을 갖게할 수 있는 기능을 수행한다. 일반적으로 소유자가 root 인 실행 파일에 적용한다

#SetUID : 실행시 , 일시적으로 해당 파일의 소유자 권한을 빌려와서 사용

ex) /usr/bin/passwd

chomd u+s UID = >  UID파일에 setUID설정

==> drwsr-xr-x

rws => setid 설정되었다. 

# SetGID : 실행시 일시적으로 해당 파일의 그룹 권한을 빌려와서 사용

 

ex) /usr/bin/wall 

tty =>  chmod g+s GID => GID파일에 setGID설정  ==> drwxr-sr-x.

@ 디렉터리에 대해서 지정할 시 , 해당 디렉터리에서 생성한 새 디렉터리에도 권한이 상속되는 문제 모니터링 대상 

 

#  Stickybit: 디렉터리 대상으로 부여되는 권한

=> 해당 디렉터리에서 모두가 파일을 생성 할 수 있지만  내 소유가 아닌 파일에 대해서는 건들수 없음

공유디렉터리에서 많이 사용 

자신이 만든 파일은 자신만 사용

 


[root@server1|11:12:46~]#cd /BACKUP/
[root@server1|11:29:47BACKUP]#mkdir Pubdir
[root@server1|11:29:57BACKUP]#chmod 1777 Pubdir/
[root@server1|11:30:06BACKUP]#su - dbug
마지막 로그인: 일 10월 23 11:12:21 KST 2022 일시 pts/0
[dbug@server1 ~]$ cd /BACKUP/Pubdir/
[dbug@server1 Pubdir]$ touch DbugPub
[dbug@server1 Pubdir]$ logout
[root@server1|11:30:42BACKUP]#ls /home/
dbug
[root@server1|11:30:54BACKUP]#useradd kevin
[root@server1|11:31:09BACKUP]#su - kevin
[kevin@server1 ~]$ cd /BACKUP/
[kevin@server1 BACKUP]$ cd Pubdir/
[kevin@server1 Pubdir]$ touch kevin_Pub
[kevin@server1 Pubdir]$ rm DbugPub
rm: remove write-protected regular empty file ‘DbugPub’? y
rm: cannot remove ‘DbugPub’: Operation not permitted
[kevin@server1 Pubdir]$

# ACL관리명령

특정 유저, 특정 그룹을 지정해서 접근권한을 관리

사용자 하나와 그룹 하나에게만 권한을 줄 수 있는 파일 퍼미션을 확장하여, 여러 명의 사용자와 그룹에게 접근 권한을 줄 수 있는 것이 ACL(Access Control List) 임

● 퍼미션을 문자로 줄 경우 rw- 처럼 세 자리를 전부 다 사용해야 한다. rw 라고만 하면 명령어 에러가 난다.

● ACL 퍼미션을 설정한 경우만 MASK 가 생성되어짐

● 소유자 와 그룹소유자 퍼미션을 변경하면 [자동으로] 가장 큰 퍼미션으로 MASK 퍼미션이 변경되어짐

● MASK 퍼미션을 직접 설정한 경우, ACL 퍼미션은 MASK 퍼미션을 넘지 못함

 

#getfacl 

파일의 ACL 상태를 확인한다

getfacl [옵션] [대상] 

옵션 -R : 디렉터리인 경우에, 해당 디렉터리 하위파일들에 대해서 일괄적으로 적용 (getfacl에서는 조회기능)

         -d : 파일 정보 

 해당 대상의 접근권한을 조회하는 명령,  ' 파일명, 소유자, 소유그룹 + 접근권한,마스크 ,기본 접근권한'도 조회가능 

 

[root@server1|03:50:42~]#getfacl LABs/
# file: LABs/     => 파일명 
# owner: root => 소유자
# group: root => 소유그룹
user::rwx => 사용자의 접근권한
group::r-x => 그룹의 접근권한
other::r-x => 그외의 접근 권한 

[root@server1|03:54:09~]#getfacl -R LABs/
==>LABs안의 디렉터리들에 대한 조회결과가 나온다. 


[root@server1|03:56:03~]#vi LABs_ACL
[root@server1|03:58:55~]#cat LABs_ACL
# file: LABs/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

 

user:dbug:r-x

group:dbug:r-x

 

 

#setfacl 

파일에 ACL을 설정하거나 삭제할 수 있다.

setfacl [옵션] [대상파일] 
setfacl [option]  [ u/g/o:사용자/그룹:상대모드/절대모드]  [ 파일/디렉터리명]
acl 제어를 부여하거나 제거할 수 있는 명령어
옵션   -m [ 부여할 권한] : 권한을 설정 부여 user= u / group = g 두개만 가능
           -x [ 카테고리 : 유저(그룹)] : 해당 카테고리에 대상이 갖고 있는 권한을 제거, 사용자를 제거할 때 사용 
           -b : 해당 파일에 설정된 모든 acl명령을 제거 
           -R : 디렉터리에 일괄적으로 적용 
           -d : 자신의 디렉토리내에서 생성되는 폴더/파일에 자동으로 acl 퍼미션 상속
          --set-file [참고할 파일] : 참고할 파일에 적혀있는 acl내용을 대상파일에 적용 

[root@server1|03:59:25~]#touch test_acl
[root@server1|04:01:32~]#getfacl test_acl
# file: test_acl
# owner: root
# group: root
user::rw-
group::r--
other::r--

 

< - x옵션>

 

<-m>

: /dir1 폴더에 user1 유저에게 rwx권한을 주며, /dir1 폴더 아래 생성되는 파일/폴더에 동일한 퍼미션값을 상속함

 


[root@server1|04:01:54~]#setfacl -m u:dbug:rw- test_acl  =>  권한을 추가 
[root@server1|04:02:22~]#getfacl test_acl 
# file: test_acl
# owner: root
# group: root
user::rw-
user:dbug:rw-
group::r--
mask::rw-
other::r--

[root@server1|04:03:33~]#setfacl --set-file LABs_ACL test_acl

[root@server1|04:06:05~]#getfacl test_acl

# file: test_acl

# owner: root

# group: root

user::rwx

user:dbug:r-x

group::r-x

group:dbug:r-x

mask::r-x

other::r-x

[root@server1|04:06:10~]#cat LABs_ACL

# file: LABs/

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

user:dbug:r-x

group:dbug:r-x

 

chmod 575(rxrwxrx) /dir2 => u: r-x  / g : rwx / o: rx 

chown user1:sales /dir2 => dir2 디렉터리의 소유자는 user1, groupdms sales 으로 설정

setfacl -m d:u:user3:r-x,d:u:user4:rwx /dir2  => m  default  user에 user3는 r-x의 권한을 포함 , default로 userd에 user4는 rwx의 권한을 부여한다. : 권한을 설정 부여 

default 는 상속하는 파일에 적용할 설정

setfacl -m u:user3:r-x ,u:user4:rwx /dir2    현재 디렉터리의 acl을 설정합니다.

b 파일은 /dir2 디렉터리의 acl을 상속받았지만 mask는 파일이기 때문에 자체적으로 rw- 로 적용된다.

파일생성시 실행권한을 갖지 못한다. 

<확인>

user1에서는

user a 읽기 a 쓰기 ./a a실행 dir2 읽기 
ls /dir2
dir2에 파일 만들기
touch /dir2/c
cd /dir2
user1 가능 불가능 가능 가능 불가능 가능
user2 가능 불가능 가능 가능 가능 가능
user3 가능 불가능 가능 가능 불가능 가능
user4 가능 불가능 가능 가능 가능 가능
user5 가능 불가능 가능 가능 불가능 가능
user6 가능 불가능 가능 가능 불가능 가능
user7  가능 불가능 가능 가능 불가능 가능

 

■ sudo (Super User Do)

인증받은 사용자가 특정 명령을 root 권한으로 실행하는 명령어 이다. su 명령을 이용하여 root 계정으로 들어가면 모든 권한을 가지게 되어 보안상 매우 위험 하다. 그래서 특정 작업만 수행할 수 있는 권한을 주는 것이 가능한데, sudo 명령으로 이와같은 제한적인 권한 부여가 가능하다.

. /etc/sudoers sudo
명령을 내릴 수 있는 사용자와 명령을 정의한 파일이다.

. visudo /etc/sudoers
파일을 수정하는 명령어 이다.

# vi /etc/sudoers

vi 편집기로는 수정할 수 없다.(read-only 파일) : wq -> wq!

 

 


권한 삭제

[root@server1|04:36:57~]#setfacl -x u:dbug LABs

[root@server1|04:37:35~]#getfacl LABs

# file: LABs

# owner: root

# group: root

user::rwx

group::r-x
group:nobody:r-x
mask::r-x
other::r-x

한곳을 지정해서 제거 

[root@server1|04:37:58~]#setfacl -x g:nobody LABs
[root@server1|04:38:08~]#getfacl LABs
# file: LABs
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x

 


<마스크 지정>

[root@server1|04:42:20~]#setfacl -m m::r-x LABs

[root@server1|04:43:02~]#getfacl LABs

# file: LABs

# owner: root

# group: root

user::rwx

user:dbug:rwx                   #effective:r-x

group::r-x

mask::r-x

other::r-x


#effective:r-x  => 권한을 초과했지만 실질적으로 쓸수있는것은 r-x일것이다.


[root@server1|04:43:04~]#ls -ld LABs

drwxr-xr-x+ 2 root root 257 10월 23 09:32 LABs

==> + 


[root@server1|04:45:14~]#setfacl -b LABs   => 권환 초기화 , acl명령이 삭제됨 

[root@server1|04:45:57~]#ls -ld LABs

drwxr-xr-x. 2 root root 257 10월 23 09:32 LABs


## defaults 

  defaults 설정시 해당 디렉터리에서 생성되는 파일들의 기본 접근권한을 별도로 설정해 줄 수 있다. umask보다 우선적용부모 디렉터리의 defaults의 값은 자식 디렉터리에 상속된다. 

[root@server1|04:46:06~]#setfacl -m d::rw LABs  =>  defaults 적용

[root@server1|05:49:24~]#getfacl LABs

# file: LABs

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rw-

default:group::r-x

default:other::r-x

 

[root@server1|05:50:24LABs]#touch test_default

[root@server1|05:50:33LABs]#getfacl test_default

# file: test_default

# owner: root

# group: root

user::rw-

group::r--

other::r--

[root@server1|05:50:40LABs]#mkdir test_d

[root@server1|05:51:10LABs]#getfacl test_d

# file: test_d

# owner: root

# group: root

user::rw-

group::r-x

other::r-x

default:user::rw-

default:group::r-x

default:other::r-x

 


# 최소권한의 원칙
=> 업무적인 이유로 권한을 부여할 땐, 해당 업무가 요구하는 권한의 최소한으로 권한을 부여해야한다. 

 

#chown , chgrp :  해당 파일의 소유자, 소유그룹을 바꿀 수 있는 명령어

chown [소유자]:[소유그룹] [대상파일]
소유자, 소유그룹 둘중 하나 생략가능

chgrp 는 소유그룹만 변경가능

chgrp [소유그룹]  [대상파일]

옵션 -R : 하위파일에 대해서 일괄적용하는 옵션 

[root@server1|12:39:24LABs]#ls -l

합계 4
-rw-r-----+ 1 root root 75 10월 26 18:45 root_acl
[root@server1|12:39:26LABs]#chown dbug:kevin root_acl   => 소유자 dbug / t소유그룹 kevin
[root@server1|12:40:02LABs]#ls -l
합계 4
-rw-r-----+ 1 dbug kevin 75 10월 26 18:45 root_acl
[root@server1|12:40:05LABs]#

[root@server1|12:40:05LABs]#chown :dbug root_acl  ==> 소유그룹만 바꿈 
[root@server1|12:41:04LABs]#ls -l
합계 4
-rw-r-----+ 1 dbug dbug 75 10월 26 18:45 root_acl

[root@server1|12:41:05LABs]#chown kevin root_acl ==> 소유자만 바꿈
[root@server1|12:41:41LABs]#ls -l
합계 4
-rw-r-----+ 1 kevin dbug 75 10월 26 18:45 root_acl

<사용자 계정관련 파일>
  

/etc/passwd   => 사용자 id 및 UID, GID, 사용 SHELL 등의 정보가 기입되어 있는 파일
/etc/shadow => 사용자의 암호에 관한 파일(readOnly)
/etc/group => 사용자그룹에 관한 파일, 그룹 추가, 제거 반영가능
/etc/login.defs  = > 사용자 계정에 대한 기본값이 정의되어있다. 
/etc/default/useradd  => 사용자 생성시 참고할 기본 설정들

 

GROUP  useradd -n 옵션을 주면 입력되어 있는 해당 그룹으로 GID 지정해서 생성

HOME  home 디렉터리를 해당 위치 밑으로 생성

INACTIVE  패스워드 사용 기한이 지난 뒤, 계정 로그인을 막는 유예기간 설정. -1은 설정 안한 것

EXPIRE  계정 유효기간을 지정 YYYY-MM-DD 형식으로 입력

SHELL  사용자 생성 시에 할당되는 셸

SKEL  사용자 생성 시 참고할 스켈레톤 디렉터리

CREATE_MAIL_SPOOL  사용자 생성 시에 메일 파일을 생성할 것인지

[root@server1|01:28:29BACKUP]#mv -b  useradd_dev /etc/default/useradd

mv: overwrite `/etc/default/useradd'? y

[root@server1|01:29:56BACKUP]#ls -l /etc/default/

합계 16

-rw-r--r--. 1 root root  235 10월  8 11:53 grub

-rw-r--r--. 1 root root 1756  5월 19 00:54 nss

-rw-r--r--. 1 root root  122 10월 27 01:27 useradd

-rw-r--r--. 1 root root  119 10월 27 01:26 useradd~

유저추가시 여러종류를 만들어서 기본은 백업후 여러종류를 불러와 사용 

[root@server1|01:19:36~]#cp -r /etc/skel/ /BACKUP/defaults

[root@server1|01:21:48~]#cd /BACKUP/

[root@server1|01:22:37BACKUP]#mv defaults/ dev

[root@server1|01:22:46BACKUP]#cp -r dev/ ops/

[root@server1|01:22:57BACKUP]#ls

Pubdir  dev  ops

[root@server1|01:22:58BACKUP]#mkdir dev/LABs

[root@server1|01:23:12BACKUP]#mkdir ops/Ops_log

[root@server1|01:23:33BACKUP]#vi /etc/default/useradd   => w useradd_dev / w useradd_ops

[root@server1|01:28:26BACKUP]#ls

Pubdir  dev  ops  useradd_dev  useradd_ops

[root@server1|01:28:29BACKUP]#mv -b  useradd_dev /etc/default/useradd

mv: overwrite `/etc/default/useradd'? y

[root@server1|01:29:56BACKUP]#ls -l /etc/default/

합계 16

-rw-r--r--. 1 root root  235 10월  8 11:53 grub

-rw-r--r--. 1 root root 1756  5월 19 00:54 nss

-rw-r--r--. 1 root root  122 10월 27 01:27 useradd

-rw-r--r--. 1 root root  119 10월 27 01:26 useradd~

 

[root@server1|01:30:38BACKUP]#vi /etc/passwd

[root@server1|01:32:38BACKUP]#useradd -n dev1

[root@server1|01:32:54BACKUP]#vi /etc/passwd

[root@server1|01:33:44BACKUP]#ls /home/dev1

LABs

 

#/etc/skel : 유저 생성 시, 유저의 홈 디렉터리의 뼈대를 잡아놓는 곳,

   기본 제공할 파일 혹은 디렉터리 구조들을 미리 설정. 

728x90
반응형

'Linux' 카테고리의 다른 글

[Linux] Group 관리  (0) 2023.03.22
[Linux Server] 리눅스 사용자  (0) 2023.03.21
[Linux] Linux 환경  (0) 2023.03.18

댓글