gnu / linux에서 파일 권한 등을 설정하는 다른 방법은 무엇입니까


19

유닉스에서는 오래 전부터 유닉스에서 chmod권한을 설정하는 전통적인 방법과 setuid, setgid를 사용하여 프로그램이 권한을 얻는 방법에 대해 배웠습니다 .

최근 GNU / Linux에서 몇 가지 새로운 명령을 발견했습니다.

  • setfacl전통적인 ugo:rwx비트와의 t비트를 확장합니다 chmod.
  • setcapug:s비트 보다 더 많은 핀 그레인 제어를 제공합니다 chmod.
  • chattr 파일의 다른 컨트롤 (일부 혼합)을 허용합니다.

다른 사람이 있습니까?



확장 ACL (richACL)에 대해서는 unix.stackexchange.com/q/246606/4778 을 참조하십시오 .
ctrl-alt-delor

답변:


28

chmod: 파일 모드 비트 변경

사용법 (옥탈 모드) :

    chmod <octal-mode> files...

사용법 (기호 모드) :

    chmod <references><operator><modes> files..

references는 글자의 조합 으로 수정 될 ugoa의 사용자 액세스를 지정 files합니다.

  • u 그것을 소유 한 사용자
  • gfile의 그룹 에있는 다른 사용자
  • o 파일 그룹에없는 다른 사용자
  • a 모든 사용자들

    생략하면 모든 사용자가 기본값으로 설정되지만에 의해 허용 된 권한 만 umask수정됩니다.

    operator문자 중 하나입니다 +-=.

    • + 지정된 파일 모드 비트를 각각의 기존 파일 모드 비트에 추가 file
    • - 지정된 파일 모드 비트를 각각의 기존 파일 모드 비트로 제거 file
    • =명시 적으로 지정하지 않으면 디렉토리에 설정된 setuidsetgid비트를 제외하고 지정된 비트를 추가하고 지정되지 않은 비트를 제거 합니다.

    moderwxXst변경 될 권한 비트를 지정하는 문자 조합으로 구성됩니다 .

    • r 읽다
    • w 쓰다
    • x 실행 (또는 디렉토리 검색)
    • X 파일이 디렉토리이거나 일부 사용자에 대해 이미 실행 비트 세트가있는 경우에만 실행 / 검색
    • ssetuid 또는 setgid (지정된에 따라 다름 references)
    • t 제한된 삭제 플래그 또는 고정 비트

    또는 mode문자 중 하나로 구성 될 수 있습니다 ugo.이 경우 모드는 현재 소유자 ( u), file그룹 구성원 ( g) 또는 이전 범주 ( o) 중 하나에없는 사용자의 권한에 부여 된 권한에 해당합니다 .

