Compare commits

...

24 Commits

Author SHA1 Message Date
Christer Edwards
da377f4735 Merge pull request #529 from BastilleBSD/fete_nationale_2022
prepare for fete nationale 2022
2022-07-13 21:32:33 -06:00
Christer Edwards
f5b47d8f9e prepare for fete nationale 2022 2022-07-13 21:30:04 -06:00
Christer Edwards
6de6e7bc6f Merge pull request #519 from JRGTH/bootstrap_fixes
Avoid cache/RELEASE dirs creation on Linux jails
2022-07-10 20:23:44 -06:00
Christer Edwards
533d108d91 Merge pull request #526 from boogiewookie/master
The text speaks of defining an OVERLAY but the example uses CP.
2022-07-10 20:23:22 -06:00
Kevet Duncombe
a5bf6eca16 Merge pull request #1 from boogiewookie/boogiewookie-patch-1
Update README.md
2022-06-20 06:35:02 -05:00
Kevet Duncombe
10468cd08f Update README.md 2022-06-20 06:30:42 -05:00
Christer Edwards
e8a72bcd75 Merge pull request #520 from JRGTH/cmd_fixes
Allow 'bastille cmd' on Linux jails
2022-05-31 13:36:31 -06:00
JRGTH
b69eedc066 Allow 'bastille cmd' on Linux jails
Allow executing commands on Linux jails with `bastille cmd`.
2022-05-16 09:34:37 -04:00
JRGTH
62d038049d Avoid cache/RELEASE dirs creation on Linux jails
Don't create unused/stale cache/RELEASE directory/datasets on Linux jails creation.
2022-05-15 04:15:39 -04:00
Christer Edwards
3ba1024704 Merge pull request #510 from cyrilst/patch-1
Repair table, fix incorrect descriptions
2022-05-04 14:50:24 -06:00
Christer Edwards
dbb720fef4 Merge pull request #500 from eborisch/graceful_network_stop
Permit outgoing network connections during stop action
2022-05-04 14:49:26 -06:00
Christer Edwards
d0903347a6 Merge pull request #502 from nmurali94/master
Extend RDR to support logging
2022-05-04 14:47:30 -06:00
Christer Edwards
b9d38a5d01 Merge pull request #505 from ctuffli/patch-1
Allow Linux jails to see their mount points
2022-05-04 14:46:38 -06:00
Christer Edwards
f14eddc958 Merge pull request #507 from ellislm/fix_vnet_epair
fix non-unique epair creation when using vnet
2022-05-04 14:45:33 -06:00
Christer Edwards
e64c81d18a Merge pull request #515 from ddowse/template-ip6
Add variable JAIL_IP6 to access ip6.addr in templates
2022-05-04 14:44:00 -06:00
Christer Edwards
674a34d69c Merge pull request #511 from fellmoon/patch-1
Update bootstrap.rst
2022-05-04 14:38:39 -06:00
fellmoon
a97ac27a46 Update bootstrap.rst 2022-05-04 22:27:15 +02:00
Daniel Dowse - Freelancer
4302445eb5 Add variable JAIL_IP6 to access ip6.addr in templates 2022-04-08 15:26:53 +02:00
fellmoon
d9f1dfdc2f Update bootstrap.rst
added example how to bootstrap hardenedbsd
2022-03-21 00:42:39 +01:00
cyrilst
ebb93c795e Repair table, fix incorrect descriptions 2022-03-16 13:55:51 +01:00
Logan Ellis
dbd4b5edc5 fix non-unique epair creation when using vnet 2022-03-10 00:08:38 -08:00
Chuck Tuffli
abc8a6b280 Allow Linux jails to see their mount points
Some Linux packages (shakes fist angrily at Java) look to see if `/proc` is mounted as a part of the installation by running
   `mountpoint /proc`
While the Linux jail can see the contents of its `/proc` directory, the linprocfs driver will not generate the correct contents for `/proc/mounts` or `/proc/self/mountinfo` as `kern_getfsstat()` will, by default, filter all mount points other than the jail's chroot directory.

Fix is to set `enforce_statfs` to allow mount points below the jail's chroot directory to be visible.
2022-03-04 08:16:33 -08:00
Niketh Murali
6e5a566d7f Extend RDR to support logging
PF allows us to log rdr rules. The syntax to enable this is found in
pf.conf under the syntax grammar section for rdr-rule.

