제한된 셸 액세스로 사용자의 집에 있는 파일에 www-data 쓰기 액세스 권한을 부여하시겠습니까?

제한된 셸 액세스로 사용자의 집에 있는 파일에 www-data 쓰기 액세스 권한을 부여하시겠습니까?

Called를 사용하여 원격 서버 에 액세스 할 수 있지만 ssh호출 될 .UseR/tmpchmodsudochown

www-data이 경우 먼저 Apache 사용자에게 홈 폴더의 하위 디렉터리에 파일을 생성할 수 있는 권한을 부여하고 싶지만 UseR무엇을 하든 그럴 수 없습니다. 항상 "권한이 거부되었습니다"라는 메시지가 표시됩니다. 그런 다음 파일을 만들지 않고도 파일에 쓸 수 있도록 파일에 권한을 부여할 수 있을 것이라고 생각했습니다 . 개념을 테스트하기 위해 www-data다음 스크립트를 만들었고 ssh를 통해 그리고 PHP 스크립트에서 실행하여 다음과 같이 실행했습니다 . 그리고 몇 가지 로그를 얻었습니다.permtest.shUseRwww-data

관련된 경로 요소에 대한 분석은 다음과 같습니다.

755 drwxr-xr-x 27 root root 4096 Apr 28 11:51 /
1777 drwxrwxrwt 7 root root 4096 May 25 11:22 /tmp
755  drwxr-xr-x 9 root root 4096 Oct 25  2013 /home
755  drwxr-xr-x 9 root root 4096 Apr 29 12:49 /home/users
755  drwxr-xr-x+ 12 no root 4096 Apr 30 17:07 /home/users/GROUP
775  drwxrwxr-x+ 47 UseR group_users 4096 Jun 21 11:20 /home/users/GROUP/UseR
777  drwxrwxrwx+ 3 UseR group_users 4096 Jun 21 11:22 /home/users/GROUP/UseR/tmp

permtest.sh 1먼저 파일을 시작하는 UseRthen as 를 실행 www-data한 다음 파일에 추가하려고 시도하는 then as 를 실행합니다. 마지막으로 파일을 인쇄하는 as 를 실행하면 결과는 다음과 같습니다./tmp/home/users/GROUP/UseR/tmppermtest.sh 2www-dataUseRpermtest.sh 3UseR

+ cat /tmp/MYtest_UseR.txt
testing write
testing write again
test www-data append
test UseR append
+ cat /home/users/GROUP/UseR/tmp/MYtest_UseR.txt
testing write
testing write again
test UseR append
+ cat /tmp/MYtest_www-data.txt
testing write
testing write again
test www-data append
test UseR append
+ cat /home/users/GROUP/UseR/tmp/MYtest_www-data.txt
test UseR append

따라서 문제는 다음과 같습니다. in /tmpUseR둘 다 www-data인스턴스화 시 777 권한이 있는 파일을 생성할 수 있으며, 이후에 다른 사용자가 이 파일에 추가할 수 있습니다. 그러나 이것은 홈 폴더 하위 디렉토리에서는 불가능한 것 같습니다 /home/users/GROUP/UseR/tmp. 로 실행하면 own www-data에 추가하려고 하거나 생성하려고 시도하는 경우 메시지와 함께 명령이 실패합니다 . 이는 권한 777이 포함된 폴더에서 발생합니다 ./home/users/GROUP/UseR/tmp/MYtest_UseR.txtUseR/home/users/GROUP/UseR/tmp/MYtest_UseR.txtcannot create ... Permission denied/home/users/GROUP/UseR/tmp

그래서 내 질문은 다음과 같습니다

  • www-data위의 정보에 파일이 사용자 폴더에 생성되지 않는다는 것을 미리 알려주는 내용이 있습니까 /home/users/GROUP/UseR/tmp? 그렇지 않다면 원칙적으로 어떻게 이 정보를 얻을 수 있습니까(아래 스크립트를 실행하는 것 외에)?
  • 제한된 사용자로서 데이터를 수정/추가할 수 있도록 /home/users/GROUP/UseR/tmp파일 쓰기 권한을 허용하려면 어떤 옵션이 있어야 합니까?www-data

permtest.sh:

#!/bin/sh

STAGENUM=${1}
MESELF=$(whoami)
if [ "$STAGENUM" = "" ] ; then
  STAGENUM=1
fi

if [ "$STAGENUM" = "1" ] ; then
  for ix in /tmp /home /home/users /home/users/GROUP /home/users/GROUP/UseR /home/users/GROUP/UseR/tmp ; do
    printf '%s ' `stat -c "%a " ${ix} 2>&1`
    ls -lad ${ix} 2>&1
  done

  set -x
  for ix in /tmp /home/users/GROUP/UseR/tmp ; do
    touch ${ix}/MYtest_${MESELF}.txt 2>&1
    chmod 777 ${ix}/MYtest_${MESELF}.txt 2>&1
    ls -la ${ix}/MYtest_${MESELF}.txt 2>&1
    echo "testing write" > ${ix}/MYtest_${MESELF}.txt 2>&1
    echo "testing write again" | tee -a ${ix}/MYtest_${MESELF}.txt 2>&1
    cat ${ix}/MYtest_${MESELF}.txt 2>&1
    echo rm ${ix}/MYtest_${MESELF}.txt 2>&1 # don't remove now
  done
