셸에서 현재 사용자의 모든 쓰기 권한을 제거할 수 있습니까?

셸에서 현재 사용자의 모든 쓰기 권한을 제거할 수 있습니까?

이는 보안 목적이 아닙니다.

쉘 스크립트를 실행하고 싶고 최선을 다해 감사 로깅, avc 보고, syslog 등 이외의 부작용이 없다고 가정해 보겠습니다. 실제로 이 스크립트에 대한 모든 쓰기 권한을 제거하고 싶습니다.현재 사용자전체 쉘 세션 동안. 나는 신중하게 관리되는 파일 권한으로 그룹 및 권한이 낮은 사용자를 설정하는 데 관심이 없습니다. 어떤 옵션이 있습니까?

이상적으로는 모든 posix 쉘을 대상으로 삼고 싶지만 bash가 나에게 가장 친숙하기 때문에 시작하겠습니다.

남자 배쉬를 읽어보세요,제한된 껍질유망해 보이지만 잘못된 위치에서는 너무 제한적입니다. 예를 들어, 나는 여전히 그것을 사용할 수 cd있고 그런 것을 막지 않았으면 좋겠다 echo foo | tee /file. 마찬가지로 bash set옵션은 하위 프로세스에 의한 쓰기를 제한하지 않기 때문에 충분히 제한적이지 않습니다. 예를 들어 (set -C; echo foo | tee /file)내가 원하는 것을 달성하지 못합니다.

또한 단일 SSH 세션 내에서 이 "읽기 전용" 모드를 시작/종료할 수 있기를 원하기 때문에 overlayfs 사용을 피하고 싶습니다.

내가 얻은 가장 가까운 것은 최대 파일 크기 ulimit를 0으로 낮추는 것입니다.

(ulimit -f 0; echo "blows up w/ signal SIGXFSZ" > file; ); echo $?

이것은 내가 찾고 있는 것과 매우 유사해 보이며 와 같은 셸에서 작동 dash하지만 여전히 빈 파일을 남겨두는 문제가 있습니다. 따라서 위의 예에서는 "file"이 생성되었지만 비어 있습니다.

SELinux를 사용하는 사용자 세션을 더 엄격한 범위로 제한하는 방법이 있다고 생각했지만 도움이 되는 포인터를 사용했습니다.

다른 옵션이 있나요?

제가 관심을 갖고 있는 또 다른 옵션은 프로세스 중에 IO 쓰기를 간단히 모니터링하는 것입니다. 아마도 cgroup을 이러한 목적으로 사용할 수 있을 것입니다. 그러나 저는 이에 익숙하지 않습니다. 아니면 systemd-run도 유용할 수도 있습니다.

답변1

완전한 대답은 아니지만 아마도 하나의 포인터 일 것입니다 ...

어쩌면 좋아Linux 디스크 할당량 시스템예, 데비안 quota패키지 설명:

  Description-en: disk quota management tools
   This package provides the standard set of utilities for manipulating
   file system usage caps via the Linux Diskquota system. It can set hard
   or soft limits with adjustable grace periods on block or inode usage for
   users and groups. It allows users to check their quota status,
   integrates with LDAP, and supports quotas on remote machines via NFS.

대략적인 개요는 다음과 같습니다.

  1. 대부분의 내용을 쓰기 금지하여 게스트 시스템이나 홈 디렉토리를 설정한 다음

  2. 사용자에 대한 할당량 시스템 활성화푸바, 설정 0.

관련 정보