Любой другой ответ здесь требует root-доступа, позволяет любому пользователю на том же компьютере скопировать файл или требует совместного использования пароля. Вот метод, который не делает:
Пусть USER2
(назовем его Бобом) выполнить следующие команды (вы можете заменить /tmp
любой каталог, на который у обоих пользователей есть разрешения на запись, но /tmp
он идеален, потому что по умолчанию он липкий, что не позволяет злонамеренному пользователю подорвать этот процесс. Бобом, который читается всем миром, тоже работает):
[bob@computer ~]$ touch /tmp/test.txt
[bob@computer ~]$ chmod 622 /tmp/test.txt
Это создает файл, который доступен для записи во всем мире, но не для чтения.
Затем USER1
запустите (назовем ее Алиса) (если вы параноик, Алиса может сначала проверить разрешения, чтобы убедиться, что файл принадлежит Бобу):
[alice@computer ~]$ dd if="$HOME/test.txt" of=/tmp/test.txt
Это перезаписывает содержимое /tmp/test.txt
. Если вы хотите проверить целостность файла, Алиса также должна сгенерировать хеш файла. Например:
[alice@computer ~]$ openssl sha1 < "$HOME/test.txt" > /tmp/test.txt.sha1
Вместо этого вы можете подписать файл цифровой подписью или любым другим способом гарантировать его целостность.
И, наконец, Боб перемещает файл и становится его владельцем:
[bob@computer ~]$ mv /tmp/test.txt "$HOME"
[bob@computer ~]$ chmod 600 "$HOME/test.txt"
И Боб может проверить целостность, если он хочет. Если это так, он должен проверить, чтобы убедиться, что только Алиса может писать /tmp/test.txt
.
[bob@computer ~]$ diff /tmp/test/txt.sha1 <(openssl sha1 < "$HOME/test.txt")
Если файл был скопирован правильно, это не должно отображать вывод.