[명령] permission, chmod, chown: 파일의 소유자 변경 / chgrp: 그룹 변경 / umask

markyang92·2021년 5월 10일
1

linux (ubuntu/debian)

목록 보기
4/36
post-thumbnail
post-custom-banner

permission(chmod)


파일 종류

  1. 파일 종류
파일 종류Description
-파일
d디렉토리
l소프트 링크
ccharacter device file
bblock device file
pFIFO file
ssocket file

권한

  1. 권한
권한Dexcription
rReadable
wWritable
xeXecutable
s실행 파일이 setuid
프로그램을 실행할 때, setuid한 uid인 것처럼 실행한다는 의미


chmod

$ chmod [option] [WHO][+ | -][r | w | x] FILE

option

-R: 재귀적으로 파일들과 디렉터리들의 모드들을 바꾼다.
-v: 자세한 모드; 실행되고 있는 모든 파일을 나열한다


who

whodescriptione.g.,
uuser(owner: 소유권자)chmod u+x file, o와 헷갈리지 말 것!!
ggroupchmod g+x file
ootherchmod o-x file
a모든 사람 위의 셋 모두, "ugo"와 같다
chmod ugo=rwX <FILE>
chmod ugo=x: 실행 권한만 줌
chmod a+x

operator

operatordescription
+지정된 모드들은 지정된 클래스들에 더한다
-지정된 클래스들로부터 지정된 모드들은 지운다
=지정된 클래스들을 위해서 지정된 모드들이 정확한 모드들로 만들어지게 된다

mode

