새로 생성된 파일을 "system_u"로 표시하는 방법은 무엇입니까?

새로 생성된 파일을 "system_u"로 표시하는 방법은 무엇입니까?

방금 freetds에 대한 빈 conf 파일을 생성했는데 권한이 잘못된 것을 발견했습니다.

[root@box etc]# touch freetds.conf.new
[root@box etc]# ll -lZ freetds.conf*
-rw-r--r--. root root system_u:object_r:etc_t:s0   freetds.conf
-rw-rw----. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

그래서 나는 다음을 시도한다:

[root@box]# semanage fcontext -a -t system_u /etc/freetds.conf.new 

그러나 이것은 실패합니다.

ValueError: Type system_u is invalid, must be a file or device type

freetds.conf.new 파일의 레이블을 에서 로 변경하려면 무엇을 사용해야 합니까 unconfined_u?system_u

답변1

"임시" 라벨 변경은 chcon다음 명령을 사용하여 수행됩니다.

bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
bash-4.2# chcon -t etc_t -u system_u freetds.conf.new 
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       freetds.conf.new

영구적인 변경은 semanage명령을 통해 수행됩니다. /etc/selinux/targeted/contexts/files/file_contexts.local그러면 적용할 수 있는 행이 추가(또는 수정)됩니다 restorecon.

이제 새 파일부터 시작하겠습니다.

bash-4.2# rm freetds.conf.new
bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

이에 대한 규칙을 추가할 수 있습니다.

bash-4.2# semanage fcontext -a -t etc_t -s system_u /etc/freetds.conf.new
bash-4.2# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/etc/freetds.conf.new    system_u:object_r:etc_t:s0

그러나 이것은 파일을 변경하지 않았습니다

bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new

이제 적용해 보겠습니다.

bash-4.2# restorecon -vF /etc/freetds.conf.new
restorecon reset /etc/freetds.conf.new context unconfined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0
bash-4.2# ls -lZ /etc/freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/freetds.conf.new

ETA: 업데이트 후에 freetds.conf.new복사 하는 경우 freetds.conf이 명령을 사용하는 것이 더 chcon쉬우며, 이름이 올바른 경우 기존 규칙 세트가 다시 태그 지정을 처리합니다. semanage이것이 최종 이름인 경우에만 해당 형식을 사용하겠습니다.

답변2

Selinux 사용자 및 유형은 파일 속성에 저장됩니다. 사용하려면 RHEL9에 패키지를 semanage설치해야 합니다 . policycoreutils-python-utilssemanage를 사용하여 변경한 내용은 "지속적"이며 restorecon항상 정의된 위치에 해당 명명된 파일을 표시합니다. 이동한 후에는 restorecon파일이 표시되며 현재 위치와 관련된 유형으로 설정됩니다(예: /root/ 디렉터리의 경우 admin_home_t, /에 있는 파일의 경우 etc_runtime_t). 파일의 경우 어떤 방식으로든 더 이상 "지속적"이지 않으며 속성을 잃지 않고 파일 시스템에서 파일을 자유롭게 이동할 수 있습니다( cp -a복제 selinux 유형 및 관련 사용자를 사용하여 복사할 수도 있음). 따라서 파일 속성을 변경하기 위해 semanage를 사용하는 것은 잘못된 것 같습니다. /etc/selinux/targeted/contexts/files/file_contexts.local의 구조는 파일 경로의 규칙 세트이고 경로 자체가 아닌 실제 파일에 연결되지 않기 때문입니다. chcon엄격한 경로 데이터베이스를 사용하지 않고도 파일 컨텍스트가 변경되며, 이를 통해 변경된 파일 컨텍스트는 from 에서와 마찬가지로 재부팅, 이동 및 복사(-a 사용) 후에도 유지됩니다 semanage fcontext.

따라서 대부분의 경우 정답은 다음을 사용하는 것입니다.

chcon -u USER /path/to/files

필요에 따라 파일 속성의 파일에 태그를 지정합니다.

또한 semanage를 사용하여 연결된 selinux 사용자를 변경하는 경우 selinux 유형을 제공해야 합니다. 특정 파일이 정의된 사용자와 항상 동일한 selinux 레이블을 갖고 해당 유형이 변경되지 않도록 파일 목록을 생성해야 하는 경우 다음 명령을 사용할 수 있습니다.

for i in $(find /root/* -type f) ; do semanage fcontext -a -t $(ls -Z $i | awk -F':' '{print $3}') -s SELINUX_USER $i; restorecon -v $i ; done

파일이 이미 이런 방식으로 표시되어 있으면 semange fcontext오류가 발생합니다.

ValueError: File context for /root/sth.txy already defined

그리고 –a(추가) 대신 –m(수정)을 사용해야 합니다.

[root@box /]# for i in $(find /root/* -type f) ; do semanage fcontext -m -t $(ls -Z $i | awk -F':' '{print $3}') -s SELINUX_USER $i; restorecon -v $i ; done

관련 정보