fi

if [ "$STAGENUM" = "2" ] ; then
  set -x
  echo "test $MESELF append" >> '/tmp/MYtest_UseR.txt' 2>&1
  echo "test $MESELF append" >> '/home/users/GROUP/UseR/tmp/MYtest_UseR.txt' 2>&1
  echo "test $MESELF append" >> '/tmp/MYtest_www-data.txt' 2>&1
  echo "test $MESELF append" >> '/home/users/GROUP/UseR/tmp/MYtest_www-data.txt' 2>&1
  set +x
  ls -la '/tmp/MYtest_UseR.txt' 2>&1
  ls -la '/home/users/GROUP/UseR/tmp/MYtest_UseR.txt' 2>&1
  ls -la '/tmp/MYtest_www-data.txt' 2>&1
  ls -la '/home/users/GROUP/UseR/tmp/MYtest_www-data.txt' 2>&1
fi

if [ "$STAGENUM" = "3" ] ; then
  set -x
  cat '/tmp/MYtest_UseR.txt' 2>&1
  cat '/home/users/GROUP/UseR/tmp/MYtest_UseR.txt' 2>&1
  cat '/tmp/MYtest_www-data.txt' 2>&1
  cat '/home/users/GROUP/UseR/tmp/MYtest_www-data.txt' 2>&1
  set +x
fi

if [ "$STAGENUM" = "4" ] ; then
  rm '/tmp/MYtest_UseR.txt' 2>&1 ;
  rm '/home/users/GROUP/UseR/tmp/MYtest_UseR.txt' 2>&1 ;
  rm '/tmp/MYtest_www-data.txt' 2>&1 ;
  rm '/home/users/GROUP/UseR/tmp/MYtest_www-data.txt' 2>&1
fi

답변1

귀하의 ls 출력은 다음과 같습니다+ACL 모드를 사용하여 파일 및 디렉터리를 기록합니다.

drwxr-xr-x+ ...

이로 인해 귀하의 액세스가 제한될 수 있습니다. ACL 권한 나열

getfacl <file or directory>

삭제하고

setfacl -b <file or directory>

그런 다음 다시 확인하세요.


OP에서 편집: 실제로 그게 다입니다. 여기에 ssh 셸에서 수행한 작업의 일부가 있습니다(먼저 한 파일의 다른 위치에서 권한을 복사한 다음 www-data다른 파일에 추가 권한을 부여함). www-data그런 다음 여기에 잘 추가할 수 있습니다. 파일:

UseR:~/tmp$ getfacl MYtest_www-data.txt
# file: MYtest_www-data.txt
# owner: UseR
# group: group_users
user::rw-
user:www-data:r-x       #effective:r--
group::r-x          #effective:r--
group:www-data:r-x      #effective:r--
mask::r--
other::r--

UseR:~/tmp$ getfacl /tmp/MYtest_www-data.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/MYtest_www-data.txt
# owner: www-data
# group: www-data
user::rwx
group::rwx
other::rwx

UseR:~/tmp$ getfacl /tmp/MYtest_www-data.txt | setfacl --set-file=- MYtest_www-data.txt
getfacl: Removing leading '/' from absolute path names
UseR:~/tmp$ getfacl MYtest_www-data.txt
# file: MYtest_www-data.txt
# owner: UseR
# group: group_users
user::rwx
group::rwx
other::rwx

UseR:~/tmp$ ls -la MYtest_www-data.txt
-rwxrwxrwx 1 UseR group_users 22 Jun 21 12:44 MYtest_www-data.txt

$ getfacl MYtest_UseR.txt
# file: MYtest_UseR.txt
# owner: UseR
# group: group_users
user::rwx
user:www-data:r-x
group::r-x
group:www-data:r-x
mask::rwx
other::rwx

UseR:~/tmp$ setfacl -m u:www-data:w MYtest_UseR.txt
UseR:~/tmp$ getfacl MYtest_UseR.txt
# file: MYtest_UseR.txt
# owner: UseR
# group: group_users
user::rwx
user:www-data:-w-
group::r-x
group:www-data:r-x
mask::rwx
other::rwx

UseR:~/tmp$ setfacl -m u:www-data:rw MYtest_UseR.txt
UseR:~/tmp$ getfacl MYtest_UseR.txt
# file: MYtest_UseR.txt
# owner: UseR
# group: group_users
user::rwx
user:www-data:rw-
group::r-x
group:www-data:r-x
mask::rwx
other::rwx

관련 정보