setuid 및 8진수 4000을 사용한 파일 권한

setuid 및 8진수 4000을 사용한 파일 권한

파일을 설정할 때 setuid터미널에서 다음을 수행합니다.

chmod u+s filename

이것은 훌륭하게 작동합니다. 그러나 8진수 4000은 항상 setuid와 연결됩니다(책 등에서).

나는 파일 권한, umask, setuid 등의 개념을 (어느 정도) 이해 chmod하지만 8진수 4000과 setuid 사이의 관계를 여전히 파악할 수 없습니다. 설명 해주십시오.

답변1

이것은 단지 합의일 뿐입니다. 모든 상수 식별자는 Linux 소스 코드의 숫자와 연결됩니다. 그 중 일부는 커널의 첫 번째 버전에서 매우 오래된 것인 반면, 일부는 최근에 추가되었습니다.

"setuid"와 관련된 상수는 S_ISUID다음에 정의되어 있습니다./uapi/linux/stat.h 포함, 많은 Linux 헤더 중 하나입니다. 임의의 값으로 정의할 수 있지만 우연히 04000이 됩니다.

@steeldriver가 언급했듯이 man 2 stat파일 권한에 사용되는 다양한 상수의 의미를 이해하는 데 도움이 될 수 있습니다.

       S_IFMT     0170000   bit mask for the file type bit fields
       S_IFSOCK   0140000   socket
       S_IFLNK    0120000   symbolic link
       S_IFREG    0100000   regular file
       S_IFBLK    0060000   block device
       S_IFDIR    0040000   directory
       S_IFCHR    0020000   character device
       S_IFIFO    0010000   FIFO
       S_ISUID    0004000   set-user-ID bit
       S_ISGID    0002000   set-group-ID bit (see below)
       S_ISVTX    0001000   sticky bit (see below)
       S_IRWXU    00700     mask for file owner permissions
       S_IRUSR    00400     owner has read permission
       S_IWUSR    00200     owner has write permission
       S_IXUSR    00100     owner has execute permission
       S_IRWXG    00070     mask for group permissions
       S_IRGRP    00040     group has read permission
       S_IWGRP    00020     group has write permission
       S_IXGRP    00010     group has execute permission
       S_IRWXO    00007     mask for permissions for others (not in group)
       S_IROTH    00004     others have read permission
       S_IWOTH    00002     others have write permission
       S_IXOTH    00001     others have execute permission

이 예에서는 상수와 해당 값뿐만 아니라 이를 선택하는 방법도 확인할 수 있습니다. 개발자/디자이너가 상수를 선택했으며 다음을 수행할 수 있습니다.결합하다그들을. 예를 들어 S_ISUID and S_IRWXU and S_IRUSR and S_IRGRP = 04740권한은 04740정확히 "소유자에 대한 setuid 및 모든 권한과 소유 그룹에 대한 읽기 권한"을 의미합니다.

답변2

대부분의 Unix 계열 시스템에서 파일, 디렉터리 또는 기타 파일 시스템 개체는 다음과 같이 표시됩니다.인덱스 노드, 여기에는모델, 개체 유형과 일부 권한을 설명합니다. 그 설명은POSIXstat.h.

The following symbolic names for the values of type mode_t shall also be defined:

File type:
    S_IFREG
        Regular.
    S_IFDIR
        Directory.
    S_IFLNK
        Symbolic link.

File mode bits:

S_IRWXU
    Read, write, execute/search by owner.

    S_IRUSR
        Read permission, owner.
    S_IWUSR
        Write permission, owner.
    S_IXUSR
        Execute/search permission, owner.
...

S_ISUID
    Set-user-ID on execution.
S_ISGID
    Set-group-ID on execution.
...

정수 상수에 대한 기호 이름입니다. S_IFREG0100000입니다. S_IRUSR000400입니다. S_ISUID004000입니다. 사용하기 쉽도록 8진수로 되어 있습니다. 파일 모드 비트는 논리적으로 각각 3비트씩 4개 그룹으로 볼 수 있습니다.

여기에서 내 파일 형식 비트와 파일 모드 비트를 볼 수 있습니다 .profile.

$ perl -e 'printf("%#o\n", (stat(".profile"))[2]);'
0100644

사용자는 시스템 chmod호출(정수 인수 사용(S_* 기호 상수 중 일부 사용)) 또는 유틸리티 chmod(정수 또는 기호 이름(예: u+r) 사용)을 사용할 수 있습니다.

실제로 모드 비트의 다양한 조합이 많지 않기 때문에 수십 년 동안 많은 Unix 사용자는 chmod기호 이름 대신 숫자 인수를 사용하여 호출(시스템 호출 및 명령)을 수행해 왔습니다. 0755"소유자가 쓰기 가능, 다른 사람이 읽기 및 실행 가능"을 의미합니다 . " 0644소유자가 쓰기 가능, 다른 사람이 읽을 수 있음"은 04755"setuid, 소유자가 쓰기 가능, 다른 사람이 읽고 실행 가능"을 의미합니다.

답변3

(영어) (debian jessy) 매뉴얼 페이지 chmod: (내가 강조 표시함)

숫자 패턴은 1~4개의 8진수(0~7)로, 값이 4, 2, 1인 비트를 추가하여 계산됩니다. 생략된 숫자에는 앞에 0이 붙는 것으로 간주됩니다. 첫 번째 숫자는 설정된 사용자 ID(4)를 선택하고 그룹 ID(2)와 삭제 제한 또는 고정(1) 속성을 설정합니다. 두 번째 숫자는 파일을 소유한 사용자의 권한을 선택합니다(읽기(4), 쓰기(2) 및 실행(1)). 세 번째는 동일한 값을 사용하여 파일 그룹에 있는 다른 사용자의 권한을 선택합니다. 파일 그룹에 속하지 않은 다른 사용자가 동일한 값을 갖는 경우에 사용됩니다.

이것이 귀하의 질문에 대한 답변인지 확실하지 않지만 숫자가 의미하는 바를 설명합니다.

답변4

넌 합격할 수 있어이 링크상세 사항은setuid 세트 gid그리고끈끈한 비트.

Setuid, Setgid 및 Sticky Bits는 특정 사용자가 높은 권한으로 특정 프로그램을 실행할 수 있도록 허용하는 특별한 유형의 Unix/Linux 파일 권한 집합입니다.궁극적으로 파일에 설정된 권한에 따라 파일을 읽고, 쓰고, 실행할 수 있는 사용자가 결정됩니다. ~을 위한특별 허가, 이 숫자 앞에 다른 숫자를 추가합니다.4는 setuid, 2는 setgid, 1은 끈적한 비트입니다.. 다음 명령은 모두 동일합니다.

root@host [~]#  chmod 4755 myfile
root@host [~]#  chmod u+s myfile
root@host [~]#  ls -l myfile 
-rwsr-xr-x 1 test test 0 Mar 2 17:59 myfile
root@host [~]#
root@host [~]#  chmod 2755 myfile
root@host [~]#  chmod g+s myfile
root@host [~]#  ls -l myfile
-rwxr-sr-x 1 test test 0 Mar 2 17:59 myfile
root@host [~]#  
root@host [~]#  chmod 1755 mydir
root@host [~]#  chmod +t mydir
root@host [~]#  ls -ld mydir
drwxr-sr-t 2 test test2 4096 Mar 2 19:59 mydir
root@host [~]#

관련 정보