WebDAV를 통해 액세스 할 수있는 encfs 암호화 폴더를 원격으로 마운트 할 수있는 웹 페이지를 작성했습니다. 기본적으로 마운트 / 마운트 해제 버튼이있는 비밀번호 양식으로, 양식을 통해 제공된 비밀번호로 사전 정의 된 encfs 암호화 드라이브를 마운트 / 마운트 해제하려고 시도합니다. 기본적으로 인터넷에 액세스 할 수있는 래퍼
encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted
이것은 암호화 된 드라이브를 마운트 / 마운트 해제 할 수 있고 WebDAV를 통해 암호화되지 않은 데이터를 보거나 읽을 수 있기 때문에 의도 한대로 작동합니다.
그러나 이상한 일이 벌어지고 있습니다. 폴더의 암호화되지 않은보기는 WebDAV를 통해서만 액세스 할 수 있습니다.
나는 실행하는 경우 는 sudo -u www가 데이터 LS -la의 / var / www가 또는 다른 사용자로 (WWW-데이터는 또한 드라이브를 장착, 사용자가, 내가 htop과를 확인했습니다 때문에 웹 서버을 실행하는 사용자입니다), I 일반적으로 다음과 같은 일반적인 encfs 폴더가 아닌 일반 폴더로 마운트 지점 (위의 예에서 / var / www / unencrypted)을 참조하십시오.
drwxr-xr-x 5 www-data www-data 4096 Feb 1 02:25 .
drwxr-xr-x 15 root root 4096 Jan 31 11:46 ..
d????????? ? ? ? ? ? unencrypted
그러나 실제로는 다음과 같이 보입니다.
drwxr-xr-x 5 www-data www-data 4096 Feb 1 02:25 .
drwxr-xr-x 15 root root 4096 Jan 31 11:46 ..
drwxr-xr-x 2 www-data www-data 4096 Jan 31 21:47 unencrypted
일반 폴더와 같습니다 (WebDAV를 통해 액세스 할 때 동일한 폴더에 데이터가 있지만 비어있는 것으로보고 됨).
또한 encfs 드라이브가 마운트되었음을 나타내는 항목이 / etc / mtab에 없습니다. 모든 의도와 목적을 위해 드라이브가 마운트되지 않은 것처럼 보이지만 실제로는 확실하지만 WebDAV를 통해 액세스 할 수 있고 htop에 표시된 것처럼 ecnfs 프로세스도 명확하게 실행되고 있기 때문입니다.
어떻게 이런 일이 발생하고 어떻게 해결합니까?
추신 : 내가 달리면
sudo -u www-data bash -c "echo $(cat /tmp/passwort_file) | encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted"
터미널에서 그러한 동작이 없습니다. 폴더는 여전히 WebDAV를 통해 액세스 할 수 있지만이 경우 / etc / mtab에도 올바르게 표시되며 ls -la를 사용할 때 encfs 드라이브로도 표시됩니다 .
나는 이것이 서비스 관리자로 systemd를 사용하는 Debian Linux 또는 Ubuntu라고 가정하고 있습니다.
Linux는 파일 시스템의 다른 뷰를 다른 프로세스에 제공하는 "마운트 네임 스페이스"를 지원합니다 (예 : chroot와 같지만 훨씬 더 유연하고 골치 아플 수 있음). Systemd는이 기능을 사용하여 보안 문제 및 공격으로부터 시스템을 강화할 수 있습니다. 예를 들어, 특정 서비스는 / home을 비어 있거나 / etc를 읽기 전용으로 볼 수 있습니다.
대부분의 배포판은 apache2.service에서 이러한 보안 설정을 사용합니다.를 실행 systemctl cat apache2
하면 자체 개인 /tmp
디렉터리 를 갖도록 구성되어 있음을 알 수 있습니다 .
[Service]
...
PrivateTmp=true
마운트 네임 스페이스의 부작용은 다소 전역 적이라는 /
것입니다. 단일 마운트 만 필요하더라도 아래에 Apache 전용 마운트를 생성 할 수 있도록 시스템이 "unshares" 되면 동일한 효과가에서 생성 된 모든 마운트에 계속 적용됩니다 . Apache 서비스. (서비스의 경우 이는 어느 정도 의도적 인 것입니다. 웹 서버가 파일 시스템을 마운트해야하는 이유는 무엇입니까? 최소 권한의 원칙입니다.)
따라서 findmnt
또는 을 실행 cat /proc/self/mounts
하면 루트 네임 스페이스에서만 마운트가 표시됩니다. 그러나 nsenter --mount --target <APACHE_PID> findmnt
또는 을 실행 cat /proc/<APACHE_PID>/mounts
하면 루트 네임 스페이스에서 상속 된 것과 Apache 프로세스에 대한 개인 정보가 모두 표시됩니다.
이 보호, 실행을 해제하려면 systemctl edit --full apache2
로 시작하고 모든 설정을 제거 Private*
, ReadOnly*
또는 Inaccessible*
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다