목표 상황:
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
, 및 에만 쓸 수 있습니다.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 .
위에서는 디렉터리 없이 단일 파일을 사용했습니다. 다시 말하지만, 이 모든 것은 권한을 설정하는 것뿐입니다. 질문에서 읽은 것보다 자신이 하고 있는 일에 대해 더 많이 알고 상황을 처리하는 방법을 결정하면 됩니다.
답변2
여기에는 오해가 있습니다. 심볼릭 링크의 권한을 변경하는 것은 의미가 없습니다. chmod
맨페이지 에서 인용하세요 (굵은 글꼴은 제가 쓴 것입니다):
chmod
심볼릭 링크의 권한은 결코 변경되지 않습니다.chmod
시스템 호출로는 해당 권한을 변경할 수 없습니다. 이건 문제가 되지 않으니까심볼릭 링크 권한은 사용되지 않습니다..
심볼릭 링크는 필요하지 않습니다. PostgreSQL과 파일을 공유하려면 파일의 그룹 소유자를 사용자 그룹 postgres
( postgres
Debian 계열 시스템의 경우)으로 변경한 다음 chmod g+rw
파일을 변경해야 합니다.