VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/Unix/FilesystemPath.cpp
blob: 66ae3dbb6ee876850a314ee4ac337bbec2ad5ea4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.

 Governed by the TrueCrypt License 3.0 the full text of which is contained in
 the file License.txt included in TrueCrypt binary and source code distribution
 packages.
*/

#include "Platform/FilesystemPath.h"
#include "Platform/SystemException.h"
#include "Platform/StringConverter.h"
#include <stdio.h>
#include <sys/stat.h>

namespace VeraCrypt
{
	void FilesystemPath::Delete () const
	{
		throw_sys_sub_if (remove (string (*this).c_str()) == -1, Path);
	}

	UserId FilesystemPath::GetOwner () const
	{
		struct stat statData;
		throw_sys_if (stat (StringConverter::ToSingle (Path).c_str(), &statData) == -1);

		UserId owner;
		owner.SystemId = statData.st_uid;
		return owner;
	}

	FilesystemPathType::Enum FilesystemPath::GetType () const
	{
		// Strip trailing directory separator
		wstring path = Path;
		size_t pos = path.find_last_not_of (L'/');
		if (path.size() > 2 && pos != path.size() - 1)
			path = path.substr (0, pos + 1);

		struct stat statData;
		throw_sys_sub_if (stat (StringConverter::ToSingle (path).c_str(), &statData) != 0, Path);
		
		if (S_ISREG (statData.st_mode)) return FilesystemPathType::File;
		if (S_ISDIR (statData.st_mode)) return FilesystemPathType::Directory;
		if (S_ISCHR (statData.st_mode)) return FilesystemPathType::CharacterDevice;
		if (S_ISBLK (statData.st_mode)) return FilesystemPathType::BlockDevice;
		if (S_ISLNK (statData.st_mode)) return FilesystemPathType::SymbolickLink;

		return FilesystemPathType::Unknown;
	}

	FilesystemPath FilesystemPath::ToBaseName () const
	{
		wstring path = Path;
		size_t pos = path.find_last_of (L'/');

		if (pos == string::npos)
			return Path;

		return Path.substr (pos + 1);
	}

