POSIXly, чтобы получить символическую ссылку -свободный абсолютный путь к каталогу, где путь (, возможно, относительный к текущему каталогу, возможно, с символическими ссылками )на который хранится в $dir
, при условии, что у вас есть поиск разрешение на этот каталог, вы можете сделать
(
case $dir in
(/*) CDPATH= cd -P "$dir";;
("") CDPATH= cd -P "";;
(*) CDPATH= cd -P "./$dir";;
esac && pwd -P
)
Здесь дословно скопировано из этого текста для включения в следующую редакцию спецификации POSIX .
Как отмечалось там, для случая ""
вы можете захотеть вывести ошибку вместо того, чтобы полагаться на неопределенное в настоящее время поведение cd
или записать его:
(
case "${dir:?directory cannot be empty}" in
(/*) CDPATH= cd -P "$dir";;
(*) CDPATH= cd -P "./$dir";;
esac && pwd -P
)
Обратите внимание, что префикс $dir
с ./
, когда он не является абсолютным, не так важен для $dir
, который не следует рассматривать как вариант, когда он начинается с -
(, для которого CDPATH= cd -P -- "${dir:?cannot be empty}"
было бы достаточно ). ], но для специального значения -
, вместо которого cd
интерпретируется как означающее $OLDPWD
, предыдущий рабочий каталог(и CDPATH= OLDPWD=- cd -P -- "${dir:?cannot be empty}"
не может быть использован переносимым образом для его обхода ).
Один из случаев, когда каталог не может иметь абсолютного пути, — это когда это текущий каталог и он не связан со своим родительским каталогом:
$ mkdir 1
$ cd 1
$ rmdir../1
$ cd -P.
$ ls -ld.
drwxr-xr-x 0 chazelas chazelas 0 Mar 27 06:53./
$ [ -d. ] && echo yes
yes
Все еще там, но:
$ pwd -P
.
$ realpath.
realpath:.: No such file or directory
$ readlink -ve.
readlink:.: No such file or directory
У него нет пути в файловой системе.
Ошибка Нет такого файла или каталога немного вводит в заблуждение, поскольку каталог .
действительно существует (, хотя с ним мало что можно сделать ), но, по крайней мере, в Linux, getcwd()
возвращается с ошибкой ENOENT
, указывающей на то, что связь с текущим каталогом отключена.
Если бы это было возможно, то любой мог бы смонтировать эту систему, прочитав хэш из вашего файла запуска, не зная пароля. Таким образом, если оставить хэш в виде простого текста, это будет по сути так же небезопасно, как оставить пароль в виде простого текста. По этой причине нет, это невозможно.
Хранение вашего хешированного пароля в незашифрованном -файле представляет собой потенциальную опасность, если вы можете получить доступ к своей файловой системе, используя этот хешированный пароль.
Любое шифрование не имеет смысла, если у вас нет процедуры аутентификации, которая может быть просто текстовым паролем, вашим отпечатком пальца, изображением вашего лица или глаза и т. д.
Еще вопрос, хотите ли вы, чтобы он автоматически монтировался после прохождения этой процедуры аутентификации. Я думаю, что это возможно, и вам не нужно хранить для этого хешированные пароли.
eCryptfs может монтироваться автоматически -, если пароль пользователя совпадает с выбранным паролем eCryptfs. Дополнительную информацию о том, как это сделать, можно найти здесь . Как только вы введете пароль gnome, ваш домашний каталог будет автоматически смонтирован.
Извините за некроскоп здесь, но с тех пор, как я начал работать над этим проектом, этот ответ всегда появляется первым. Мне удалось решить эту проблему без риска для безопасности (, насколько я знаю, я не эксперт ), используя следующий метод. Это, конечно, зависит от использования «связки ключей gnome» и основной связки ключей, использующей ваш пароль для входа в систему.
установить:libsecret-tools
иexpect
в терминале, запустите
secret-tool store --label="cryfs" cryfs cryfs
введите cryfs
пароль
написать первый скрипт (в моем случаеcryfs.sh
)
#!/usr/bin/expect -f
set password [lindex $argv 0];
spawn cryfs ~/Dropbox/cryfs-vault ~/cryfs-source
expect "Password: "
send "$password\r"
expect eof
написать второй скрипт(autocryfs.sh
)
#!/bin/bash
password=$(/usr/bin/secret-tool lookup cryfs cryfs)
/path/to/script/cryfs.sh $password
сделать оба скрипта исполняемыми
chmod +x /path/to/script/scriptname.sh
Наконец, отметьте сценарий для запуска при загрузке (в моем случае -Linux Mint -добавлено в системные настройки> приложения для запуска> добавить> пользовательская команда> имя :Cryfs, команда/path/to/script/autocryfs.sh startup delay: 5