This commit extends Bastille's command line interface to allow users
to choose to log their rdr rules using the pf.conf syntax -

``````````````````````````````````````````````````````
tcp|udp host_port jail_port [log ['(' logopts ')'] ]
``````````````````````````````````````````````````````
Here, the syntax after jail_port is optional. This is sufficient to
provide backwards compatibility. The keyword 'log' enables logging with
the default options. The user can also provide custom options -
logopts - whose the syntax and allowed keywords are defined in pf.conf.
It's left to the user to supply correct logopts as the code does not
verify those values or their syntax.
2022-03-01 21:54:34 -05:00
Eric A. Borisch
24eb03c2e6 Permit outgoing connections during stop action 2022-02-24 09:42:40 -06:00
14 changed files with 132 additions and 39 deletions

View File

@@ -23,6 +23,11 @@ Christer Edwards [christer.edwards@gmail.com]
- Sven R. - Sven R.
- Tobias Tom - Tobias Tom
- Stefano Marinelli - Stefano Marinelli
- Logan Ellis
- Chuck Tuffli
- Niketh Murali
- Eric Borisch
- Kevet Duncombe
### Special thanks ### Special thanks
Software doesn't happen in a vacuum. Thank you to the following people who may Software doesn't happen in a vacuum. Thank you to the following people who may

View File

@@ -735,8 +735,8 @@ After populating `usr/local/` with custom config files that your container will
use, be sure to include `usr` in the template OVERLAY definition. eg; use, be sure to include `usr` in the template OVERLAY definition. eg;
```shell ```shell
echo "CP etc" >> /usr/local/bastille/templates/username/base/Bastillefile echo "OVERLAY etc" >> /usr/local/bastille/templates/username/base/Bastillefile
echo "CP usr" >> /usr/local/bastille/templates/username/base/Bastillefile echo "OVERLAY usr" >> /usr/local/bastille/templates/username/base/Bastillefile
``` ```
The above example will include anything under "etc" and "usr" inside The above example will include anything under "etc" and "usr" inside

View File

@@ -4,7 +4,7 @@ Bastille is available in the official FreeBSD ports tree at
`sysutils/bastille`. Binary packages available in `quarterly` and `latest` `sysutils/bastille`. Binary packages available in `quarterly` and `latest`
repositories. repositories.
Current version is `0.9.20220216`. Current version is `0.9.20220714`.
To install from the FreeBSD package repository: To install from the FreeBSD package repository:

View File

@@ -22,7 +22,7 @@ Releases
Example Example
------- -------
To `bootstrap` a release, run the bootstrap sub-command with the To `bootstrap` a FreeBSD release, run the bootstrap sub-command with the
release version as the argument. release version as the argument.
.. code-block:: shell .. code-block:: shell
@@ -30,6 +30,14 @@ release version as the argument.
ishmael ~ # bastille bootstrap 11.4-RELEASE [update] ishmael ~ # bastille bootstrap 11.4-RELEASE [update]
ishmael ~ # bastille bootstrap 12.1-RELEASE ishmael ~ # bastille bootstrap 12.1-RELEASE
To `bootstrap` a HardenedBSD release, run the bootstrap sub-command with the
build version as the argument.
.. code-block:: shell
ishmael ~ # bastille bootstrap 13-stable-build-latest
This command will ensure the required directory structures are in place and This command will ensure the required directory structures are in place and
download the requested release. For each requested release, `bootstrap` will download the requested release. For each requested release, `bootstrap` will
download the base.txz. These files are verified (sha256 via MANIFEST file) download the base.txz. These files are verified (sha256 via MANIFEST file)

View File