다양한 비트 chmod설명 :

  • 액세스 제어 (참조 setfacl)
    • rwx — 읽기 (r), 쓰기 (w) 및 실행 / 크로스 (x) 권한.
      • 읽기 (r)는 파일을 읽을 수 있는지 또는 디렉토리를 나열 할 수 있는지에 영향을줍니다.
      • 쓰기 (w)는 파일을 쓸 수 있거나 디렉토리를 편집 할 수있는 경우 (파일 추가, 삭제, 이름 변경)에 영향을줍니다.
      • 실행 (x)은 파일을 실행할 수 있는지, 스크립트에 사용 ( #!) 및 기타 실행 파일에 영향을줍니다.
      • 교차 (x)는 디렉토리를 순회 할 수있는 경우에 영향을줍니다.
    • st— 디렉토리의 고정 비트 (t) 및 setgid (s)
      • 고정 비트는 디렉토리에만 영향을줍니다. 파일 소유자 및 루트를 제외한 다른 사람이 디렉토리의 파일을 삭제하지 못하게합니다.
      • 디렉토리의 setgid 비트는 새 파일 및 디렉토리에 그룹을 동일한 그룹으로 설정하고 새 디렉토리에는 setgid 비트가 설정됩니다 (setfacl의 기본값 참조).
    • s — 실행 파일에서 setuid, setgid.
      • 수행중인 작업을 모르면 보안에 나쁜 영향을 줄 수 있습니다.
      • 실행 파일이 실행될 때이 비트 중 하나가 설정되면 실행 파일의 유효 사용자 / 그룹이 파일의 유효 사용자 / 그룹이됩니다. 따라서 프로그램은 해당 사용자로 실행됩니다. 볼 setcap이 할 수있는 더 현대적인 방법을.

chown chgrp:


chattr: 파일 속성 변경

용법:

    chattr <operator><attribute> files...

operator문자 중 하나입니다 +-=: * +기존에 수 선택된 특성을 추가 attributesfiles * -선택한 제거합니다 attributes * =파일이 지정된으로이 속성의 현재 설정을 덮어 씁니다 attributes.

attribute문자의 조합으로 acdeijstuADST, 속성에 해당합니다.

  • a 추가 만
  • c 압축
  • d 덤프 없음
  • e 범위 형식
  • i 불변의
  • j 데이터 저널링
  • s 안전한 삭제
  • t 꼬리 병합 없음
  • u 삭제할 수없는
  • Aatime업데이트 없음
  • D 동기 디렉토리 업데이트
  • S 동기 업데이트
  • T 디렉토리 계층의 최상위

setfattr: 확장 파일 속성 변경

사용법 (설정된 속성) :

    setfattr -n <name> -v <value> files...

사용법 (제거) :

    setfattr -x <name> files...

name 설정하거나 제거 할 확장 된 속성의 이름입니다.

value 확장 된 속성의 새로운 값입니다.


setfacl: 파일 액세스 제어 목록 변경

용법:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option 다음 중 하나를 포함해야합니다.

  • --set 파일 또는 디렉토리의 ACL을 설정하고 이전 ACL을 대체
  • -m| --modify파일 또는 디렉토리의 ACL을 수정
  • -x| --remove 파일 또는 디렉토리의 ACL 항목 제거

    target문자 중 하나입니다 ugmo(또는 아래에 표시된 긴 형식).

  • u, users명명 된 사용자의 권한에 의해 확인 된 param파일 소유자가 기본값으로 uid생략하는 경우

  • g,로 group식별되는 명명 된 그룹의 권한 param, uid생략 된 경우 기본적으로 소유 그룹
  • m, mask유효 권한은 마스크
  • o, other다른 사람의 권한

    permsrwxX권한에 해당하는 문자 조합입니다 .

  • r 읽다

  • w 쓰다
  • x 실행하다
  • X 파일이 디렉토리이거나 이미 일부 사용자에게 실행 권한이있는 경우에만 실행

    또는 권한 집합을 나타내는 perms8 진수 ( 0- 7) 일 수 있습니다 .


setcap: 파일 기능 변경

용법:

    setcap <capability-clause> file 

A는 capability-clause쉼표로 구분 구성 능력 운영자 플래그 쌍 목록 이름 하였다.

사용할 수있는 사업자는 =, +하고 -. 사용 가능한 플래그는 e, i그리고 p받는 어떤 대응 효과 , 상속허용 기능을 설정합니다.

=연산자는 지정된 기능 집합을 올리고 다른 사람을 재설정합니다. =운영자 와 함께 플래그가 제공되지 않으면 모든 기능 세트가 재설정됩니다. +-연산자는 각각 하나 이상의 지정된 기능 세트를 높이거나 낮출 것이다.


chcon: 파일 SELinux 보안 컨텍스트 변경

용법:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

사용자는 같은 SELinux의 사용자이며 user_u, system_uroot.

역할 은 SELinux 역할입니다 (항상 object_r파일 사용).

type 은 SELinux 주제 유형입니다.


chsmack: SMACK 확장 속성 변경

용법:

    chsmack -a <value> file

valueSMACK64확장 파일 속성에 설정할 SMACK 레이블입니다.


setrichacl : 풍부한 액세스 제어 목록을 변경합니다.

richacl 은 고급 ACL을 추가하는 기능입니다.

현재 진행중인 작업이므로 그들에 대해 많이 말할 수 없습니다. 나는 그들을 사용하지 않았습니다.

이 질문도 참조하십시오. 기존의 'rwx'및 POSIX ACL 이외의 고급 파일 시스템 ACL이 있습니까? 매뉴얼 페이지


5
+1 각 cmd 사용법의 예를 추가 한 경우이 답변은 매우 유용 할 것입니다.
slm

1
@slm 제안 해 주셔서 감사합니다. 각 명령에 대한 간단한 사용법 설명을 추가했습니다.
Thomas Nyman

여기에 표시된 것보다 더 많은 기능을 수행하려는 사람에게 경고. 여기에 설명 된대로 기능을 사용했습니다. 그러나 포크와 exec를 통해 (유용하게) 상속하려고 시도하는 것은 불가능한 것 같습니다. 나는 버그가 있다고 생각합니다 unix.stackexchange.com/questions/196483/…
ctrl-alt-delor

이전 의견에서 언급 한 버그는 디자인 버그이며 주변 기능을 추가하여 커널 4.3에서 수정되었습니다. man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor

1
이 모든 것에 대한 예를보고 싶습니다. 이것은 정식 답변이 될 것입니다!
statquant

1

높은 수준에서 :

  • 지원 기본 파일 시스템 권한 모든 리눅스모든 파일 시스템 은 IS -rwxrwxrwx처리 chmod에 의해 처리되는 파일 시스템에있는 모든 파일 또는 폴더에 묶여 소유자와 그룹 식별자와 함께 chown하고 chgrp; 모두 기본적으로이 부분을 알고 있습니다.
  • xattr로 축약되거나 알려진 확장 파일 속성 . 파일 시스템 기능은 사용자가 컴퓨터 파일을 파일 시스템에 의해 해석되지 않은 메타 데이터와 연관시킬 수 있도록하는 반면, 일반 속성은 파일 시스템에 의해 엄격하게 정의 된 목적을 갖습니다. 속성은 프로세스와 연관된 환경 문자열과 유사하게 파일 및 디렉토리와 영구적으로 연관된 이름 : 값 쌍입니다. 이 메타 데이터를 다양한 파일 / 폴더로 설정하는 것과 관련된 특정 Linux 명령이 있습니다.
  • 안전한 리눅스 로 알려진 SELINUX . 당신은 그것에 역사를 웹 검색 할 수 있습니다. 또한 AppArmor와 같은 SELINUX의 대안이 있으며 다른 것도있을 수 있습니다. 현재 xattr을 사용하여 MAC (필수 액세스 제어)을 수행하기위한 기능과 메커니즘을 제공하는 커널 모듈입니다 . selinux는 파일 보안 레이블을 xattrs에 저장합니다 . 그리고 특정 selinux 관련 명령이 있습니다.

다른 요점 :

  • gatt / linux 의 시대와 버전은 xattr과 selinux가 사용 가능한 것과 기능적인 것에 관한 문제입니다.
  • 모든 파일 시스템이 xattr을 지원하는 것은 아닙니다. 사용중인 Linux의 배포 및 버전에 따라 개별 연구에 가장 적합합니다 (1960 년대의 rhel / suse / debian, irix, solaris, aix, unix)
  • uid / gid와 xattr을 가진 고유의 기본 파일 / 폴더 권한으로 모든 것이 가능합니다. SELinux는 xattr을 사용하여 파일 / 폴더 보안 레이블을 저장합니다. selinux를 사용하면 xattr에서 모든 하위 레벨 레거시를 수행 / 정의 할 수 있습니다. 따라서 고대 파일 시스템이 xattr을 지원하지 않으면 selinux를 사용하지 않을 것입니다.
  • selinux (또는 의류 또는 기타 커널 모듈)를 활성화 또는 비활성화 할 수 있습니다
  • 리눅스 버전에 따라 마운트 된 파일 시스템에 대해 xattr을 활성화 또는 비활성화 할 수 있습니다. SLES 11에서 fstab 마운트 옵션을 기억합니다.user_xattr 하며 설치시 루트 파일 시스템에서 xattr을 사용할 수 없도록 선택할 수 있습니다. RHEL / CentOS 7에서는 xattr이 기본적으로 있으며이를 가질 수 없다고 생각합니다.
  • ls당신이 볼 때 확장 파일 속성이 해당 개체 에 있음 -rwxrwxrwx++나타내는 경우 .
  • ACL ( 액세스 제어 목록 ) : 개체에 첨부 된 권한 목록입니다. ACL은 오브젝트에 대한 액세스 권한이 부여 된 사용자 또는 시스템 프로세스와 지정된 오브젝트에 허용되는 조작을 지정합니다.
  • centos 위키 selinux에서 : selinux는 커널에서 구현 된 MAC 보안 메커니즘입니다. SELinux를 사용하지 않으면 파일 권한 또는 ACL (액세스 제어 목록)과 같은 기존의 DAC (임의 액세스 제어) 방법 만 사용하여 사용자의 파일 액세스를 제어합니다. 사용자와 프로그램은 모두 다른 사람에게 안전하지 않은 파일 권한을 부여하거나 반대로 정상 작동에 필요하지 않은 시스템 부분에 액세스 할 수 있습니다. 기본적으로 기존 DAC 모델에는 루트와 사용자의 두 가지 권한 수준이 있으며 최소 권한 모델을 쉽게 적용 할 수있는 방법은 없습니다. 나중에 루트로 시작된 많은 프로세스는 제한된 사용자로 실행할 권한을 떨어 뜨립니다.
  • linux [kernel]은 모든 것을 파일 (블록 장치 또는 네트워크 포트)로 취급하기 때문에 xattr로 거의 모든 것을 태그하고 selinux를 통해 어떤 종류의 액세스 제어를 시행 할 수 있기 때문에 xattr과 ACL을 사용하는 관점에서 읽을 가치가 있습니다. 파일 / 폴더 만이 아닙니다. https://wiki.centos.org/HowTos/SELinux
  • xattr은 시스템과 파일 시스템 사이의 데이터 이동 및 NFS와 같은 확장 된 속성을 모두 인식하지 못할 수있는 구형 시스템과 xattr을 완전히 지원하는 [신규] 시스템에서 문제를 일으킬 수 있습니다. tarxattr로 물건 을 사용할 때주의하십시오. 시스템에 문제가 없지만 다른 곳으로 가면 xattr이 중요한 경우 문제가 될 수 있습니다 (즉, 삼바와 win10 ntfs와 linux ext3 / 4, btrfs, xfs 사이의 복사) 네트워크 연결 저장 장치 간)
  • xattrs에 정의 된 내용으로 ACL을 적용하는 selinux 또는 기타 메커니즘이없는 경우 xattrs는 이론적으로 아무 의미도 없으며 그 시점에서 추가 수하물이므로 떨어 뜨리거나 벗길 수 있습니다.
  • xattr을 통한 파일 시스템 lables가 손실되면 selinux를 적용 또는 허용으로 다시 변경할 때 문제가 발생할 수 있으므로 rhel / centos 7에서 selinux를 비활성화하는 데주의 하십시오 . 다시 한 번 그것은 리눅스 버전과 selinux를 통해 xattr을 어떻게 사용하고 있는지에 달려 있습니다.

