CINXE.COM
Security | Linux Journal
<!DOCTYPE html> <html lang="en" dir="ltr" prefix="content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ og: http://ogp.me/ns# rdfs: http://www.w3.org/2000/01/rdf-schema# schema: http://schema.org/ sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema# " class="no-js wf-loading"> <head> <meta charset="utf-8" /> <meta name="Generator" content="Drupal 9 (https://www.drupal.org)" /> <meta name="MobileOptimized" content="width" /> <meta name="HandheldFriendly" content="true" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="icon" href="/themes/linuxjournal/favicon.ico" type="image/vnd.microsoft.icon" /> <link rel="alternate" type="application/rss+xml" title="Security" href="https://www.linuxjournal.com/taxonomy/term/31/feed" /> <title>Security | Linux Journal</title> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/align.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/fieldgroup.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/container-inline.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/clearfix.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/details.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/hidden.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/item-list.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/js.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/nowrap.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/position-container.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/progress.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/reset-appearance.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/resize.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/sticky-header.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-counter.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-counters.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-general-info.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/tablesort.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/tree-child.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.base.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.theme.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/views/css/views.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/webform/modules/webform_bootstrap/css/webform_bootstrap.css?smwnh4" /> <link rel="stylesheet" media="all" href="/libraries/shariff/shariff.complete.css?smwnh4" /> <link rel="stylesheet" media="all" href="/themes/linuxjournal/css/style.css?smwnh4" /> <link rel="stylesheet" media="all" href="/themes/linuxjournal/css/fonts.css?smwnh4" /> <!-- <script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>--> <script> // Non-blocking webfonts. (function iife() { 'use strict'; // JS is able to start executing. document.documentElement.classList.remove('no-js'); // Optimization for Repeat Views // Stop early for repeat views that have already cached fonts. if (sessionStorage.fontsLoadedLateef && sessionStorage.fontsLoadedOpensans /* && sessionStorage.fontsLoadedNEWFONT */) { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-opensans'); document.documentElement.classList.add('wf-lateef'); // document.documentElement.classList.add('wf-NEWFONT'); return; } // Inlined Font Face Observer script + Promise polyfill. /*! Font Face Observer v2.0.13 - © Bram Stein. License: BSD-3-Clause */ (function(){'use strict';var f,g=[];function l(a){g.push(a);1==g.length&&f()}function m(){for(;g.length;)g[0](),g.shift()}f=function(){setTimeout(m)};function n(a){this.a=p;this.b=void 0;this.f=[];var b=this;try{a(function(a){q(b,a)},function(a){r(b,a)})}catch(c){r(b,c)}}var p=2;function t(a){return new n(function(b,c){c(a)})}function u(a){return new n(function(b){b(a)})}function q(a,b){if(a.a==p){if(b==a)throw new TypeError;var c=!1;try{var d=b&&b.then;if(null!=b&&"object"==typeof b&&"function"==typeof d){d.call(b,function(b){c||q(a,b);c=!0},function(b){c||r(a,b);c=!0});return}}catch(e){c||r(a,e);return}a.a=0;a.b=b;v(a)}} function r(a,b){if(a.a==p){if(b==a)throw new TypeError;a.a=1;a.b=b;v(a)}}function v(a){l(function(){if(a.a!=p)for(;a.f.length;){var b=a.f.shift(),c=b[0],d=b[1],e=b[2],b=b[3];try{0==a.a?"function"==typeof c?e(c.call(void 0,a.b)):e(a.b):1==a.a&&("function"==typeof d?e(d.call(void 0,a.b)):b(a.b))}catch(h){b(h)}}})}n.prototype.g=function(a){return this.c(void 0,a)};n.prototype.c=function(a,b){var c=this;return new n(function(d,e){c.f.push([a,b,d,e]);v(c)})}; function w(a){return new n(function(b,c){function d(c){return function(d){h[c]=d;e+=1;e==a.length&&b(h)}}var e=0,h=[];0==a.length&&b(h);for(var k=0;k<a.length;k+=1)u(a[k]).c(d(k),c)})}function x(a){return new n(function(b,c){for(var d=0;d<a.length;d+=1)u(a[d]).c(b,c)})};window.Promise||(window.Promise=n,window.Promise.resolve=u,window.Promise.reject=t,window.Promise.race=x,window.Promise.all=w,window.Promise.prototype.then=n.prototype.c,window.Promise.prototype["catch"]=n.prototype.g);}()); (function(){function l(a,b){document.addEventListener?a.addEventListener("scroll",b,!1):a.attachEvent("scroll",b)}function m(a){document.body?a():document.addEventListener?document.addEventListener("DOMContentLoaded",function c(){document.removeEventListener("DOMContentLoaded",c);a()}):document.attachEvent("onreadystatechange",function k(){if("interactive"==document.readyState||"complete"==document.readyState)document.detachEvent("onreadystatechange",k),a()})};function r(a){this.a=document.createElement("div");this.a.setAttribute("aria-hidden","true");this.a.appendChild(document.createTextNode(a));this.b=document.createElement("span");this.c=document.createElement("span");this.h=document.createElement("span");this.f=document.createElement("span");this.g=-1;this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;"; this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c)} function t(a,b){a.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+b+";"}function y(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+"px";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function z(a,b){function c(){var a=k;y(a)&&a.a.parentNode&&b(a.g)}var k=a;l(a.b,c);l(a.c,c);y(a)};function A(a,b){var c=b||{};this.family=a;this.style=c.style||"normal";this.weight=c.weight||"normal";this.stretch=c.stretch||"normal"}var B=null,C=null,E=null,F=null;function G(){if(null===C)if(J()&&/Apple/.test(window.navigator.vendor)){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);C=!!a&&603>parseInt(a[1],10)}else C=!1;return C}function J(){null===F&&(F=!!document.fonts);return F} function K(){if(null===E){var a=document.createElement("div");try{a.style.font="condensed 100px sans-serif"}catch(b){}E=""!==a.style.font}return E}function L(a,b){return[a.style,a.weight,K()?a.stretch:"","100px",b].join(" ")} A.prototype.load=function(a,b){var c=this,k=a||"BESbswy",q=0,D=b||3E3,H=(new Date).getTime();return new Promise(function(a,b){if(J()&&!G()){var M=new Promise(function(a,b){function e(){(new Date).getTime()-H>=D?b():document.fonts.load(L(c,'"'+c.family+'"'),k).then(function(c){1<=c.length?a():setTimeout(e,25)},function(){b()})}e()}),N=new Promise(function(a,c){q=setTimeout(c,D)});Promise.race([N,M]).then(function(){clearTimeout(q);a(c)},function(){b(c)})}else m(function(){function u(){var b;if(b=-1!= f&&-1!=g||-1!=f&&-1!=h||-1!=g&&-1!=h)(b=f!=g&&f!=h&&g!=h)||(null===B&&(b=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),B=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=B&&(f==v&&g==v&&h==v||f==w&&g==w&&h==w||f==x&&g==x&&h==x)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(q),a(c))}function I(){if((new Date).getTime()-H>=D)d.parentNode&&d.parentNode.removeChild(d),b(c);else{var a=document.hidden;if(!0===a||void 0===a)f=e.a.offsetWidth, g=n.a.offsetWidth,h=p.a.offsetWidth,u();q=setTimeout(I,50)}}var e=new r(k),n=new r(k),p=new r(k),f=-1,g=-1,h=-1,v=-1,w=-1,x=-1,d=document.createElement("div");d.dir="ltr";t(e,L(c,"sans-serif"));t(n,L(c,"serif"));t(p,L(c,"monospace"));d.appendChild(e.a);d.appendChild(n.a);d.appendChild(p.a);document.body.appendChild(d);v=e.a.offsetWidth;w=n.a.offsetWidth;x=p.a.offsetWidth;I();z(e,function(a){f=a;u()});t(e,L(c,'"'+c.family+'",sans-serif'));z(n,function(a){g=a;u()});t(n,L(c,'"'+c.family+'",serif')); z(p,function(a){h=a;u()});t(p,L(c,'"'+c.family+'",monospace'))})})};"object"===typeof module?module.exports=A:(window.FontFaceObserver=A,window.FontFaceObserver.prototype.load=A.prototype.load);}()); // Load and observe Lateef var Lateef = new FontFaceObserver('Lateef', {weight: 400}); Promise.all([Lateef.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-lateef'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedLateef = true; }); // Load and observe Open Sans var os300 = new FontFaceObserver('Open Sans', {weight: 300}); var os400 = new FontFaceObserver('Open Sans', {weight: 400}); Promise.all([os300.load(), os400.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-opensans'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedOpensans = true; }); // Load and observe NEWFONT /* var NEWFONT = new FontFaceObserver('NEWFONT', {weight: 400}); Promise.all([NEWFONT.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-NEWFONT'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedNEWFONT = true; }); */ })(); </script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script src=https://slashdot.org/country.js></script> <script src="/themes/linuxjournal/js/ada.js"></script> <script src="/themes/linuxjournal/js/accessibility.js"></script> <script>window.addEventListener('load', function() { new Accessibility(); });</script> <script src="//a.fsdn.com/con/js/sftheme/cmp2.js"></script> <link rel="stylesheet" href="//a.fsdn.com/con/css/sftheme/sandiego/cmp.css" type="text/css"> <link rel="stylesheet" href="/themes/linuxjournal/css/ccpa.css" type="text/css"> <script>window.bizx.cmp.init({ geo: window });</script> <script> function bm_trace() { (function (w,d,t) { _ml = w._ml || {}; _ml.eid = '771'; var s, cd, tag; s = d.getElementsByTagName(t)[0]; cd = new Date(); tag = d.createElement(t); tag.async = 1; tag.src = 'https://ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth(); s.parentNode.insertBefore(tag, s); })(window,document,'script'); } bizx.cmp.ifConsent('', ['all', 'bombora'],bm_trace); </script> </head> <body class="path-taxonomy has-glyphicons"> <a href="#main-content" class="visually-hidden focusable skip-link"> Skip to main content </a> <div class="dialog-off-canvas-main-canvas" data-off-canvas-main-canvas> <div id="wrap"> <div class="leader-wrapper" id="leader-wrapper"> </div> <div class="brand-wrapper" id="brand-wrapper"> <div class="brand container"> <div class="region region-brand"> <a class="logo navbar-btn" href="/" title="Home" rel="home"> <h1><img src="/themes/linuxjournal/images/ljlogo.png" alt="Linux Journal" /></h1> </a> <section id="block-topbannernearlogo" class="block block-block-content block-block-contenta8e75a3d-967c-416d-8944-4015d1f90a84 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><a href="https://www.windriver.com/products/elxr-pro?utm_source=ba&utm_medium=pa&utm_campaign=ba-dg-amer-awa-vsmf-eLxrProLau_lin_dis_09172024"><img alt="Windriver eLxrPro" data-entity-type="file" data-entity-uuid="8ba04368-7803-4329-a196-dc1ea780ec2a" src="/sites/default/files/inline-images/WindRiver-eLxrPro_0.png" width="728" height="90" loading="lazy" /></a></div> </section> </div> </div> <div class="header-wrapper"> <header class="navbar navbar-default container" id="navbar" role="banner"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <div id="navbar-collapse" class="navbar-collapse collapse"> <div class="region region-navigation-collapsible"> <section id="block-linuxjournal-main-menu" class="block block-system block-system-menu-blockmain clearfix navbar__menu col-xs-12 col-sm-8"> <ul class="menu menu--main nav navbar-nav"> <li class="expanded dropdown active active-trail first"> <a href="/" class="dropdown-toggle active-trail" data-toggle="dropdown" data-drupal-link-system-path="<front>">Topics+ <span class="caret"></span></a> <ul class="dropdown-menu"> <li class="first"> <a href="/tag/cloud">Cloud</a> </li> <li> <a href="/tag/containers" data-drupal-link-system-path="taxonomy/term/978">Containers</a> </li> <li> <a href="/tag/desktop">Desktop</a> </li> <li> <a href="/tag/kernel" data-drupal-link-system-path="taxonomy/term/662">Kernel</a> </li> <li> <a href="/tag/mobile">Mobile</a> </li> <li> <a href="/tag/networking">Networking</a> </li> <li> <a href="/tag/privacy">Privacy</a> </li> <li> <a href="/tag/programming">Programming</a> </li> <li class="active active-trail"> <a href="/tag/security" class="active-trail is-active" data-drupal-link-system-path="taxonomy/term/31">Security</a> </li> <li> <a href="/tag/servers">Servers</a> </li> <li class="last"> <a href="/tag/sysadmin" data-drupal-link-system-path="taxonomy/term/21">SysAdmin</a> </li> </ul> </li> <li> <a href="/news" data-drupal-link-system-path="news">News</a> </li> <li class="last"> <a href="/books" data-drupal-link-system-path="books">eBooks</a> </li> </ul> </section> <section class="search-block-form block block-search block-search-form-block clearfix navbar__search col-xs-12 col-sm-4 col-md-4 col-md-offset-0" data-drupal-selector="search-block-form" id="block-linuxjournal-search" role="search"> <h2 class="block-title sr-only">Search</h2> <form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8"> <div class="form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group"> <label for="edit-keys" class="control-label sr-only">Search</label> <div class="input-group"><input title="Enter the terms you wish to search for." data-drupal-selector="edit-keys" class="form-search form-control" placeholder="Search" type="search" id="edit-keys" name="keys" value="" size="15" maxlength="128" /><span class="input-group-btn"><button type="submit" value="Search" class="button js-form-submit form-submit btn-primary btn icon-only" name=""><span class="sr-only">Search</span><span class="icon glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div> <div id="edit-keys--description" class="description help-block"> Enter the terms you wish to search for. </div> </div> <div class="form-actions form-group js-form-wrapper form-wrapper" data-drupal-selector="edit-actions" id="edit-actions"></div> </form> </section> </div> </div> <div class="navbar-header"> <div class="region region-navigation"> <section id="block-mobilenavigation" class="block block-system block-system-menu-blockmenu-mobile-navbar clearfix col-xs-12 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-0 navbar__menu navbar__mobilenavigation"> <ul class="menu menu--menu-mobile-navbar nav"> <li class="first"> <a href="/news" data-drupal-link-system-path="news">News</a> </li> <li> <a href="/popular" data-drupal-link-system-path="popular">Popular</a> </li> <li class="last"> <a href="/recent" data-drupal-link-system-path="recent">Recent</a> </li> </ul> </section> </div> </div> </header> </div> </div> <div role="main" class="main-container container js-quickedit-main-content" id="main"> <div class="row"> <section class="col-sm-12"> <div class="highlighted"> <div class="region region-highlighted"> <div data-drupal-messages-fallback class="hidden"></div> </div> </div> <a id="main-content"></a> <div class="region region-content"> <h1 class="page-header">Security</h1> <div class="views-element-container form-group"><div class="view view-taxonomy-term view-id-taxonomy_term view-display-id-page_1 js-view-dom-id-b29fbde29472a84819416da7fa39cecd7a978bdbb01ac876c2393612bbfe233e"> <div class="view-header"> <div about="/tag/security" typeof="schema:Thing"> <span property="schema:name" content="Security" class="hidden"></span> </div> </div> <div class="view-content"> <div class="views-row"><article data-history-node-id="1340684" role="article" about="/content/shrinking-linux-attack-surfaces" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/shrinking-linux-attack-surfaces" rel="bookmark"> <span>Shrinking Linux Attack Surfaces</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/zack-brown" lang="" about="/users/zack-brown" typeof="schema:Person" property="schema:name" datatype="">Zack Brown</a></span> - July 18, 2019 </div> </footer> <div class="content-body"> Often, a kernel developer will try to reduce the size of an attack surface against Linux, even if it can't be closed entirely. It's generally a toss-up whether such a patch makes it into the kernel. Linus Torvalds always prefers security patches that really close a hole, rather than just give attackers a slightly harder time of it. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340737" role="article" about="/content/when-choosing-your-commercial-linux-choose-wisely" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/when-choosing-your-commercial-linux-choose-wisely" rel="bookmark"> <span>When Choosing Your Commercial Linux, Choose Wisely!</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/vince-calandra" lang="" about="/users/vince-calandra" typeof="schema:Person" property="schema:name" datatype="">Vince Calandra</a></span> - July 17, 2019 </div> </footer> <div class="content-body"> “Linux is Linux is Linux,” is a direct quote I heard in a meeting I had recently with a major multi-national, critical-infrastructure company. Surprisingly and correctly, there was one intelligent and brave engineering executive who replied to this statement, made by one of his team members, with a resounding, “That’s not true.” Let’s be clear, selecting a commercial Linux is not like selecting corn flakes. This is especially true when you are targeting embedded systems. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340685" role="article" about="/content/address-space-isolation-and-linux-kernel" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/address-space-isolation-and-linux-kernel" rel="bookmark"> <span>Address Space Isolation and the Linux Kernel</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/zack-brown" lang="" about="/users/zack-brown" typeof="schema:Person" property="schema:name" datatype="">Zack Brown</a></span> - July 10, 2019 </div> </footer> <div class="content-body"> Mike Rapoport from IBM launched a bid to implement address space isolation in the Linux kernel. Address space isolation emanates from the idea of virtual memory—where the system maps all its hardware devices' memory addresses into a clean virtual space so that they all appear to be one smooth range of available RAM. A system that implements virtual memory also can create isolated address spaces that are available only to part of the system or to certain processes. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340425" role="article" about="/content/understanding-public-key-infrastructure-and-x509-certificates" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/understanding-public-key-infrastructure-and-x509-certificates" rel="bookmark"> <span>Understanding Public Key Infrastructure and X.509 Certificates</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/jeff-woods" lang="" about="/users/jeff-woods" typeof="schema:Person" property="schema:name" datatype="">Jeff Woods</a></span> - June 21, 2019 </div> </footer> <div class="content-body"> An introduction to PKI, TLS and X.509, from the ground up. Public Key Infrastructure (PKI) provides a framework of encryption and data communications standards used to secure communications over public networks. At the heart of PKI is a trust built among clients, servers and certificate authorities (CAs). This trust is established and propagated through the generation, exchange and verification of certificates. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340643" role="article" about="/content/why-smart-cards-are-smart" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/why-smart-cards-are-smart" rel="bookmark"> <span>Why Smart Cards Are Smart</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/kyle-rankin" lang="" about="/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="">Kyle Rankin</a></span> - June 12, 2019 </div> </footer> <div class="content-body"> If you use GPG keys, learn about the benefits to storing them on a smart card. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340616" role="article" about="/content/securing-kernel-stack" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/securing-kernel-stack" rel="bookmark"> <span>Securing the Kernel Stack</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/zack-brown" lang="" about="/users/zack-brown" typeof="schema:Person" property="schema:name" datatype="">Zack Brown</a></span> - June 11, 2019 </div> </footer> <div class="content-body"> The Linux kernel stack is a tempting target for attack. This is because the kernel needs to keep track of where it is. If a function gets called, which then calls another, which then calls another, the kernel needs to remember the order they were all called, so that each function can return to the function that called it. To do that, the kernel keeps a "stack" of values representing the history of its current context. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340427" role="article" about="/content/webauthn-web-authentication-yubikey-5" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/webauthn-web-authentication-yubikey-5" rel="bookmark"> <span>WebAuthn Web Authentication with YubiKey 5</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/todd-jacobs" lang="" about="/users/todd-jacobs" typeof="schema:Person" property="schema:name" datatype="">Todd A. Jacobs</a></span> - May 21, 2019 </div> </footer> <div class="content-body"> A look at the recently released YubiKey 5 hardware authenticator series and how web authentication with the new WebAuthn API leverages devices like the YubiKey for painless website registration and strong user authentication. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340600" role="article" about="/content/foss-project-spotlight-bareos-cross-network-open-source-backup-solution" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/foss-project-spotlight-bareos-cross-network-open-source-backup-solution" rel="bookmark"> <span>FOSS Project Spotlight: Bareos, a Cross-Network, Open-Source Backup Solution</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/heike-jurzik-and-maik-aussendorf" lang="" about="/users/heike-jurzik-and-maik-aussendorf" typeof="schema:Person" property="schema:name" datatype="" content="Heike Jurzik and Maik Aussendorf">Heike Jurzik a…</a></span> - May 17, 2019 </div> </footer> <div class="content-body"> Bareos (Backup Archiving Recovery Open Sourced) is a cross-network, open-source backup solution that preserves, archives and recovers data from all major operating systems. The Bareos project started 2010 as a Bacula fork and is now being developed under the AGPLv3 license. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340585" role="article" about="/content/signing-git-commits" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/signing-git-commits" rel="bookmark"> <span>Signing Git Commits</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/kyle-rankin" lang="" about="/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="">Kyle Rankin</a></span> - May 16, 2019 </div> </footer> <div class="content-body"> Protect your code commits from malicious changes by GPG-signing them. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340417" role="article" about="/content/password-manager-roundup" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/password-manager-roundup" rel="bookmark"> <span>Password Manager Roundup</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/shawn-powers" lang="" about="/users/shawn-powers" typeof="schema:Person" property="schema:name" datatype="">Shawn Powers</a></span> - May 3, 2019 </div> </footer> <div class="content-body"> If you can remember all of your passwords, they're not good passwords. I used to teach people how to create "good" passwords. Those passwords needed to be lengthy, hard to guess and easy to remember. There were lots of tricks to make your passwords better, and for years, that was enough. That's not enough anymore. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340412" role="article" about="/content/purism-librem-key" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/purism-librem-key" rel="bookmark"> <span>The Purism Librem Key</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/todd-jacobs" lang="" about="/users/todd-jacobs" typeof="schema:Person" property="schema:name" datatype="">Todd A. Jacobs</a></span> - April 23, 2019 </div> </footer> <div class="content-body"> The Librem Key is a new hardware token for improving Linux security by adding a physical authentication factor to booting, login and disk decryption on supported systems. It also has some features that make it a good general-purpose OpenPGP smart card. This article looks at how the Librem Key stacks up against other multi-factor tokens like the YubiKey 5 and also considers what makes the Librem Key a unique trusted-computing tool. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340551" role="article" about="/content/kubernetes-identity-management-authentication" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/kubernetes-identity-management-authentication" rel="bookmark"> <span>Kubernetes Identity Management: Authentication</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/marc-boorshtein" lang="" about="/users/marc-boorshtein" typeof="schema:Person" property="schema:name" datatype="">Marc Boorshtein</a></span> - April 22, 2019 </div> </footer> <div class="content-body"> You've deployed Kubernetes, but now how are you going to get it into the hands of your developers and admins securely? </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340506" role="article" about="/content/spy-games-nsa-and-gchq-offer-their-software-open-source-community" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/spy-games-nsa-and-gchq-offer-their-software-open-source-community" rel="bookmark"> <span>Spy Games: the NSA and GCHQ Offer Their Software to the Open Source Community</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/david-habusha" lang="" about="/users/david-habusha" typeof="schema:Person" property="schema:name" datatype="">David Habusha</a></span> - March 7, 2019 </div> </footer> <div class="content-body"> Spies worth their salt are generally expected to be good at keeping secrets. With dead drops, encryption, cyanide pills and the like, openly sharing useful information isn’t supposed to be a part of the job description. So it caught more than a few of us off guard when a couple years ago, some of the top spy agencies began contributing code to GitHub, making it available to the masses by open-sourcing some of their software. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340429" role="article" about="/content/some-linux-bugs-have-all-fun" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/some-linux-bugs-have-all-fun" rel="bookmark"> <span>Some (Linux) Bugs Have All the Fun</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/bryan-lunduke" lang="" about="/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="">Bryan Lunduke</a></span> - February 25, 2019 </div> </footer> <div class="content-body"> Bugs happen. Every minute of every hour of every day, software bugs are hard at work, biting computer users in the proverbial posterior. Many of them go unnoticed (the bugs, not the posteriors). More still rise to the illustrious level of "bugs that are minor annoyances". Yet sometimes, when the stars align just so, a bug manifests itself in a truly glorious way. And when I say "glorious", I mean "utterly destructive and soul-obliterating". Nowhere are these bugs more insidious than when they are within the operating systems (and key components) themselves. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340422" role="article" about="/content/fun-little-tidbits-howling-storm-re-intel-security-holes" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/fun-little-tidbits-howling-storm-re-intel-security-holes" rel="bookmark"> <span>Fun Little Tidbits in a Howling Storm (Re: Intel Security Holes)</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/zack-brown" lang="" about="/users/zack-brown" typeof="schema:Person" property="schema:name" datatype="">Zack Brown</a></span> - February 21, 2019 </div> </footer> <div class="content-body"> Some kernel developers recently have been trying to work around the massive, horrifying, long-term security holes that have recently been discovered in Intel hardware. In the course of doing so, there were some interesting comments about coding practices. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340410" role="article" about="/content/writing-secure-shell-scripts" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/writing-secure-shell-scripts" rel="bookmark"> <span>Writing Secure Shell Scripts</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/dave-taylor" lang="" about="/users/dave-taylor" typeof="schema:Person" property="schema:name" datatype="">Dave Taylor</a></span> - February 5, 2019 </div> </footer> <div class="content-body"> Don't expose your system with sloppy scripts! </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340411" role="article" about="/content/security-issue" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/security-issue" rel="bookmark"> <span>February 2019, #295: The Security Issue</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/bryan-lunduke" lang="" about="/users/bryan-lunduke" typeof="schema:Person" property="schema:name" datatype="">Bryan Lunduke</a></span> - February 1, 2019 </div> </footer> <div class="content-body"> On January 13th, 2018—at 8:07 am—an emergency alert was issued in Hawaii. The message, in its entirety: "BALLISTIC MISSILE THREAT INBOUND TO HAWAII. SEEK IMMEDIATE SHELTER. THIS IS NOT A DRILL." Although this message—which showed up on smart phones across the state—was, indeed, not a drill...it also was not a real threat. There was no missile hurtling through the atmosphere towards Hawaii. It turns out someone had simply clicked the wrong option from a very poorly designed user interface and sent out a fake (but very real-looking) emergency alert. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340426" role="article" about="/content/tamper-evident-boot-heads" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/tamper-evident-boot-heads" rel="bookmark"> <span>Tamper-Evident Boot with Heads</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/kyle-rankin" lang="" about="/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="">Kyle Rankin</a></span> - January 31, 2019 </div> </footer> <div class="content-body"> Learn about how the cutting-edge, free software Heads project detects BIOS and kernel tampering, all with keys under your control. Some of the earliest computer viruses attacked the boot sector—that bit of code at the beginning of the hard drive in the Master Boot Record that allowed you to boot into your operating system. The reasons for this have to do with stealth and persistence. Viruses on the filesystem itself would be erased if users re-installed their operating systems, but if they didn't erase the boot sector as part of the re-install process, boot sector viruses could stick around and re-infect the operating system. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340378" role="article" about="/content/five-trends-influencing-linuxs-growth-endpoint" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/five-trends-influencing-linuxs-growth-endpoint" rel="bookmark"> <span>Five Trends Influencing Linux's Growth at the Endpoint</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/jeff-kalberg" lang="" about="/users/jeff-kalberg" typeof="schema:Person" property="schema:name" datatype="">Jeff Kalberg</a></span> - December 26, 2018 </div> </footer> <div class="content-body"> A recent IDC InfoBrief identified Linux as the only endpoint operating system growing globally. While Windows market share remains flat, at 39% in 2015 and 2017, Linux has grown from 30% in 2015 to 35% in 2017, worldwide. And the trend is accelerating. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340226" role="article" about="/content/travel-laptop-tips-practice" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/travel-laptop-tips-practice" rel="bookmark"> <span>Travel Laptop Tips in Practice</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/kyle-rankin" lang="" about="/users/kyle-rankin" typeof="schema:Person" property="schema:name" datatype="">Kyle Rankin</a></span> - November 21, 2018 </div> </footer> <div class="content-body"> It's one thing to give travel advice; it's another to follow it. In past articles, I've written about how to prepare for a vacation or other travel when you're on call. And, I just got back from a vacation where I put some of those ideas into practice, so I thought I'd write a follow-up and give some specifics on what I recommended, what I actually did and how it all worked. </div> </div> </article> </div> </div> <nav class="pager-nav text-center" role="navigation" aria-labelledby="pagination-heading"> <h4 id="pagination-heading" class="visually-hidden">Pagination</h4> <ul class="pagination js-pager__items"> <li class="pager__item is-active active"> <a href="?page=0" title="Current page"> <span class="visually-hidden"> Current page </span>1</a> </li> <li class="pager__item"> <a href="?page=1" title="Go to page 2"> <span class="visually-hidden"> Page </span>2</a> </li> <li class="pager__item"> <a href="?page=2" title="Go to page 3"> <span class="visually-hidden"> Page </span>3</a> </li> <li class="pager__item"> <a href="?page=3" title="Go to page 4"> <span class="visually-hidden"> Page </span>4</a> </li> <li class="pager__item"> <a href="?page=4" title="Go to page 5"> <span class="visually-hidden"> Page </span>5</a> </li> <li class="pager__item"> <a href="?page=5" title="Go to page 6"> <span class="visually-hidden"> Page </span>6</a> </li> <li class="pager__item"> <a href="?page=6" title="Go to page 7"> <span class="visually-hidden"> Page </span>7</a> </li> <li class="pager__item"> <a href="?page=7" title="Go to page 8"> <span class="visually-hidden"> Page </span>8</a> </li> <li class="pager__item"> <a href="?page=8" title="Go to page 9"> <span class="visually-hidden"> Page </span>9</a> </li> <li class="pager__item pager__item--next"> <a href="?page=1" title="Go to next page" rel="next"> <span class="visually-hidden">Next page</span> <span aria-hidden="true">››</span> </a> </li> <li class="pager__item pager__item--last"> <a href="?page=8" title="Go to last page" rel="last"> <span class="visually-hidden">Last page</span> <span aria-hidden="true">Last »</span> </a> </li> </ul> </nav> <div class="feed-icons"> <a href="https://www.linuxjournal.com/taxonomy/term/31/feed" class="feed-icon"> Subscribe to Security </a> </div> </div> </div> </div> </section> </div> </div> <footer class="footer container" role="contentinfo"> <div class="region region-footer"> <section class="views-element-container block block-views block-views-blocknewsletter-promo-block-block-1 clearfix" id="block-views-block-newsletter-promo-block-block-1"> <div class="form-group"><div class="view view-newsletter-promo-block view-id-newsletter_promo_block view-display-id-block_1 js-view-dom-id-7884e9b367bcb57960d494cddc25168390ceff631a2ff0313abd84529b2019d2"> <div class="view-content"> <div class="views-row"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="newsletter-bottom"> <div class="col-md-9 col-sm-12 signup-form"> <!--<h3>Linux Journal Week in Review</h3> <p>Sign up to get all the good stuff delivered to your inbox every week.</p> <form id="subForm" class="js-cm-form" action="https://www.createsend.com/t/subscribeerror?description=" method="post" data-id="A61C50BEC994754B1D79C5819EC1255CDBC34DDF3E170B13E2BAC2D68C42BF424F853383C84F5BAE38EAB4CFA5C73907CAC074FF8192503AF80F3699F7FE5CE1"> <div class="flexform">--> <!--<label for="fieldEmail">Email</label> <br />--> <!--<input id="fieldEmail" name="cm-gjjtdh-gjjtdh" type="email" class="js-cm-email-input" placeholder="Enter your email. Get the newsletter." required /> <button class="js-cm-submit-button" type="submit">Sign Up</button> </div> <div> <input id="cm-privacy-consent" name="cm-privacy-consent" required type="checkbox" /> <label for="cm-privacy-consent">I give my consent to be emailed</label> <input id="cm-privacy-consent-hidden" name="cm-privacy-consent-hidden" type="hidden" value="true" /> </div> </form> <script type="text/javascript" src="https://js.createsend1.com/javascript/copypastesubscribeformlogic.js"></script> </div>--> <!--<div class="col-md-3 col-sm-12 subs-callout"> <img src="/sites/default/files/styles/large/public/2019-01/LJ294-Jan2019-Cover_0.jpg" width="100px" /> <h3>The Value of Open Source Journalism</h3> <p> Subscribe and support our coverage for technology's biggest thinkers – with up to 52% savings. </p> <strong><a href="https://www.linuxjournal.com/subscribe">Subscribe <i class="fa fa-angle-double-right" aria-hidden="true"></i></a> </strong> </div>--> </div> </div> </div> </div> </div> </div> </section> </div> <div class="footer-blocks col-sm-12"> <div class="col-md-6 col-sm-12 footer-left"> <div class="region region-footer-left"> <section id="block-connectwithusfooter" class="block block-block-content block-block-content5e722bd4-5e08-454b-8507-956089bfa661 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="footer-heading">Connect With Us <span class="social-media sm-a-no-underline"><a href="https://youtube.com/linuxjournalonline" alt="Linux Journal on YouTube" aria-label="YouTube"><i class="fa fa-youtube fa-2x"></i></a><a href="https://www.facebook.com/linuxjournal/" alt="Linux Journal on Facebook" aria-label="Facebook"><i class="fa fa-facebook-f fa-2x"></i><a href="https://twitter.com/linuxjournal" alt="Linux Journal on Twitter" aria-label="Twitter"><i class="fa fa-twitter fa-2x"></i></a></span></div> <p>Linux Journal, representing 25+ years of publication, is the original magazine of the global Open Source community.</p></div> </section> <section id="block-linuxjournal-block-9" class="block block-block-content block-block-content8669793b-e217-4426-a79e-eb3c21ede127 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div id="copyright">© 2024 Slashdot Media, LLC. All rights reserved.</div> </div> </section> <section id="block-privacyterms" class="block block-block-content block-block-contenta203b8bd-80ef-4982-bf6e-784dd7b44120 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><ul class="menu menu--footer-submenu nav" id="terms-nav"> <li><a href="https://slashdotmedia.com/privacy-statement/" rel="nofollow" target="_blank">PRIVACY POLICY</a></li> <li><a href="https://slashdotmedia.com/terms-of-use/" rel="nofollow" target="_blank">TERMS OF SERVICE</a></li> <li><a href="/sponsors">ADVERTISE</a></li> </ul></div> </section> </div> </div> <div class="col-md-4 col-sm-8 footer-middle"> <div class="region region-footer-middle"> <nav role="navigation" aria-labelledby="block-footermenucolumn2-menu" id="block-footermenucolumn2"> <h2 class="visually-hidden" id="block-footermenucolumn2-menu">Footer Menu Column 2</h2> <ul class="menu menu--footer-menu-column-2 nav"> <li class="first"> <a href="/content/masthead" data-drupal-link-system-path="node/1007727">Masthead</a> </li> <li> <a href="/author" data-drupal-link-system-path="node/1009249">Authors</a> </li> <li class="last"> <a href="/form/contact" data-drupal-link-system-path="webform/contact">Contact Us</a> </li> </ul> </nav> <nav role="navigation" aria-labelledby="block-footermenucolumn3-menu" id="block-footermenucolumn3"> <h2 class="visually-hidden" id="block-footermenucolumn3-menu">Footer Menu Column 3</h2> <ul class="menu menu--footer-menu-column-3 nav"> <li class="first"> <a href="/rss_feeds" data-drupal-link-system-path="node/1000457">RSS Feeds</a> </li> <li class="last"> <a href="/aboutus" data-drupal-link-system-path="node/1000267">About Us</a> </li> </ul> </nav> </div> </div> </div> </footer> </div> </div> <script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","scriptPath":null,"pathPrefix":"","currentPath":"taxonomy\/term\/31","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"bootstrap":{"forms_has_error_value_toggle":1,"popover_enabled":1,"popover_animation":1,"popover_auto_close":1,"popover_container":"body","popover_content":"","popover_delay":"0","popover_html":0,"popover_placement":"right","popover_selector":"","popover_title":"","popover_trigger":"click"},"linuxjournal":{"disqus":{"origin":"https:\/\/www.linuxjournal.com","prettyUrl":"\/tag\/security","fullUrl":"https:\/\/www.linuxjournal.com\/tag\/security","embedUrl":"https:\/\/linuxjournal.disqus.com\/embed.js","shortname":"linuxjournal"}},"ajaxTrustedUrl":{"\/search\/node":true},"user":{"uid":0,"permissionsHash":"a7b3a803411eb9cbd5d7d374ffb326721ee8274ab5a665df8f38311e3aad858c"}}</script> <script src="/core/assets/vendor/jquery/jquery.min.js?v=3.6.3"></script> <script src="/core/assets/vendor/underscore/underscore-min.js?v=1.13.6"></script> <script src="/core/misc/polyfills/element.matches.js?v=9.5.9"></script> <script src="/core/misc/polyfills/object.assign.js?v=9.5.9"></script> <script src="/core/assets/vendor/once/once.min.js?v=1.0.1"></script> <script src="/core/assets/vendor/jquery-once/jquery.once.min.js?v=9.5.9"></script> <script src="/core/misc/drupalSettingsLoader.js?v=9.5.9"></script> <script src="/core/misc/drupal.js?v=9.5.9"></script> <script src="/core/misc/drupal.init.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/drupal.bootstrap.js?smwnh4"></script> <script src="/themes/contrib/bootstrap/js/attributes.js?smwnh4"></script> <script src="/themes/contrib/bootstrap/js/theme.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/affix.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/alert.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/button.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/carousel.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/collapse.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/dropdown.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/modal.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tooltip.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/popover.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/scrollspy.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tab.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/transition.js?smwnh4"></script> <script src="/themes/linuxjournal/js/lj-consentmanager.js?smwnh4"></script> <script src="/modules/contrib/webform/js/webform.behaviors.js?v=9.5.9"></script> <script src="/core/misc/jquery.once.bc.js?v=9.5.9"></script> <script src="/core/misc/states.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/misc/states.js?smwnh4"></script> <script src="/modules/contrib/webform/js/webform.states.js?v=9.5.9"></script> <script src="/modules/contrib/webform/modules/webform_bootstrap/js/webform_bootstrap.states.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/popover.js?smwnh4"></script> <!-- START EMBED --> <noscript><img src="https://api.b2c.com/api/noscript-448i7exgpyqpr9c144q.gif"></noscript> <!-- END EMBED --> <!-- Matomo --> <script type="text/javascript"> var _paq = _paq || []; function initPiwik() { _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://analytics.linuxjournal.com/"; _paq.push(['setTrackerUrl', u+'piwik.php']); _paq.push(['setSiteId', '50']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); })(); } </script> <noscript><p><img src="https://analytics.linuxjournal.com/piwik.php?idsite=50&rec=1" style="border:0;" alt="" /></p></noscript> <!-- End Matomo Code --> <div class="modal-custom overlay-custom" id="ccpa-modal" style="margin-left: 0; display: none; max-width: 100%; width: 100%"> <div id="modal-content" class="modal-content"> <div class="modal-header" id="ccpa-modal-content-destination"></div> <span class="close" id="modal-close">×</span> </div> </div> </body> </html>