ファイルと他のグループのファイルとの間のシンボリックリンクのための最良のソリューション

ファイルと他のグループのファイルとの間のシンボリックリンクのための最良のソリューション

目標状況:

  • 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_dirpostgres読み取ることができます。

ホームディレクトリ内のディレクトリを接続するのが便利かもしれません。

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、およびのみ書き込むことができます。peterpostgrespeterroot

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 .

上記では、ディレクトリなしで単一のファイルを使用しました。繰り返しますが、これはすべて権限を設定するだけです。質問で読んだよりも、自分がやっていることについてもっと知り、状況をどのように処理するかを決定します。

おすすめ記事