@@ -27,7 +27,7 @@ Examples: Containers
| cmd | ALL | 'sockstat -4' | execute `sockstat -4` in ALL containers (ip4 sockets) | | cmd | ALL | 'sockstat -4' | execute `sockstat -4` in ALL containers (ip4 sockets) |
+-----------+--------+-----+------------+-------------------------------------------------------------+ +-----------+--------+-----+------------+-------------------------------------------------------------+
| console | mariadb02 | --- | console (shell) access to mariadb02 | | console | mariadb02 | --- | console (shell) access to mariadb02 |
+----+------+----+---------+------------+--------------+----------------------------------------------+ +----+------+--------+-----+------------+-------------------------------------------------------------+
| pkg | web01 | 'install nginx' | install nginx package in web01 container | | pkg | web01 | 'install nginx' | install nginx package in web01 container |
+-----------+--------+------------------+-------------------------------------------------------------+ +-----------+--------+------------------+-------------------------------------------------------------+
| pkg | ALL | upgrade | upgrade packages in ALL containers | | pkg | ALL | upgrade | upgrade packages in ALL containers |
@@ -39,11 +39,11 @@ Examples: Containers
| template | ALL | username/base | apply `username/base` template to ALL containers | | template | ALL | username/base | apply `username/base` template to ALL containers |
+-----------+--------+------------------+-------------------------------------------------------------+ +-----------+--------+------------------+-------------------------------------------------------------+
| start | web02 | --- | start web02 container | | start | web02 | --- | start web02 container |
+-----------+--------+-----+------------+-------------------------------------------------------------+
| cp | bastion03 | /tmp/resolv.conf-cf etc/resolv.conf | copy host-path to container-path in bastion03|
+----+------+----+---+------------------+--------------+----------------------------------------------+ +----+------+----+---+------------------+--------------+----------------------------------------------+
| cp | bastion03 | /tmp/resolv.conf-cf etc/resolv.conf | copy host-path to container-path in bastion03|
+----+------+----+---+---------------------------------+----------------------------------------------+
| create | folsom | 12.1-RELEASE 10.17.89.10 | create 12.1 container named `folsom` with IP | | create | folsom | 12.1-RELEASE 10.17.89.10 | create 12.1 container named `folsom` with IP |
+-----------+--------+------------------+--------------+----------------------------------------------+ +-----------+--------+---------------------------------+----------------------------------------------+
Examples: Releases Examples: Releases
@@ -60,7 +60,7 @@ Examples: Releases
+-----------+--------------+--------------+-------------------------------------------------------------+ +-----------+--------------+--------------+-------------------------------------------------------------+
| update | 11.4-RELEASE | --- | update 11.4-RELEASE release | | update | 11.4-RELEASE | --- | update 11.4-RELEASE release |
+-----------+--------------+--------------+-------------------------------------------------------------+ +-----------+--------------+--------------+-------------------------------------------------------------+
| upgrade | 11.3-RELEASE | 11.4-RELEASE | update 11.4-RELEASE release | | upgrade | 11.3-RELEASE | 11.4-RELEASE | upgrade 11.3-RELEASE release to 11.4-RELEASE |
+-----------+--------------+--------------+-------------------------------------------------------------+ +-----------+--------------+--------------+-------------------------------------------------------------+
| verify | 11.4-RELEASE | --- | update 11.4-RELEASE release | | verify | 11.4-RELEASE | --- | verify 11.4-RELEASE release |
+-----------+--------------+--------------+-------------------------------------------------------------+ +-----------+--------------+--------------+-------------------------------------------------------------+

View File

@@ -12,9 +12,9 @@ copyright = '2018-2022, Christer Edwards'
author = 'Christer Edwards' author = 'Christer Edwards'
# The short X.Y version # The short X.Y version
version = '0.9.20220216' version = '0.9.20220714'
# The full version, including alpha/beta/rc tags # The full version, including alpha/beta/rc tags
release = '0.9.20220216-beta' release = '0.9.20220714-beta'
# -- General configuration --------------------------------------------------- # -- General configuration ---------------------------------------------------

View File

