전역적으로 쓰기 가능한 파일 및 사용자 기반 프로세스 감옥

전역적으로 쓰기 가능한 파일 및 사용자 기반 프로세스 감옥

x나는 일반적으로 특정 실행 파일(악성일 수 있음)을 선택 하고 특정 디렉터리(동적으로 파생됨)로 제한된 쓰기 권한을 사용하여 이를 실행(관리자 계정에서) 할 수 있기를 원합니다 "${dirs[@]}".

실행 파일은 시스템에서 전역적으로 액세스할 수 있는 모든 항목에 액세스할 수 있어야 합니다.

나는 간단한 사용자 전환을 사용하고 전용 상태 비저장 시스템 사용자가 foreveralone이러한 실행 파일을 실행할 수 있다고 생각했습니다.

이러한 제한 하에서 실행 하고 싶을 때마다 잠금 파일을 x만든 다음 .flockchown -R foreveralone:foreveralone -- "${dirs[@]}"sudo -u foreveralone -g foreveralone $PWD/x

그 후에는 파일 시스템에 영구 파일이 없도록 chown다른 사람에게 디렉토리를 작성 했습니다. s 파일의 전역 쓰기 디렉터리(예: ) foreveralone도 정리해야 할 것 같습니다 ./tmp, /dev/shmforeveralone

내 질문은 다음과 같습니다

  1. 표준 설정 *nix 시스템을 고려할 때 이것이 감옥 프로세스를 위한 실행 가능하고 안전한 메커니즘입니까?
  2. *nix에서 전역적으로 쓰기 가능한 표준 위치와 파일은 정확히 무엇입니까?
  3. 비슷한 것보다 더 나은 것을 어떻게 찾을 수 있습니까?

    sudo -u Foreveralone -g Foreveralone 찾기 /! -type l -쓰기 가능 2>/dev/null | -type l -쓰기 가능 2>/dev/null | grep -v '^/proc'

    (저의 find게임이 너무 약합니다. /proc/$pid쓰기 가능한 것처럼 보이지만 그렇지 않은 파일이 많은 것 같아서 건너뜁니다(무슨 일인지 궁금합니다)).

어쨌든 내 시스템에서는 3. 다음을 반환합니다(파일 형식을 표시하도록 필터링됨).

  character special file    /dev/full
  character special file    /dev/fuse
  character special file    /dev/net/tun
  character special file    /dev/null
  character special file    /dev/ptmx
  character special file    /dev/random
  character special file    /dev/tty
  character special file    /dev/urandom
  character special file    /dev/zero
  character special file    /sys/kernel/security/apparmor/.null
  directory /run/lock
  directory /run/shm
  directory /tmp
  directory /tmp/.ICE-unix
  directory /tmp/.X11-unix
  directory /var/local/dumps
  directory /var/mail
  directory /var/spool/samba
  directory /var/tmp
  regular empty file    /run/sendmail/mta/smsocket
  regular empty file    /sys/kernel/security/apparmor/.access
  socket    /dev/log
  socket    /run/acpid.socket
  socket    /run/avahi-daemon/socket
  socket    /run/cups/cups.sock
  socket    /run/dbus/system_bus_socket
  socket    /run/gdm_socket
  socket    /run/mysqld/mysqld.sock
  socket    /run/samba/nmbd/unexpected
  socket    /run/sdp
  socket    /tmp/.ICE-unix/2537
  socket    /tmp/mongodb-27017.sock
  socket    /tmp/.X11-unix/X0
  1. 더 나은(더 간단하고 유연한 솔루션)이 있습니까?

내 특별한 경우에는 x잘못된 위치에 쓰거나 전역적으로 읽을 수 없는 내용을 읽지 않고 실행되어야 하는 잠재적으로 악의적인 빌드 스크립트입니다.

답변1

우선 내 나쁜 영어로 인해 죄송합니다. 도움이 될 수도 있고 아닐 수도 있기 때문에 UNIX 개념을 사용하여 뭔가를 보여드리겠습니다.

모든 사용자가 nano 실행 파일을 실행할 수 있기를 원하지만 실행 파일을 호출한 사용자가 아니라 아파치 구성이나 특정 그룹의 파일만 편집할 수 있는 제한된 환경, 즉 Nano가 실행하기를 원한다고 상상해 보십시오. Linux 서비스와 마찬가지로 특정 가상 사용자 권한으로 제한됩니다.

1- 먼저 nano 사용자를 생성하고 로그인을 비활성화합니다.

useradd nano -d /var/nano
mkdir /var/nano 
chown -R nano:nano /var/nano
passwd -l nano

2- nano가 사용자 nano로 실행되도록 강제하겠습니다(예: 루트가 nano를 호출하는 경우 루트가 아닌 nano로 실행해야 함)

chown nano:nano /usr/bin/nano
chmod a+s /usr/bin/nano

이제 +s는 nano를 호출한 사람이 아닌 소유자로 실행된다는 의미입니다.

3- 테스트를 위해 루트를 사용하여 nano를 호출합니다.

#nano
#ps aux | grep nano
nano      3399  0.0  0.0  13828  3840 pts/0    S+   08:48   0:00 nano

아름다운! Nano는 이제 로그인한 사용자와 관계없이 nano 사용자로 실행됩니다.

4-이제 뭐죠? nano가 /var/www/apache2의 파일을 편집하도록 하고 싶습니다.

chgrp -R www-data /var/www/ (yes i now that is unnecessary in Debian if the group are respected)
chmod -R g+rw /var/www 
adduser nano www-data

5-또 뭐야?

이제 모든 사용자가 nano(또는 특수 복사본 "nano-special" ;-)를 사용하여 /var/www 파일을 편집할 수 있으므로 nano 그룹의 사용자만 이 작업을 수행할 수 있도록 하려면 다음을 수행하십시오. 이건 어떡하지?

실행하려면 다른 권한을 제거하기만 하면 됩니다.

chmod o-x /usr/bin/nano 

사용자를 nano 그룹에 추가합니다.

adduser myuser1 nano

관련 정보