web-dev-qa-db-ja.com

ルートアクセスなしでファイルの所有権を変更することは可能ですか?

ユーザーAがfile.txtを所有している場合、ユーザーAはルートアクセスなしでファイルの所有権をユーザーBに変更できますか?ユーザーAとしてchown B file.txtを実行すると、Operation not allowedエラーが表示されます。ユーザーAはファイルを所有しているため、所有権を変更できるはずですが、その方法はわかりません。助けてくれてありがとう!

19
Daniel

ユーザーAがfile.txtを所有している場合、ルートアクセス/ Sudo許可なしではfile.txtの所有権を変更できません。これは機能であり、バグではありません。そして、長老たちがこの機能を導入することを選んだ多くの理由の1つは、 roadmr による質問へのコメントで説明されています

ボトムライン:root/Sudoパーミッションのないファイルの所有者であれば、chmodを使用してファイルのパーミッションを変更できますが、 root/Sudo権限のないファイルの所有者であっても、ファイルの所有者(ユーザーまたはグループ(chownまたはchgrpのいずれかを使用)を変更することはできません。これは機能であり、バグではありません。

7
Nitin Venkatesh

ユーザーBにアクセスできる場合は、Bとしてログインしたままファイルをコピーできます。ユーザーAにもアクセスできる場合は、ログインして元のファイルを削除できます。最後に、コピーされたファイルの名前を元の名前(再びB)に変更します。これにより、異なるユーザーが所有する本質的に同じファイルが残ります。

明らかに同じファイルではありませんが、ファイルの内容のみを気にする場合、これはトリックです

2
kuvic

Sudoを使用せずに、ファイルまたはフォルダーの所有権を変更できます。ただし、Thingに対する読み取り/書き込み権限があり、任意のユーザーではなく所有者をYOUにのみ変更できます。トリックは、それが何であれ単純にコピーし、オリジナルを削除してから、コピーをその場所に移動することです。残念ながら、これにはすべての完全なコピーが含まれますが、あなたは何をしますか。

例えばchuser.sh:

#!/bin/bash

TMP="some_temporary_filename_this_is_dumb"

RECURSIVE=""
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -r|--recursive)
    RECURSIVE="-r"
    shift # past argument
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift # past argument
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

cp -d --preserve=all $RECURSIVE $1 $TMP || exit 1
rm $RECURSIVE $1
mv $TMP $1
1
Scott