![루트 권한으로 파일을 읽고 다른 사용자 또는 그룹과 함께 저장](https://linux55.com/image/210345/%EB%A3%A8%ED%8A%B8%20%EA%B6%8C%ED%95%9C%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%BD%EA%B3%A0%20%EB%8B%A4%EB%A5%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EB%98%90%EB%8A%94%20%EA%B7%B8%EB%A3%B9%EA%B3%BC%20%ED%95%A8%EA%BB%98%20%EC%A0%80%EC%9E%A5.png)
루트 권한이 필요한 파일을 읽고 싶고 다른 사용자나 그룹과 함께 다른 곳에 저장해야 합니다. 예를 들어 루트가 필요한 dmesg를 읽고 사용자/그룹 권한 770: test /test를 사용하여 다른 곳에 저장합니다. 여기서 문제는 루트로 저장할 수 없다는 것입니다. 이것이 SElinux 정책이고 오류가 발생합니다. 그래서 파일을 저장할 때 프로세스 권한을 변경해야 합니다.
어떤 제안이 있으십니까?
답변1
스크립트가 루트로 실행 중입니다. 따라서 sudo
사용자로 실행하는 것을 방해하는 것은 없습니다. 루트로 파일에 쓸 수 없지만 다른 사용자로 파일에 쓸 수 있는 경우 다음 옵션을 사용할 수 있습니다.
target=/path/to/target/file
dmesg | sudo -u test tee "$target" >/dev/null
chmod 770 "$target"
su
대신 사용하고 싶다면 sudo
이 변형을 사용할 수 있습니다.
target=/path/to/target/file
dmesg | su test -c "tee '$target' >/dev/null'
chmod 770 "$target"
답변2
를 사용하면 zsh
다음을 수행할 수 있습니다(예 root
: ).
zmodload zsh/system
umask 0
() {local EGID=123 EUID=456; sysopen -wu3 -m770 -o excl file}
file
0770 권한으로 euid 456 및 egid 123으로 생성되고 열렸습니다 .
$ ls -nd file
-rwxrwx--- 1 456 123 0 Sep 5 17:05 file
그런 다음 실행하세요. dmesg >&3
채우세요.
(순서가 중요합니다. euid가 더 이상 0이 아니면 egid를 변경할 수 없습니다.)