	FilesystemPath FilesystemPath::ToHostDriveOfPartition () const
	{
		DevicePath path;

#ifdef TC_LINUX

		path = StringConverter::StripTrailingNumber (StringConverter::ToSingle (Path));

#elif defined (TC_MACOSX)

		string pathStr = StringConverter::StripTrailingNumber (StringConverter::ToSingle (Path));
		path = pathStr.substr (0, pathStr.size() - 1);

#elif defined (TC_FREEBSD)

		string pathStr = StringConverter::ToSingle (Path);
		size_t p = pathStr.rfind ("s");
		if (p == string::npos)
			throw PartitionDeviceRequired (SRC_POS);
		path = pathStr.substr (0, p);

#elif defined (TC_SOLARIS)

		path = StringConverter::StripTrailingNumber (StringConverter::ToSingle (Path)) + "0";

#else
		throw NotImplemented (SRC_POS);
#endif
		if (!path.IsDevice())
			throw PartitionDeviceRequired (SRC_POS);

		return path;
	}
}
span class="p">>В задачи VeraCrypt <strong>не</strong> входит:</p> <ul> <li>шифрование или защита любой области ОЗУ (оперативной памяти ПК);</li> <li>защита данных в компьютере,* если атакующий имеет привилегии&dagger; администратора в среде операционной системы, установленной в этом компьютере;</li> <li>защита данных в компьютере, содержащем какое-либо вредоносное ПО (например, вирус, трояна, шпионскую программу) или любую часть ПО (включая TrueCrypt или компонент операционной системы), которая была изменена, создана или может быть подконтрольна атакующему;</li> <li>защита данных в компьютере, если у атакующего был к нему физический доступ до или во время работы VeraCrypt;</li> <li>защита данных в компьютере, если у атакующего есть физический доступ к нему между временем завершения работы VeraCrypt и временем, необходимым для окончательного и безвозвратного стирания/утери всей информации из модулей временной памяти, подключённых к компьютеру (включая модули памяти в периферийных устройствах);</li> <li>защита данных в компьютере, если атакующий может удалённо перехватить излучения от аппаратуры компьютера (например, от монитора или кабелей) во время работы VeraCrypt (или иным образом выполнять удалённый мониторинг аппаратной части ПК и её использования, непосредственно или косвенно, во время работы VeraCrypt в этом ПК);</li> <li>защита данных, хранящихся в томе&Dagger; VeraCrypt, если атакующий без привилегий администратора имеет доступ к содержимому смонтированного тома (например, если права на файл/папку/том не препятствуют такому доступу атакующего);</li> <li>сохранение/контроль целостности или аутентичности зашифрованных и расшифрованных данных;</li> <li>предотвращение анализа трафика при передаче зашифрованных данных по сети;</li> <li>предотвращение определения неприятелем, какие сектора с содержимым тома были изменены (а также когда и сколько раз), если неприятель имеет возможность следить за томом (смонтированным или не смонтированным) до и после записи в него, либо если носитель/устройство хранения информации позволяет неприятелю определять такую информацию (например, том находится на устройстве, сохраняющем метаданные, которые можно использовать для выяснения, когда данные были записаны в конкретный сектор);</li> <li>шифрование "на месте" любых имеющихся незашифрованных данных (или перешифрование/удаление данных) в устройствах/файловых системах с технологией распределения износа ячеек памяти (wear-leveling) или иным перераспределением данных внутренними средствами;</li> <li>гарантия, что пользователь выбирает криптографически надёжные пароли и ключевые файлы;</li> <li>защита любого аппаратного компонента компьютера или всего компьютера;</li> <li>защита данных в компьютере, в котором не соблюдены условия, перечисленные в главе <a href="Security%20Requirements%20and%20Precautions.html"> <em>Требования безопасности и меры предосторожности</em></a>.</li> <li>выполнение чего-либо, указанного в разделе <a href="Issues%20and%20Ограничения.html#limitations"> Ограничения</a> (глава <a href="Issues%20and%20Ограничения.html"> Замеченные проблемы и ограничения</a>).</li></ul> <p>В среде <strong>Windows</strong> пользователь без привилегий администратора может (при условии, что используются стандартные конфигурации VeraCrypt и операционной системы):</p> <ul> <li>монтировать любой том VeraCrypt на основе файла при условии, что это позволено правами на файловый контейнер;</li> <li>монтировать любой том VeraCrypt на основе раздела/устройства;</li> <li>завершать процесс предзагрузочной аутентификации и, таким образом, получать доступ к данным на зашифрованном системном разделе/диске (и запускать зашифрованную операционную систему);</li> <li>пропускать процесс предзагрузочной аутентификации (это можно предотвратить, отключив параметр <em>Настройки</em> &gt; <em>Шифрование системы</em> &gt; <em>Обход предзагрузочной аутентификации по Esc</em>; обратите внимание, что включать/отключать данный параметр может только администратор);</li> <li>размонтировать, используя VeraCrypt, любой смонтированный этим пользователем том VeraCrypt (и, в окне программы VeraCrypt, видеть его путь и свойства). Это, однако, неприменимо к "системным избранным томам", которые пользователь может размонтировать (и т. д.) вне зависимости от того, кто их смонтировал (это можно предотвратить, включив параметр <em>Настройки</em> &gt; <em>Системные избранные тома</em> &gt; <em>Просматривать/размонтировать системные избранные тома могут лишь администраторы</em>; обратите внимание, что включать/отключать данный параметр может только администратор).</li> <li>создавать том VeraCrypt на основе файла с файловой системой FAT или без файловой системы (при условии, что это разрешено правами соответствующей папки);</li> <li>изменять пароль, ключевые файлы и алгоритм формирования ключа заголовка, восстанавливать заголовок или создавать его резервную копию для тома VeraCrypt на основе файла (при условии, что это разрешено правами данного файла);</li> <li>обращаться к файловой системе внутри тома VeraCrypt, смонтированного другим пользователем системы (что, однако, можно запретить, назначив соответствующие права на файл/папку/том);</li> <li>использовать пароли (и обработанные ключевые файлы), сохранённые в кэше паролей (обратите внимание, что кэширование можно отключить; см. подробности в разделе <em>Настройки &gt; Параметры</em>, подраздел <em>Кэшировать пароли в памяти драйвера</em>);</li> <li>просматривать основные свойства (например, размер зашифрованной области, используемые алгоритмы шифрования и хеширования, и т. д.) зашифрованного системного раздела/диска, когда работает зашифрованная система;</li> <li>запускать и использовать программу VeraCrypt (включая мастер создания томов VeraCrypt) при условии, что запущен драйвер устройств VeraCrypt и это позволяют права на файлы. </li></ul> <p>В среде <strong>Linux</strong> пользователь без привилегий администратора может (при условии, что используются стандартные конфигурации VeraCrypt и операционной системы):</p> <ul> <li>создавать том VeraCrypt на основе файла или раздела/устройства с файловой системой FAT или без файловой системы (при условии, что это разрешено правами соответствующей папки/устройства);</li> <li>изменять пароль, ключевые файлы и алгоритм деривации ключа заголовка, восстанавливать заголовок или делать его резервную копию для тома VeraCrypt на основе файла или раздела/устройства (при условии, что это разрешено правами данного файла/устройства);</li> <li>обращаться к файловой системе внутри тома VeraCrypt, смонтированного другим пользователем системы (что, однако, можно запретить, назначив соответствующие права на файл/папку/том);</li> <li>запускать и использовать программу VeraCrypt (включая мастер создания томов VeraCrypt) при условии, что это позволяют права на файлы;</li> <li>в окне программы VeraCrypt видеть путь и свойства любого тома VeraCrypt, смонтированного этим пользователем.</li></ul> <p>В среде <strong>Mac OS X</strong> (<strong>macOS</strong>) пользователь без привилегий администратора может (при условии, что используются стандартные конфигурации VeraCrypt и операционной системы):</p> <ul> <li>монтировать любой том VeraCrypt на основе файла или раздела/устройства (при условии, что это разрешено правами соответствующего файла/устройства);</li> <li>размонтировать, используя VeraCrypt, любой смонтированный этим пользователем том VeraCrypt (и, в окне программы VeraCrypt, видеть его путь и свойства);</li> <li>создавать том VeraCrypt на основе файла или раздела/устройства (при условии, что это разрешено правами соответствующей папки/устройства);</li> <li>изменять пароль, ключевые файлы и алгоритм формирования ключа заголовка, восстанавливать заголовок или делать его резервную копию для тома VeraCrypt на основе файла или раздела/устройства (при условии, что это разрешено правами данного файла/устройства);</li> <li>обращаться к файловой системе внутри тома VeraCrypt, смонтированного другим пользователем системы (что, однако, можно запретить, назначив соответствующие права на файл/папку/том);</li> <li>запускать и использовать программу VeraCrypt (включая мастер создания томов VeraCrypt) при условии, что это позволяют права на файлы. </li></ul> <p>VeraCrypt не поддерживает корневой режим выполнения set-euid.<br> <br> Дополнительная информация и подробности о модели безопасности содержатся в главе <a href="Security%20Requirements%20and%20Precautions.html"> <em>Требования безопасности и меры предосторожности</em></a>.</p> <p>* В этом разделе (<em>Модель безопасности</em>) фраза "данные в компьютере" означает данные на внутренних и внешних запоминающих устройствах/носителях (включая съёмные устройства и сетевые диски), подключённых к компьютеру.</p> <p>&dagger; В этом разделе (<em>Модель безопасности</em>), фраза "привилегии администратора" не обязательно относится к действительной учётной записи администратора. Она также может относиться к злоумышленнику, не имеющему действующей учётной записи администратора, но способному (например, из-за неправильной настройки системы или использования уязвимости в операционной системе или стороннем приложении) выполнить любое действие, что обычно разрешено только пользователю с действительной учётной записью администратора (например, читать или изменять произвольную часть диска или ОЗУ и т. д.).</p> <p>&Dagger; "Том VeraCrypt" также означает системный раздел/диск, зашифрованный с помощью VeraCrypt (см. главу <a href="System%20Encryption.html"><em>Шифрование системы</em></a>).</p> </div> </div> </body></html>