방금 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-utils
semanage를 사용하여 변경한 내용은 "지속적"이며 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