파일과 다른 그룹의 파일 간의 심볼릭 링크를 위한 최상의 솔루션

파일과 다른 그룹의 파일 간의 심볼릭 링크를 위한 최상의 솔루션

목표 상황:

  • data/file.txt소유자마이유저:마이유저및 "-rw-rw-rw-"(chmod 666)
  • 심볼릭 링크 /tmp/file.txt소유자포스트그레스: 포스트그레스그리고 "-rw-rw-rw-"

따라서 내 사용자를 사용하여 파일을 편집할 수 있고 다른 사용자(postgres)도 파일을 읽고 쓸 수 있지만 링크와 파일은 다른 사용자가 소유합니다.

실제 상황:다른 질문과 동일한 단계,

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, 및 에만 쓸 수 있습니다.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 .

위에서는 디렉터리 없이 단일 파일을 사용했습니다. 다시 말하지만, 이 모든 것은 권한을 설정하는 것뿐입니다. 질문에서 읽은 것보다 자신이 하고 있는 일에 대해 더 많이 알고 상황을 처리하는 방법을 결정하면 됩니다.

답변2

여기에는 오해가 있습니다. 심볼릭 링크의 권한을 변경하는 것은 의미가 없습니다. chmod맨페이지 에서 인용하세요 (굵은 글꼴은 제가 쓴 것입니다):

chmod심볼릭 링크의 권한은 결코 변경되지 않습니다. chmod시스템 호출로는 해당 권한을 변경할 수 없습니다. 이건 문제가 되지 않으니까심볼릭 링크 권한은 사용되지 않습니다..

심볼릭 링크는 필요하지 않습니다. PostgreSQL과 파일을 공유하려면 파일의 그룹 소유자를 사용자 그룹 postgres( postgresDebian 계열 시스템의 경우)으로 변경한 다음 chmod g+rw파일을 변경해야 합니다.

관련 정보