modenamedescription
rread파일을 읽거나 디렉터리 안 내용물의 리스트를 보여준다
wwrite파일이나 디렉터리에 쓴다
xexcute파일을 실행하거나 디렉터리 트리로 되돌아간다
X특별한 실행, special excute
  • 이는 그 자체를 허가라고 보기보다는 x 대신에 사용될 수 있는 것으로 보아야 한다.
  • 이 명령어는 디렉터리들의 현재 허가 상태와 관계없이 실행 허가를 디렉터리들에 적용하거나,
    (사용자, 그룹이나 다른 사람들에게) 벌써 최소한 한번의 실행 허가가 설정된 적이 있는 파일에 실행 허가를 적용한다.
  • 이 명령어는 +와 함께 사용되는 경우와 일반적인 파일들 (텍스트 파일들과 같이)에서는
    실행 허가를 설정하지 않고 큰 디렉터리 트리에 그룹이나 다른 사람들이 접근할 수 있게 해주는 -R 옵션과 결합하여 사용될 경우, 이 두 경우에만 유용하다.
  • 두 번째 경우는 chmod -R a+rx를 막 사용한 경우에 주로 발생하며, chmod -R a+rx 대신 X을 사용함으로써 같은 일을 할 수 있다.
    ssetuid,gidchmod 명령어는 파일이나 디렉터리의 특별한 모드들이나 추가적인 허가들 역시 바꿀 수 있다. 그 기호적인 모드들은 setuid 나 setgid 모드들을 나타내기 위해서 s를 사용하고, sticky 모드를 나타내기 위해서 t를 사용한다. 이 모드들은 다른 클래스들이 지정되었지는 아닌지와 관계없이 적절한 클래스들에게만 적용될 수 있다. 대부분의 운영 시스템들은 8진법 모드들을 사용하여 특별한 모드들을 지정하는 것을 보조하고 있지만 어떤 운영체제들은 그렇지 않다. 이러한 시스템들에서는 오직 기호적인 모드들만 사용될 수 있다.
    tsticky
    Who?descriptionex
    a= all: u,g,ochmod a+x file = chmod +x file


    chown, chgrp

    • 파일의 소유권변경 (루트 권한 필요)
    • 위에서 보이는 u(소유권자) / g(그룹)을 변경한다.

    $ sudo chown [-R] pllpokko <chown file>
    • chown fileu(소유권자)pllpokko로 변경
    • -R: 디렉토리 지정시 디렉토리그 안에 들어있는 모든 파일 사용자 변경

    $ sudo chown -R [소유권자]:[그룹] <chown file>
    
    $ sudo chown -R sam:abbey example
    • [소유권자]:[그룹]으로 지정한 파일spcified 소유권자와 그룹으로 변경
      • example파일의 소유권자sam, 그룹abbey로 변경

    $ chown -R 1000:1000 /var/jenkins_home/
    • /var/jenkins_home/ 디렉터리의 UID와 GID를 1000, 1000으로 변경

    UID:GID참고


    $ sudo chgrp [-R] pllpokko <chgrp file>
    • chgrp fileg(그룹)pllpokko 그룹으로 변경한다.
      • 일반 사용자는 자신이 속한 그룹으로만 변경이 가능하다.
    • -R: 디렉토리 지정시 디렉토리그 안에 들어있는 모든 그룹 변경

    1. chgrp으로 파일의 소속 그룹 바꿔보기
    $ sudo chgrp wheel /usr/bin/su
    $ ls -l /usr/bin/su
    1. 바뀜 확인

    umask

    • 파일, 디렉토리에 관한 기본 permission에 관여한다.
    1. 확인 방법
    $ umask -S
    u=rwx,g=rwx,o=rx
    
    $ umask
    002 (0002 라는 뜻)
    • umask는 default file, directory permission에 관여한다.
      • 허가 가능 최대 permission - umask = default permission
    • 허가 가능 최대 permission
      • file: 0666
      • directory: 0777

    1. 기본 생성 file permission의 예
    • user의 umask: 002(0002)
    • root의 umask: 022(0022)

    root가 생성한 파일

    -rw-r--r--(0644)


    user가 생성한 파일

    -rw-rw-r--(0664)


    root, user가 생성한 directory

    drwxrwxr-x(0775): 디렉토리는 모두 실행권한있음
    실행권한이 있어야 디렉토리로 이동할 수 있기 때문


    umask 주의점

    • umask 설정은 휘발성이기 때문에 재부팅하면 다시 돌아온다

    • 영구적 변경은
    1. 시스템 환경파일(/etc/profile, /etc/.login)에서 umask 값을 022
    2. $HOME에서 .pofile, .login, .bash_profile, [shell rc files]에서 umask값을 022로 설정

    문자로 umask 설정

    • chmod 명령과 비슷하다
    $ umask [u|g|o|a][+|-|=][r|w|x][,...]
    
    
    e.g.
    $ umask o-x,g=rw
    • 설정한 대로 umask 가 지정되어 파일, 디렉토리 생성시 적용된다.
      최대 부여 가능 permmision - umask = 파일, 디렉토리 permission 생성

    숫자로 umask 설정

    • 숫자 모드는 빼기만 부여
      즉, 최대 부여 가능 permmision - umask = 파일 permission 생성
    • 최대 부여 가능 permission
      • 파일: 0666
      • 디렉토리: 0777
    • 예) umask 값: 002 = (0)002
      • 파일: 0666 - (0)002 = 664
      • 디렉토리: 0777 - (0)002 = 0775

    SUID, SGID, Sticky

    • 각 프로세스는 실행 중인 프로그램이며, 하나의 사용자와 하나이상의 그룹에 속한다.
    • SUID(4): 파일이 실행 가능하면, 프로그램이 실행될 때 프로세스의 유효 UID를 파일 소유자의 ID로 바꾼다.
    • SGID(2): SUID와 비슷하게, 파일이 실행가능하면 프로세스의 유효 GID를 파일의 그룹의 ID로 바꾼다.
    • Sticky(1): 디렉토리에서 삭제를 제한해 다른 사용자 소유의 파일을 지울 수 없게 한다. 보통 /tmp, /var/tmp에 설정되어 있다.
    • SUID 비트를 아래와 같이 설정하면, 루트가 아닌 사용자에게 임시로 작업을 수행할 Super User 특권을 준다.
      • pingraw socket을 여는데, 이는 Super User 특권이 필요하다.
        • 일반 사용자가 ping을 사용할 수 있도록 ping은 root 소유이고, SUID가 설정되어 있어, ping을 실행하면, 실행한 사용자의 UID와 상관없이 UID 0 으로 실행된다.
    • 유저 프로그램 myprogramSUIDroot를 가질 수 있게 해보자.
    $ touch myprogram
    -rw-rw-r-- 1 markyang markyang 0 Feb 6 09:15 myprogram
    
    $ chmod +x myprogram
    -rwxr-xr-x 1 root root 0 Feb 6 09:15 myprogram
    
    $ sudo chown 0:0 myprogram
    -rwxr-xr-x 1 root root 0 Feb 6 09:15 myprogram
    
    $ sudo chmod 4755 myprogram
    -rwsr-xr-x 1 root root 0 Feb 6 09:15 myprogram
       └── SUID가 설정되었다. 이 파일의 소유자 ID는 root, 파일의 그룹 ID는 root 이므로, 실행될 때 root로 실행된다.
    profile
    pllpokko@alumni.kaist.ac.kr
    post-custom-banner

    0개의 댓글