Лучший обходной путь для символической ссылки файла с другой группой, чем файл

Поскольку вы запускаете это от имени root (используя sudo), вы проверили, есть ли псевдоним для cp в .bashrc или .profile? Что-то вроде:

alias cp="cp -i"

Попробуйте запустить команды с '\', например так:

sudo \cp -R /home/git/repo /var/www/website

\ в \cp заставит cp работать без псевдонима.

2
02.03.2019, 15:32
2 ответа

Каталоги /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 для "others", то 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 .

Выше мы работаем с одним файлом, без каталогов. Опять же, все это просто установка прав доступа. Вы просто должны решить, как вы хотите подойти к ситуации, имея больше знаний о том, что вы делаете, чем то, что мы можем прочитать в вопросе.

3
27.01.2020, 21:59

Здесь существует заблуждение. Нет смысла менять права символической ссылки. Цитирую страницу руководства chmod (выделение жирным - моё):

chmod никогда не изменяет права символических ссылок; системный вызов chmod не может изменить их права. Это не является проблемой, поскольку разрешения символических ссылок никогда не используются.

Символьные ссылки не нужны. Чтобы поделиться файлом с PostgreSQL, вы должны изменить группу-владельца файла на группу пользователя postgres (то есть postgres на Debian-подобных системах), затем chmod g+rw вашего файла.

1
27.01.2020, 21:59

Теги

Похожие вопросы