目標状況:
data/file.txt
所有者マイユーザー:マイユーザーと「-rw-rw-rw-」(chmod 666)- シンボリックリンク
/tmp/file.txt
オーナーポストグレス:ポストグレスそして「-rw-rw-rw-」
したがって、私のユーザーを使用してファイルを編集でき、他のユーザーもファイルを読み書きできますが、リンクとファイルは他のユーザーが所有します。
実際の状況:他の質問と同じ手順、
sudo rm /tmp/file.txt # if exist, remove
cd ~
sudo chmod 666 data/file.txt
ls -l data/file.txt # "-rw-rw-rw-" as expected
more data/file.txt # working fine
sudo ln -sf $PWD/data/file.txt /tmp/file.txt # fine
ls -l /tmp/file.txt # "lrwxrwxrwx", /tmp/file.txt -> /home/thisUser/file.txt
more /tmp/file.txt # fine
sudo chown -h postgres:postgres /tmp/file.txt
sudo more /tmp/file.txt # NOT WORK!
回避策は次のとおりsysctl -w fs.protected_symlinks=0
ですmore /tmp/file.txt
。しかし、安全ではありません。別の解決策が必要です。
バラより実生活の質問はこちら
ベストアンサー1
ディレクトリ/home
と/tmp
シンボリックリンクはこれには適しておらず、シンボリックリンクも使用されません。ファイルを保存するディレクトリを作成し、ACLを使用してそのファイルの権限を設定します。ユーザー名があるとしますpeter
。次のコマンドの一部は重複する可能性があり、明確にするためにのみ提供されています。
# Make a new directory to store the `file.txt`.
#
sudo mkdir /var/my_dir
# Change ownership and group ownership to root.
#
sudo chown root:root /var/my_dir
# Only allow root and members of root to read the directory.
#
sudo chmod 0750 /var/my_dir
# Begin to augment standard permissions with ACLs.
# Below, allow peter rwx for all new file system objects in /var/my_dir.
# (-d means "default" and -m means "mask")
#
setfacl -d -m u:peter:rwx /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:peter:rwx /var/my_dir
# Below, allow postgres r-x for all new file system objects in /var/my_dir.
#
setfacl -d -m u:postgres:r-x /var/my_dir
# Set the same mask for the directory itself.
#
setfacl -m u:postgres:r-x /var/my_dir
これでpeter
ファイルを作成し/var/my_dir
てpostgres
読み取ることができます。
ホームディレクトリ内のディレクトリを接続するのが便利かもしれません。
cd && ln -s /var/my_dir .
再起動後、そのファイルは/tmp
消えなければなりません。通常、ホームディレクトリのファイルにリンクするのは良い習慣ではありません。まだ理解していない場合は、この言葉を説明します。この目的のためのより良い場所はありますが、/usr/local/var/my_dir
ポイントは、/tmp
この目的のために、そしてシンボリックリンクを使用するのではなく、正しい権限を取得しようとすることです。/home
修正する
これは、SFTP / SCPクライアントなどの他のソフトウェアとより互換性のあるより簡単な標準的な方法で行うこともできます。
sudo mkdir /var/my_dir
sudo chown peter:postgres /var/my_dir
sudo chmod 0750 /var/my_dir
これで、ファイルは何でも、およびでのみ読み取る/var/my_dir
ことができroot
、およびのみ書き込むことができます。peter
postgres
peter
root
umask
次に、作成したファイルをpostgres
読み取ることができることを確認してください。
cd
touch test
ls -l test
結果にr
「Other」と表示されている場合はpostgres
読み取ることができます/var/my_dir
。
別の方法があります...
sudo touch /usr/local/var/file.txt
sudo chown peter:postgres /usr/local/var/file.txt
sudo chmod 0640 /usr/local/var/file.txt
cd
ln -s /usr/local/var/file.txt .
上記では、ディレクトリなしで単一のファイルを使用しました。繰り返しますが、これはすべて権限を設定するだけです。質問で読んだよりも、自分がやっていることについてもっと知り、状況をどのように処理するかを決定します。