기본 Samba 공유는 RHEL / CentOS 7에서 작동하지 않습니다. 기본적으로 selinux는 적용으로 설정되어 있기 때문입니다. selinux는 허용 할 때까지 모든 것을 거부하므로 selinux (bad)를 비활성화하거나 허용으로 설정하십시오. selinux를 적용 상태로두면 확장 속성을 사용하여 삼바 공유하려는 폴더에 레이블을 지정해야하므로 selinux는 공유를 인식하고 허용합니다. 따라서 selinux를 강제로두면 모든 selinux 명령을 사용하여 (필요한 xattrs 를 설정합니다 )

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

이 samba 공유가있는 Linux 시스템에서 selinux를 추가로 사용하여이 samba 공유 아래의 파일 / 폴더에 제한을 적용합니다 (확장 된 속성 사용). 이러한 파일 / 폴더가 공유되기 때문에 사용자는 합법적으로 일부를 win10 pc에 복사 한 다음 다시 복사하여 확장 된 속성을 잃게됩니다. 이제이 리눅스 시스템에서 selinux는 필요한 xattr이 더 이상 존재하지 않기 때문에 해당 파일에 대한 액세스를 제한하고, 사용자 / 관리자는 왜 작동하지 않는지 궁금해합니다. selinux를 설정하지 마십시오. xattr감사 로그 에 잃어버린 s 의 문제를 허용하고 인식하기 위해 xattr을 잃어버린 앞뒤 사본의 결과를 직접 나타내는 것은 아닙니다. 또한 데이터 백업 및 복원, 그리고 기억해야 할 잠재적 인 작업을 고려하십시오xattr올바른 기반으로 보안을 강화하려는 경우 uid / gid 외에 xattr.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.