![]() |
![]() |
| |||||
Dependencies Between Unbundled ProductsAnother issue related to dependency location is how to establish a model whereby unbundled products express dependencies between themselves. For example, the unbundled product XYZ might have dependencies on the product ABC. This dependency can be established by a host package installation script. This script generates a symbolic link to the installation point of the ABC product, as shown in the following figure. Figure C-2 Unbundled Co-Dependencies ![]() The binaries and shared objects of the XYZ product can represent their dependencies on the ABC product using the symbolic link. This link is now a stable reference point. For the application xyz, this runpath would be:
and similarly for the dependency libX.so.1 this runpath would be:
If this product is now installed under /usr/local/XYZ, its post-install script would be required to establish a symbolic link of:
If the user's PATH is augmented with /usr/local/XYZ/bin, then invocation of the application xyz result in a pathname lookup for its dependencies as follows:
SecurityIn a secure process, the expansion of the $ORIGIN string is allowed only if it expands to a trusted directory. The occurrence of other relative path names, poses a security risk. A path like $ORIGIN/../lib apparently points to a fixed location, fixed by the location of the executable. However, the location is not actually fixed. A writable directory in the same file system could exploit a secure program that uses $ORIGIN. The following example shows this possible security breach if $ORIGIN was arbitrarily expanded within a secure process.
You can use the utility crle(1) to specify trusted directories that enable secure applications to use $ORIGIN. Administrators who use this technique should ensure that the target directories are suitably protected from malicious intrusion. | |||||
| |||||