Re: Proposal: Enhancing Bacula Secret Management - file:, dynfile:, syscred:, and credstore:
Reiner Jung via Bacula-devel <[email protected]> Wed, 25 Jun 2025 22:17:28 +0200
| Newsgroups | gmane.comp.sysutils.backup.bacula.devel |
|---|---|
| Message-ID | <9d08c4f7-cd92-44f8-ad2b-39fb2be921d2@Canary> |
--===============7380854268427786401== Content-Type: multipart/signed; boundary="685c5958_20daabd1_9034"; protocol="application/pgp-signature" --685c5958_20daabd1_9034 Content-Type: multipart/alternative; boundary="685c5958_d9a50ed_9034" --685c5958_d9a50ed_9034 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi, what you do in bigger deployments with a few hundred fd. You want change = a few hundred different password or do you have the same password on all = fd=3F When your proposed password rotation does not work on a client what would= be your solution=3FBackup fail=3F Also to make a dependancy of your Backup system to any 3rd part software = is really a bad idea. In case of a disaster restore and your vault is gon= e what you will do=3F Regards Reiner > On Mittwoch, Juni 25, 2025 at 9:06 PM, Clinton Bunch <lists+bacula=40cl= intonbunch.name (mailto:lists+bacula=40clintonbunch.name)> wrote: > > Hello Bacula Developers and Community, > > > I'd like to initiate a discussion around enhancing how Bacula manages s= ensitive information like passwords and potentially TLS key passphrases, = moving them out of the main configuration files. This aims to improve sec= urity, simplify secret rotation, and make Bacula configurations more frie= ndly for version control and modern deployment practices (e.g., with Ansi= ble, Puppet, systemd). Importantly, these proposed enhancements would be = entirely optional, ensuring no breakage for existing configurations. > > > Currently, passwords are often embedded directly in bacula-*.conf files= . This has several drawbacks: > > > Exposes secrets if the main config files are inadvertently shared or ch= ecked into version control without protection. > > > > Makes secret rotation more error-prone as it requires editing the main = config. > > > > Complicates management with configuration automation tools that might h= andle secrets separately. > > > > > I propose a few layered approaches to address this, ranging from simple= r to more comprehensive: > > > > > > 1. The file: Directive > > > > > > Many users might want to separate files for secrets and pointing to the= m with restrictive permissions, which is good practice. A Password =3D =22= file:/path/to/secret=22 (file:/path/to/secret) directive that simply read= s the first line of a file (stripping any trailing newline) would be a fo= undational improvement. > > > Advantages: > > > Allows separation of secrets from main configuration. > > > > Easier secret rotation (update file, reload Bacula). > > > > Configuration files become safer for version control (secret files are = gitignored/managed separately). > > > > Aligns well with configuration management tools (e.g., Ansible can depl= oy the main config and then deploy the secret file with strict permission= s and content from a vault). > > > > > > > 2. The dynfile: Directive (Dynamic/Deferred =46ile Loading) > > > Building on file:, the dynfile: prefix would address scenarios where th= e secret file is provisioned at service startup and might not exist when = a configuration check (bacula-* -t) is run. This is particularly relevant= for integration with systemd-credentials. > > > Syntax: Password =3D =22dynfile:/path/to/runtime=5Fsecret=5Ffile=22 > > > > Key Behavior: > > > During a configuration test (bacula-* -t), if a dynfile: path does not = exist, Bacula should issue a warning or informational message but not fai= l the configuration check. The validity of the rest of the configuration = can still be assessed. > > > > At actual runtime, if the dynfile: path doesn't exist when the secret i= s needed, it would be a fatal error. > > > > > > Advantages: > > > All benefits of file:. > > > > Crucially enables seamless integration with tools like systemd-credenti= als (e.g., LoadCredential=3D), which make secrets available only after th= e service unit starts processing but before the main daemon fully initial= izes. > > > > Useful for any custom startup script that generates/places a temporary = secret file. > > > > > > > 3. The syscred: Directive (Direct systemd-credentials Integration) > > > =46or a more streamlined systemd integration, a dedicated prefix could = simplify configuration since the path used by systemd for =24CREDENTIALS=5F= DIRECTORY is not guaranteed to remain the same between systems or systemd= versions. While there might be a natural reluctance to add code specific= to one OS's init system/credential manager, the prevalence of systemd on= Linux platforms and the relative ease of implementing this specific inte= gration could offer a significant =22bang for the buck=22 for a large por= tion of the user base. > > > Syntax: Password =3D =22syscred:credential=5Fname=22 (e.g., syscred:bac= ula=5Fdb=5Fpassword) > > > > Behavior: > > > Bacula reads the =24CREDENTIALS=5FDIRECTORY environment variable (set b= y systemd). > > > > It constructs the full path: =24CREDENTIALS=5FDIRECTORY/credential=5Fna= me. > > > > It attempts to read the secret from this path. > > > > It inherits the =22don't fail early=22 logic from dynfile: for configur= ation checks (if =24CREDENTIALS=5FDIRECTORY isn't set or the path doesn't= yet exist during -t). > > > > > > Advantages: > > > Simplifies configuration for users on systemd: they only need the crede= ntial name, not the full runtime path. > > > > More robust as it adapts to the actual path provided by systemd via =24= CREDENTIALS=5FDIRECTORY. > > > > Represents a relatively =22simple win=22 for a large and growing portio= n of the Linux user base, offering a clean, secure, and modern way to han= dle secrets. > > > > Implementation could leverage the underlying logic developed for dynfil= e:, making it a comparatively straightforward addition. > > > > > > > Applicability to TLS Keys/Passphrases: > > > > These file:, dynfile:, and syscred: mechanisms could also be extended t= o directives like a new TLS Key Passphrase if Bacula were to support encr= ypted TLS private keys (leveraging the linked OpenSSL library which can h= andle decryption given a passphrase). This would be a significant securit= y hardening step for TLS keys. TLS Key =3D =22dynfile:/path/to/key=5Fprov= ided=5Fby=5Fsystemd=22 is also an option if systemd provides the decrypte= d key directly. > > > 4. The credstore:name:secret=5Fidentifier Directive (External Credentia= l Store Helper) > > > =46or maximum flexibility and integration with various secret managers = (Vault, AWS Secrets Manager, Azure Key Vault, etc.) and platforms: > > > Syntax: > > > > > > > In resource: Password =3D =22credstore:myvault:database/production/db= =5Fpassword=22 > > > > > > > > New Stanza: > > > > Credstore =7B Name =3D =22myvault=22 Exec =3D =22/usr/local/bin/bacul= a-secret-helper --store vault --secret %s=22 =23 Or: Exec =3D =22/usr/loc= al/bin/fetch-from-aws --secret %s=22 Timeout =3D 5 =23 Optional timeout f= or the helper =7D > > > > > > > > > > > > > > > > > > > > > Behavior: > > > Bacula forks and executes the specified Exec command, substituting %s (= or other placeholders) with the secret=5Fidentifier. > > > > The helper script/program is responsible for fetching the secret from t= he external store and printing it to its standard output. > > > > Bacula reads the secret from the helper's stdout. > > > > > > Advantages: > > > Extremely flexible: supports any secret manager via custom helper scrip= ts. > > > > Platform-agnostic core mechanism (exec). > > > > Aligns with how many other enterprise tools manage externalized secrets= . > > > > > > Considerations: > > > Significantly more involved to implement in Bacula (process management,= IPC, timeout handling, error checking from helper, argument substitution= ). > > > > Potential performance implications if secrets are fetched very frequent= ly (though caching within Bacula could mitigate this). > > > > Careful design needed for config check mode (e.g., should helpers be ex= ecuted=3F). > > > > > > > > > > Discussion Points: > > > Is there general interest in these types of enhancements, understanding= they would be optional additions=3F > > > > > > > > Would the proposed file: directive be a welcome foundational feature=3F= > > > > =46ollowing that, would dynfile: (with its specific config-check behavi= or) be a good next step=3F > > > > Given its potential ease of implementation and wide user base on system= d, is syscred: a desirable simplification, despite being OS-specific=3F > > > > Is the more comprehensive credstore:exec: model something the community= sees a long-term need for, despite the implementation effort=3F > > > > Are there other approaches or considerations I might have missed=3F > > > > > I believe even the simpler dynfile: and syscred: options would offer su= bstantial benefits to many Bacula users by improving security and managea= bility without impacting existing setups. The credstore: approach provide= s a path for even more advanced integrations. > > > Looking forward to your thoughts and feedback. > > > Thanks, > > > Clinton Bunch > > > =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F= =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F > Bacula-devel mailing list > Bacula-devel=40lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bacula-devel --685c5958_d9a50ed_9034 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline <html xmlns=3D=22http://www.w3.org/1999/xhtml=22><head> <title></title> <= meta name=3D=22viewport=22 content=3D=22width=3Ddevice-width, initial-sca= le=3D1.0, user-scalable=3Dno=22> </head> <body style=3D=22font-family:Hel= vetica;color:=23000000;font-size:13px;=22 dir=3D=22auto=22><div id=3D=22C= anaryBody=22> <div> Hi,</div><div><br></div><div>what you do in bigger de= ployments with a few hundred fd. You want change a few hundred different = password or do you have the same password on all fd=3F=C2=A0</div><div><b= r></div><div>When your proposed password rotation does not work on a clie= nt what would be your solution=3FBackup fail=3F</div><div><br></div><div>= Also to make a dependancy of your Backup system to any 3rd part software = is really a bad idea. In case of a disaster restore and your vault is gon= e what you will do=3F</div><div><br></div><div>Regards</div><div>Reiner</= div> <div><br></div> </div> <div id=3D=22CanarySig=22 style=3D=22left: 0p= x;=22><div><div><br></div></div></div> <div id=3D=22CanaryDropbox=22> </d= iv> <blockquote id=3D=22CanaryBlockquote=22> <div> <div>On Mittwoch, Juni= 25, 2025 at 9:06 PM, Clinton Bunch <<a href=3D=22mailto:lists+bacula=40= clintonbunch.name=22>lists+bacula=40clintonbunch.name</a>> wrote:<br><= /div> <div> <p><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22route= r-outlet-wrapper ng-tns-c233927227-0=22> </span></p><p =5Fngcontent-ng-c4= 063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Hello Bacula Developer= s and Community,</span></p> <p =5Fngcontent-ng-c4063671643=3D=22=22 class= =3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22>I'd like to initiate a discussion around enhan= cing how Bacula manages sensitive information like passwords and potentia= lly TLS key passphrases, moving them out of the main configuration files.= This aims to improve security, simplify secret rotation, and make Bacula= configurations more friendly for version control and modern deployment p= ractices (e.g., with Ansible, Puppet, systemd). </span><span =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngconten= t-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Importantly, the= se proposed enhancements would be entirely optional, ensuring no breakage= for existing configurations.</span></span></p> <p =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22ng-star-inserted=22>Currently, passwords are o= ften embedded directly in </span><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22inline-code ng-star-inserted=22>bacula-*.conf</span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> files. = This has several drawbacks:</span></p> <ul =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22>Exposes secrets if the main config fil= es are inadvertently shared or checked into version control without prote= ction.</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Makes secret rotation more error-prone as it requires= editing the main config.</span></p> </li> <li =5Fngcontent-ng-c406367164= 3=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643= =3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c406367164= 3=3D=22=22 class=3D=22ng-star-inserted=22>Complicates management with con= figuration automation tools that might handle secrets separately.</span><= /p> </li> </ul> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-sta= r-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22>I propose a few layered approaches to address this, rangin= g from simpler to more comprehensive:</span></p> <p =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c233= 927227=3D=22=22 class=3D=22router-outlet-wrapper ng-tns-c233927227-0=22> = </span></p><p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-ins= erted=22><strong =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-= inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22>1. The </span><span =5Fngcontent-ng-c4063671643=3D=22=22 cla= ss=3D=22inline-code ng-star-inserted=22>file:</span><span =5Fngcontent-ng= -c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> Directive</span></s= trong><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22router-outlet-= wrapper ng-tns-c233927227-0=22> </span></p><p =5Fngcontent-ng-c4063671643= =3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c233927227= =3D=22=22 class=3D=22router-outlet-wrapper ng-tns-c233927227-0=22> </span= ></p><p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >Many users might want to separate files for secrets and pointing to them= with restrictive permissions, which is good practice. A </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>Password =3D <a class=3D=22moz-txt-link-rfc2396E=22 href=3D=22file:/p= ath/to/secret=22>=22file:/path/to/secret=22</a></span><span =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> directive that si= mply reads the first line of a file (stripping any trailing newline) woul= d be a foundational improvement.</span></p> <p></p> <ul =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4= 063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng= -c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-n= g-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Advantages</span></= strong><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inse= rted=22>:</span></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Allows separation of secrets from main configuration.= </span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-= star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-= star-inserted=22>Easier secret rotation (update file, reload Bacula).</sp= an></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-= inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22>Configuration files become safer for version control (secret= files are gitignored/managed separately).</span></p> </li> <li =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngconte= nt-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Aligns well wi= th configuration management tools (e.g., Ansible can deploy the main conf= ig and then deploy the secret file with strict permissions and content fr= om a vault).</span></p> </li> </ul> </li> </ul> <p></p> <p =5Fngcontent-n= g-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngconten= t-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngconte= nt-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>2. The </span><= span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-= inserted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 cla= ss=3D=22ng-star-inserted=22> Directive (Dynamic/Deferred =46ile Loading)<= /span></strong><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22route= r-outlet-wrapper ng-tns-c233927227-0=22> </span></p><p =5Fngcontent-ng-c4= 063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Building on </span><sp= an =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-in= serted=22>file:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22>, the </span><span =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22inline-code ng-star-inserted=22>dynfile:</span><span =5Fng= content-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> prefix wo= uld address scenarios where the secret file is provisioned at service sta= rtup and might not exist when a configuration check (</span><span =5Fngco= ntent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>= bacula-* -t</span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22>) is run. This is particularly relevant for integratio= n with </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inlin= e-code ng-star-inserted=22>systemd-credentials</span><span =5Fngcontent-n= g-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>.</span></p> <ul =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <li =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fn= gcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Syntax</= span></strong><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22>: </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22inline-code ng-star-inserted=22>Password =3D =22dynfile:/path/to/runti= me=5Fsecret=5Ffile=22</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22>Key Behavior</span></strong><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>:</span>= </p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted= =22> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted= =22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >During a configuration test (</span><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22inline-code ng-star-inserted=22>bacula-* -t</span><span= =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>), i= f a </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-c= ode ng-star-inserted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> path does not exist, Bacula should= issue a warning or informational message but </span><strong =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngconten= t-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>not fail the con= figuration check</span></strong><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22>. The validity of the rest of the configu= ration can still be assessed.</span></p> </li> <li =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22>At actual runtime, if the <= /span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code n= g-star-inserted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22> path doesn't exist when the secret is= needed, it would be a fatal error.</span></p> </li> </ul> </li> <li =5Fn= gcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fng= content-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Advantag= es</span></strong><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22>:</span></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22ng-star-inserted=22>All benefits of </span><span =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>file:<= /span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inser= ted=22>.</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Crucially enables seamless integration with tools lik= e </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-cod= e ng-star-inserted=22>systemd-credentials</span><span =5Fngcontent-ng-c40= 63671643=3D=22=22 class=3D=22ng-star-inserted=22> (e.g., </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>LoadCredential=3D</span><span =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22>), which make secrets available only after t= he service unit starts processing but before the main daemon fully initia= lizes.</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Useful for any custom startup script that generates/p= laces a temporary secret file.</span></p> </li> </ul> </li> </ul> <p></p>= <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><= strong =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >3. The </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inli= ne-code ng-star-inserted=22>syscred:</span><span =5Fngcontent-ng-c4063671= 643=3D=22=22 class=3D=22ng-star-inserted=22> Directive (Direct systemd-cr= edentials Integration)</span></strong></p> <p =5Fngcontent-ng-c4063671643= =3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c406367164= 3=3D=22=22 class=3D=22ng-star-inserted=22>=46or a more streamlined system= d integration, a dedicated prefix could simplify configuration=C2=A0</spa= n><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22router-outlet-wrap= per ng-tns-c233927227-0=22><span =5Fngcontent-ng-c4063671643=3D=22=22 cla= ss=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22>since the path used by systemd for </span><s= pan =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-i= nserted=22>=24CREDENTIALS=5FDIRECTORY</span><span =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22> is not guaranteed to remain= the same between systems or systemd versions.</span></span></span><span = =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> </sp= an><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted= =22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserte= d=22>While there might be a natural reluctance to add code specific to on= e OS's init system/credential manager, the prevalence of systemd on Linux= platforms and the relative ease of implementing this specific integratio= n could offer a significant =22bang for the buck=22 for a large portion o= f the user base.</span></span></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22>Syntax</span></strong><span =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>: </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>Password =3D =22syscred:credential=5Fname=22</span><span =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> (e.g., </span><s= pan =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-i= nserted=22>syscred:bacula=5Fdb=5Fpassword</span><span =5Fngcontent-ng-c40= 63671643=3D=22=22 class=3D=22ng-star-inserted=22>)</span></p> </li> <li =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fn= gcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Behavior= </span></strong><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-= star-inserted=22>:</span></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 cla= ss=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22>Bacula reads the </span><span =5Fngcontent-n= g-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>=24CRED= ENTIALS=5FDIRECTORY</span><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22> environment variable (set by systemd).</span>= </p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-in= serted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-ins= erted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-in= serted=22>It constructs the full path: </span><span =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>=24CREDENTIALS= =5FDIRECTORY/credential=5Fname</span><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22>.</span></p> </li> <li =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>It attempts to re= ad the secret from this path.</span></p> </li> <li =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22>It inherits the =22don't fa= il early=22 logic from </span><span =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22inline-code ng-star-inserted=22>dynfile:</span><span =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> for configura= tion checks (if </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22inline-code ng-star-inserted=22>=24CREDENTIALS=5FDIRECTORY</span><span= =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> isn= 't set or the path doesn't yet exist during </span><span =5Fngcontent-ng-= c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>-t</span>= <span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >).</span></p> </li> </ul> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 = class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22ng-star-inserted=22>Advantages</span></strong><span =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>:</span></p> <= ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <= li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <= p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><sp= an =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Si= mplifies configuration for users on systemd: they only need the credentia= l name, not the full runtime path.</span></p> </li> <li =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4= 063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22>More robust as it adap= ts to the actual path provided by systemd via </span><span =5Fngcontent-n= g-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>=24CRED= ENTIALS=5FDIRECTORY</span><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22>.</span></p> </li> <li =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671= 643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22>Represents a relatively =22s= imple win=22 for a large and growing portion of the Linux user base, offe= ring a clean, secure, and modern way to handle secrets.</span></p> </li> = <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> = <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><s= pan =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>I= mplementation could leverage the underlying logic developed for </span><s= pan =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-i= nserted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22>, making it a comparatively straightforward ad= dition.</span></p> </li> </ul> </li> </ul> <p =5Fngcontent-ng-c4063671643= =3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c4063671= 643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22>Applicability to TLS Keys/Pa= ssphrases:</span></strong><span =5Fngcontent-ng-c233927227=3D=22=22 class= =3D=22router-outlet-wrapper ng-tns-c233927227-0=22><span =5Fngcontent-ng-= c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><br> </span></span></= p> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22router-outlet-wrapp= er ng-tns-c233927227-0=22><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22>These </span><span =5Fngcontent-ng-c4063671643= =3D=22=22 class=3D=22inline-code ng-star-inserted=22>file:</span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>, </span= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-sta= r-inserted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22>, and </span><span =5Fngcontent-ng-c4063671= 643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>syscred:</span><s= pan =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> = mechanisms could also be extended to directives like a new </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>TLS Key Passphrase</span><span =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22> if Bacula were to support encrypted TLS pr= ivate keys (leveraging the linked OpenSSL library which can handle decryp= tion given a passphrase). This would be a significant security hardening = step for TLS keys. </span><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22inline-code ng-star-inserted=22>TLS Key =3D =22dynfile:/path/to/ke= y=5Fprovided=5Fby=5Fsystemd=22</span><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> is also an option if systemd provi= des the decrypted key directly.</span></span></p> <p =5Fngcontent-ng-c406= 3671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c= 4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-= c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>4. The </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>credstore:name:secret=5Fidentifier</span><span =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22> Directive (External Creden= tial Store Helper)</span></strong><span =5Fngcontent-ng-c233927227=3D=22=22= class=3D=22router-outlet-wrapper ng-tns-c233927227-0=22> </span></p><p =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>=46or ma= ximum flexibility and integration with various secret managers (Vault, AW= S Secrets Manager, Azure Key Vault, etc.) and platforms:</span></p> <p></= p> <p></p> <p></p> <ul> <li><span =5Fngcontent-ng-c233927227=3D=22=22 cla= ss=3D=22router-outlet-wrapper ng-tns-c233927227-0=22> <p =5Fngcontent-ng-= c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent= -ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Syntax</span></st= rong><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-insert= ed=22>:</span></p> </span></li> </ul> <blockquote><span =5Fngcontent-ng-c= 233927227=3D=22=22 class=3D=22router-outlet-wrapper ng-tns-c233927227-0=22= > <ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= > <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= > <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>= <span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >In resource: </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= inline-code ng-star-inserted=22>Password =3D =22credstore:myvault:databas= e/production/db=5Fpassword=22</span></p> </li> <li =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22>New Stanza:</span></p> <spa= n class=3D=22mat-expansion-indicator ng-star-inserted=22></span> <div cla= ss=3D=22mat-expansion-panel-content-wrapper=22> <div role=3D=22region=22 = class=3D=22mat-expansion-panel-content=22 id=3D=22cdk-accordion-child-81=22= aria-labelledby=3D=22mat-expansion-panel-header-81=22> <div class=3D=22m= at-expansion-panel-body=22> <div =5Fngcontent-ng-c289253575=3D=22=22 clas= s=3D=22syntax-highlighted-code-wrapper=22> <div =5Fngcontent-ng-c28925357= 5=3D=22=22 class=3D=22syntax-highlighted-code=22> <pre =5Fngcontent-ng-c2= 89253575=3D=22=22><code =5Fngcontent-ng-c289253575=3D=22=22>Credstore =7B= Name =3D <span class=3D=22hljs-string=22>=22myvault=22</span> Exec =3D <= span class=3D=22hljs-string=22>=22/usr/local/bin/bacula-secret-helper --s= tore vault --secret %s=22</span> <span class=3D=22hljs-comment=22>=23 Or:= Exec =3D =22/usr/local/bin/fetch-from-aws --secret %s=22</span> Timeout = =3D <span class=3D=22hljs-number=22>5</span> <span class=3D=22hljs-commen= t=22>=23 Optional timeout for the helper</span> =7D</code> </pre> </div> = </div> </div> </div> </div> </li> </ul> </span></blockquote> <p><br> </p>= <ul> <li><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22router-out= let-wrapper ng-tns-c233927227-0=22> </span></li><li =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c40636= 71643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c40= 63671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4= 063671643=3D=22=22 class=3D=22ng-star-inserted=22>Behavior</span></strong= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >:</span></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-= inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star= -inserted=22>Bacula forks and executes the specified </span><span =5Fngco= ntent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>= Exec</span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-= inserted=22> command, substituting </span><span =5Fngcontent-ng-c40636716= 43=3D=22=22 class=3D=22inline-code ng-star-inserted=22>%s</span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> (or oth= er placeholders) with the </span><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22inline-code ng-star-inserted=22>secret=5Fidentifier</span><sp= an =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>.<= /span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22>The helper script/program is responsible for fetching the= secret from the external store and printing it to its standard output.</= span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-sta= r-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22>Bacula reads the secret from the helper's stdout.</span></= p> </li> </ul> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22><strong =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Advantages</span></strong><span =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22ng-star-inserted=22>:</span></p> <ul =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <li =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngconte= nt-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcont= ent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Extremely flex= ible: supports any secret manager via custom helper scripts.</span></p> <= /li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted= =22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >Platform-agnostic core mechanism (</span><span =5Fngcontent-ng-c40636716= 43=3D=22=22 class=3D=22inline-code ng-star-inserted=22>exec</span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>).</span= ></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-i= nserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-in= serted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-i= nserted=22>Aligns with how many other enterprise tools manage externalize= d secrets.</span></p> </li> </ul> </li> <li =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22><strong =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D= =22=22 class=3D=22ng-star-inserted=22>Considerations</span></strong><span= =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>:</s= pan></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inse= rted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inse= rted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inser= ted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inse= rted=22>Significantly more involved to implement in Bacula (process manag= ement, IPC, timeout handling, error checking from helper, argument substi= tution).</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Potential performance implications if secrets are fet= ched very frequently (though caching within Bacula could mitigate this).<= /span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-st= ar-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22>Careful design needed for config check mode (e.g., should= helpers be executed=3F).</span></p> </li> </ul> </li> </ul> <p><span =5F= ngcontent-ng-c233927227=3D=22=22 class=3D=22router-outlet-wrapper ng-tns-= c233927227-0=22> </span></p><p =5Fngcontent-ng-c4063671643=3D=22=22 class= =3D=22ng-star-inserted=22><span =5Fngcontent-ng-c233927227=3D=22=22 class= =3D=22router-outlet-wrapper ng-tns-c233927227-0=22> </span></p><p =5Fngco= ntent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><strong =5Fn= gcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Discussi= on Points:</span></strong></p> <ul =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22> <li =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 cl= ass=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 c= lass=3D=22ng-star-inserted=22>Is there general interest in these types of= enhancements, understanding they would be optional additions=3F</span></= p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inse= rted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inser= ted=22><span =5Fngcontent-ng-c233927227=3D=22=22 class=3D=22router-outlet= -wrapper ng-tns-c233927227-0=22> </span></p></li><li =5Fngcontent-ng-c406= 3671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcontent-ng-c4063= 671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c406= 3671643=3D=22=22 class=3D=22ng-star-inserted=22>Would the proposed </span= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-sta= r-inserted=22>file:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 clas= s=3D=22ng-star-inserted=22> directive be a welcome foundational feature=3F= </span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-= star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-s= tar-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-= star-inserted=22>=46ollowing that, would </span><span =5Fngcontent-ng-c40= 63671643=3D=22=22 class=3D=22inline-code ng-star-inserted=22>dynfile:</sp= an><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted= =22> (with its specific config-check behavior) be a good next step=3F</sp= an></p> </li> <p></p> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Given its potential ease of implementation and wide u= ser base on systemd, is </span><span =5Fngcontent-ng-c4063671643=3D=22=22= class=3D=22inline-code ng-star-inserted=22>syscred:</span><span =5Fngcon= tent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> a desirable = simplification, despite being OS-specific=3F</span></p> </li> <li =5Fngco= ntent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> <p =5Fngcon= tent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22><span =5Fngco= ntent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22>Is the more = comprehensive </span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= inline-code ng-star-inserted=22>credstore:exec:</span><span =5Fngcontent-= ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> model something t= he community sees a long-term need for, despite the implementation effort= =3F</span></p> </li> <li =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Are there other approaches or considerations I might = have missed=3F</span></p> </li> </ul> <p =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22ng-star-inserted=22>I believe even the simpler </span><spa= n =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-ins= erted=22>dynfile:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D= =22ng-star-inserted=22> and </span><span =5Fngcontent-ng-c4063671643=3D=22= =22 class=3D=22inline-code ng-star-inserted=22>syscred:</span><span =5Fng= content-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22> options w= ould offer substantial benefits to many Bacula users by improving securit= y and manageability without impacting existing setups. The </span><span =5F= ngcontent-ng-c4063671643=3D=22=22 class=3D=22inline-code ng-star-inserted= =22>credstore:</span><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22> approach provides a path for even more advanced inte= grations.</span></p> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22= ng-star-inserted=22>Looking forward to your thoughts and feedback.</span>= </p> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= ><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng-star-inserted=22= >Thanks,</span></p> <p =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22ng= -star-inserted=22><span =5Fngcontent-ng-c4063671643=3D=22=22 class=3D=22n= g-star-inserted=22>Clinton Bunch<br> </span><span =5Fngcontent-ng-c406367= 1643=3D=22=22 class=3D=22ng-star-inserted=22></span></p> <p></p> <p></p> = =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F= =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F <br>Ba= cula-devel mailing list <br>Bacula-devel=40lists.sourceforge.net <br>http= s://lists.sourceforge.net/lists/listinfo/bacula-devel <br></div> </div> <= /blockquote> </body></html> --685c5958_d9a50ed_9034-- --685c5958_20daabd1_9034 Content-Type: application/pgp-signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: Canary PGP V3 iGYEABEKACYfHFJlaW5lciBKdW5nIDxyLmp1bmdAbXRpZXIub3JnPgUCaFxZWAAK CRCLzO9FSH44truHAJoCUhoM+4pLTjoY5wOIeJVyYRwwnwCePV6zThdmM2ZiLcZk nQQ6QTHRyn8= =Es2n -----END PGP SIGNATURE----- --685c5958_20daabd1_9034-- --===============7380854268427786401== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============7380854268427786401== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Bacula-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bacula-devel --===============7380854268427786401==--