制限されたシェルアクセスであなたの家のファイルに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。として実行すると、ownwww-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

関連情報