@@ -70,7 +70,7 @@ bastille_perms_check() {
bastille_perms_check bastille_perms_check
## version ## version
BASTILLE_VERSION="0.9.20220216" BASTILLE_VERSION="0.9.20220714"
usage() { usage() {
cat << EOF cat << EOF

View File

@@ -127,19 +127,29 @@ bootstrap_directories() {
if [ "${bastille_zfs_enable}" = "YES" ]; then if [ "${bastille_zfs_enable}" = "YES" ]; then
if [ -n "${bastille_zfs_zpool}" ]; then if [ -n "${bastille_zfs_zpool}" ]; then
zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache" zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache"
zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}/${RELEASE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache/${RELEASE}" # Don't create unused/stale cache/RELEASE directory on Linux jails creation.
if [ -z "${NOCACHEDIR}" ]; then
zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}/${RELEASE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache/${RELEASE}"
fi
fi fi
else else
mkdir -p "${bastille_cachedir}/${RELEASE}" mkdir -p "${bastille_cachedir}"
# Don't create unused/stale cache/RELEASE directory on Linux jails creation.
if [ -z "${NOCACHEDIR}" ]; then
mkdir -p "${bastille_cachedir}/${RELEASE}"
fi
fi fi
## create subsequent cache/XX.X-RELEASE datasets ## create subsequent cache/XX.X-RELEASE datasets
elif [ ! -d "${bastille_cachedir}/${RELEASE}" ]; then elif [ ! -d "${bastille_cachedir}/${RELEASE}" ]; then
if [ "${bastille_zfs_enable}" = "YES" ]; then # Don't create unused/stale cache/RELEASE directory on Linux jails creation.
if [ -n "${bastille_zfs_zpool}" ]; then if [ -z "${NOCACHEDIR}" ]; then
zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}/${RELEASE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache/${RELEASE}" if [ "${bastille_zfs_enable}" = "YES" ]; then
if [ -n "${bastille_zfs_zpool}" ]; then
zfs create ${bastille_zfs_options} -o mountpoint="${bastille_cachedir}/${RELEASE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/cache/${RELEASE}"
fi
else
mkdir -p "${bastille_cachedir}/${RELEASE}"
fi fi
else
mkdir -p "${bastille_cachedir}/${RELEASE}"
fi fi
fi fi
@@ -305,6 +315,7 @@ bootstrap_release() {
debootstrap_release() { debootstrap_release() {
# Make sure to check/bootstrap directories first. # Make sure to check/bootstrap directories first.
NOCACHEDIR=1
RELEASE="${DIR_BOOTSTRAP}" RELEASE="${DIR_BOOTSTRAP}"
bootstrap_directories bootstrap_directories
@@ -445,6 +456,7 @@ else
HW_MACHINE_ARCH_LINUX=${HW_MACHINE_ARCH} HW_MACHINE_ARCH_LINUX=${HW_MACHINE_ARCH}
fi fi
NOCACHEDIR=
RELEASE="${1}" RELEASE="${1}"
OPTION="${2}" OPTION="${2}"

View File

@@ -29,6 +29,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
. /usr/local/share/bastille/common.sh . /usr/local/share/bastille/common.sh
. /usr/local/etc/bastille/bastille.conf
usage() { usage() {
error_exit "Usage: bastille cmd TARGET command" error_exit "Usage: bastille cmd TARGET command"
@@ -51,12 +52,19 @@ RETURN=0
for _jail in ${JAILS}; do for _jail in ${JAILS}; do
COUNT=$(($COUNT+1)) COUNT=$(($COUNT+1))
info "[${_jail}]:" info "[${_jail}]:"
jexec -l -U root "${_jail}" "$@"
if grep -qw "linsysfs" "${bastille_jailsdir}/${TARGET}/fstab"; then
# Allow executing commands on Linux jails.
jexec -l -u root "${_jail}" "$@"
else
jexec -l -U root "${_jail}" "$@"
fi
ERROR_CODE=$? ERROR_CODE=$?
info "[${_jail}]: ${ERROR_CODE}" info "[${_jail}]: ${ERROR_CODE}"
if [ "$COUNT" -eq 1 ]; then if [ "$COUNT" -eq 1 ]; then
RETURN=$ERROR_CODE RETURN=${ERROR_CODE}
else else
RETURN=$(($RETURN+$ERROR_CODE)) RETURN=$(($RETURN+$ERROR_CODE))
fi fi
@@ -65,8 +73,8 @@ for _jail in ${JAILS}; do
done done
# Check when a command is executed in all running jails. (bastille cmd ALL ...) # Check when a command is executed in all running jails. (bastille cmd ALL ...)
if [ "$COUNT" -gt 1 ] && [ "$RETURN" -gt 0 ]; then if [ "${COUNT}" -gt 1 ] && [ "${RETURN}" -gt 0 ]; then
RETURN=1 RETURN=1
fi fi
return "$RETURN" return "${RETURN}"

View File

@@ -74,9 +74,11 @@ generate_vnet_jail_netblock() {
local num_range=$((list_jails_num + 1)) local num_range=$((list_jails_num + 1))
for _num in $(seq 0 "${num_range}"); do for _num in $(seq 0 "${num_range}"); do
if ! grep -q "e[0-9]b_bastille${_num}" "${bastille_jailsdir}"/*/jail.conf; then if ! grep -q "e[0-9]b_bastille${_num}" "${bastille_jailsdir}"/*/jail.conf; then
local uniq_epair="bastille${_num}" if ! grep -q "epair${_num}" "${bastille_jailsdir}"/*/jail.conf; then
local uniq_epair_bridge="${_num}" local uniq_epair="bastille${_num}"
break local uniq_epair_bridge="${_num}"
break
fi
fi fi
done done
else else

View File

@@ -170,6 +170,7 @@ ${NAME} {
mount.fstab = ${bastille_jail_fstab}; mount.fstab = ${bastille_jail_fstab};
path = ${bastille_jail_path}; path = ${bastille_jail_path};
devfs_ruleset = 4; devfs_ruleset = 4;
enforce_statfs = 1;
exec.start = '/bin/true'; exec.start = '/bin/true';
exec.stop = '/bin/true'; exec.stop = '/bin/true';

View File

@@ -32,7 +32,7 @@
. /usr/local/etc/bastille/bastille.conf . /usr/local/etc/bastille/bastille.conf
usage() { usage() {
error_exit "Usage: bastille rdr TARGET [clear|list|(tcp|udp host_port jail_port)]" error_exit "Usage: bastille rdr TARGET [clear|list|(tcp|udp host_port jail_port [log ['(' logopts ')'] ] )]"
} }
# Handle special-case commands first. # Handle special-case commands first.
@@ -91,6 +91,16 @@ if ! grep -qs "$1 $2 $3" "${bastille_jailsdir}/${JAIL_NAME}/rdr.conf"; then
fi fi
} }
persist_rdr_log_rule() {
proto=$1;host_port=$2;jail_port=$3;
shift 3;
log=$@;
if ! grep -qs "$proto $host_port $jail_port $log" "${bastille_jailsdir}/${JAIL_NAME}/rdr.conf"; then
echo "$proto $host_port $jail_port $log" >> "${bastille_jailsdir}/${JAIL_NAME}/rdr.conf"
fi
}
# function: load rdr rule via pfctl # function: load rdr rule via pfctl
load_rdr_rule() { load_rdr_rule() {
( pfctl -a "rdr/${JAIL_NAME}" -Psn; ( pfctl -a "rdr/${JAIL_NAME}" -Psn;
@@ -98,6 +108,16 @@ load_rdr_rule() {
| pfctl -a "rdr/${JAIL_NAME}" -f- | pfctl -a "rdr/${JAIL_NAME}" -f-
} }
# function: load rdr rule with log via pfctl
load_rdr_log_rule() {
proto=$1;host_port=$2;jail_port=$3;
shift 3;
log=$@
( pfctl -a "rdr/${JAIL_NAME}" -Psn;
printf '%s\nrdr pass %s on $ext_if inet proto %s to port %s -> %s port %s\n' "$EXT_IF" "$log" "$proto" "$host_port" "$JAIL_IP" "$jail_port" ) \
| pfctl -a "rdr/${JAIL_NAME}" -f-
}
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
list) list)
@@ -127,11 +147,44 @@ while [ $# -gt 0 ]; do
tcp|udp) tcp|udp)
if [ $# -lt 3 ]; then if [ $# -lt 3 ]; then
usage usage
elif [ $# -eq 3 ]; then
check_jail_validity
persist_rdr_rule $1 $2 $3
load_rdr_rule $1 $2 $3
shift 3
else
case "$4" in
log)
proto=$1
host_port=$2
jail_port=$3
shift 3
if [ $# -gt 3 ]; then
for last in $@; do
true
done
if [ $2 == "(" ] && [ $last == ")" ] ; then
check_jail_validity
persist_rdr_log_rule $proto $host_port $jail_port $@
load_rdr_log_rule $proto $host_port $jail_port $@
shift $#
else
usage
fi
elif [ $# -eq 1 ]; then
check_jail_validity
persist_rdr_log_rule $proto $host_port $jail_port $@
load_rdr_log_rule $proto $host_port $jail_port $@
shift 1
else
usage
fi
;;
*)
usage
;;
esac
fi fi
check_jail_validity
persist_rdr_rule $1 $2 $3
load_rdr_rule $1 $2 $3
shift 3
;; ;;
*) *)
usage usage

View File

@@ -49,12 +49,8 @@ fi
for _jail in ${JAILS}; do for _jail in ${JAILS}; do
## test if running ## test if running
if [ "$(/usr/sbin/jls name | awk "/^${_jail}$/")" ]; then if [ "$(/usr/sbin/jls name | awk "/^${_jail}$/")" ]; then
## remove ip4.addr from firewall table:jails ## Capture ip4.addr address while still running
if [ -n "${bastille_network_loopback}" ]; then _ip="$(/usr/sbin/jls -j ${_jail} ip4.addr)"
if grep -qw "interface.*=.*${bastille_network_loopback}" "${bastille_jailsdir}/${_jail}/jail.conf"; then
pfctl -q -t jails -T delete "$(/usr/sbin/jls -j ${_jail} ip4.addr)"
fi
fi
# Check if pfctl is present # Check if pfctl is present
if which -s pfctl; then if which -s pfctl; then
@@ -73,6 +69,13 @@ for _jail in ${JAILS}; do
## stop container ## stop container
info "[${_jail}]:" info "[${_jail}]:"
jail -f "${bastille_jailsdir}/${_jail}/jail.conf" -r "${_jail}" jail -f "${bastille_jailsdir}/${_jail}/jail.conf" -r "${_jail}"
## remove (captured above) ip4.addr from firewall table:jails
if [ -n "${bastille_network_loopback}" -a ! -z "${_ip}" ]; then
if grep -qw "interface.*=.*${bastille_network_loopback}" "${bastille_jailsdir}/${_jail}/jail.conf"; then
pfctl -q -t jails -T delete "${_ip}"
fi
fi
fi fi
echo echo
done done

View File

@@ -229,6 +229,7 @@ for _jail in ${JAILS}; do
bastille_jail_path=$(/usr/sbin/jls -j "${_jail}" path) bastille_jail_path=$(/usr/sbin/jls -j "${_jail}" path)
if [ "$(bastille config $TARGET get vnet)" != 'enabled' ]; then if [ "$(bastille config $TARGET get vnet)" != 'enabled' ]; then
_jail_ip=$(/usr/sbin/jls -j "${_jail}" ip4.addr 2>/dev/null) _jail_ip=$(/usr/sbin/jls -j "${_jail}" ip4.addr 2>/dev/null)
_jail_ip6=$(/usr/sbin/jls -j "${_jail}" ip6.addr 2>/dev/null)
if [ -z "${_jail_ip}" -o "${_jail_ip}" = "-" ]; then if [ -z "${_jail_ip}" -o "${_jail_ip}" = "-" ]; then
error_notify "Jail IP not found: ${_jail}" error_notify "Jail IP not found: ${_jail}"
_jail_ip='' # In case it was -. -- cwells _jail_ip='' # In case it was -. -- cwells
@@ -251,7 +252,7 @@ for _jail in ${JAILS}; do
# Build a list of sed commands like this: -e 's/${username}/root/g' -e 's/${domain}/example.com/g' # Build a list of sed commands like this: -e 's/${username}/root/g' -e 's/${domain}/example.com/g'
# Values provided by default (without being defined by the user) are listed here. -- cwells # Values provided by default (without being defined by the user) are listed here. -- cwells
ARG_REPLACEMENTS="-e 's/\${JAIL_IP}/${_jail_ip}/g' -e 's/\${JAIL_NAME}/${_jail}/g'" ARG_REPLACEMENTS="-e 's/\${JAIL_IP}/${_jail_ip}/g' -e 's/\${JAIL_IP6}/${_jail_ip6}/g' -e 's/\${JAIL_NAME}/${_jail}/g'"
# This is parsed outside the HOOKS loop so an ARG file can be used with a Bastillefile. -- cwells # This is parsed outside the HOOKS loop so an ARG file can be used with a Bastillefile. -- cwells
if [ -s "${bastille_template}/ARG" ]; then if [ -s "${bastille_template}/ARG" ]; then
while read _line; do while read _line; do