1
0
wiki/Technology/OperatingSystem/Linux/3.基础操作/Linux-用户和权限.html

1350 lines
565 KiB
HTML
Raw Normal View History

2024-09-03 21:23:28 +08:00
<!DOCTYPE html>
<html><head><title>Linux 用户和权限</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="Linux 用户和权限"/><meta property="og:description" content="Linux 用户和权限."/><meta property="og:image" content="https://wiki.7wate.com/static/og-image.png"/><meta property="og:width" content="1200"/><meta property="og:height" content="675"/><link rel="icon" href="../../../../static/icon.png"/><meta name="description" content="Linux 用户和权限."/><meta name="generator" content="Quartz"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com"/><script async src="https://umami.7wate.com/script.js" data-website-id="c061efdc-95dd-4d21-9d04-a1ffda0a85b9"></script><script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?94d8ccb156eb7c65abf317e6e01cdba9";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-MHMEL0F832"></script><script>
(function() {
window.dataLayer = window.dataLayer || [];
function gtag() {
window.dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-MHMEL0F832');
})();
</script><link href="../../../../index.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://fonts.googleapis.com/css2?family=IBM Plex Mono&amp;family=Schibsted Grotesk:wght@400;700&amp;family=Source Sans Pro:ital,wght@0,400;0,600;1,400;1,600&amp;display=swap" rel="stylesheet" type="text/css" spa-preserve/><script src="../../../../prescript.js" type="application/javascript" spa-preserve></script><script type="application/javascript" spa-preserve>const fetchData = fetch(`../../../../static/contentIndex.json`).then(data => data.json())</script></head><body data-slug="Technology/OperatingSystem/Linux/3.基础操作/Linux-用户和权限"><div id="quartz-root" class="page"><div id="quartz-body"><div class="left sidebar"><h1 class="page-title "><a href="../../../..">📚 X·Eden</a></h1><div class="spacer mobile-only"></div><div class="search "><div id="search-icon"><p>Search</p><div></div><svg tabIndex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search</title><desc id="desc">Search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"></path><circle cx="8" cy="8" r="7"></circle></g></svg></div><div id="search-container"><div id="search-space"><input autocomplete="off" id="search-bar" name="search" type="text" aria-label="Search for something" placeholder="Search for something"/><div id="results-container"></div></div></div></div><div class="darkmode "><input class="toggle" id="darkmode-toggle" type="checkbox" tabIndex="-1"/><label id="toggle-label-light" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xmlSpace="preserve"><title>Light mode</title><path d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z"></path></svg></label><label id="toggle-label-dark" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'" xmlSpace="preserve"><title>Dark mode</title><path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-1
<p>Linux 多用户系统的历史可以追溯到 1960 年代的 Unix 系统Unix 是一种多用户、多任务的操作系统,被广泛应用于大型计算机和服务器上。随着 Linux 的发展,它也成为了一种强大的多用户操作系统,并被广泛应用于服务器、个人电脑和移动设备等领域。</p>
<h3 id="设计原则">设计原则<a aria-hidden="true" tabindex="-1" href="#设计原则" class="internal"> §</a></h3>
<p>Linux 多用户系统的设计基于以下原则:</p>
<ul>
<li><strong>唯一用户标识符UID</strong>:每个用户都有一个唯一的标识符,用于标识其身份。</li>
<li><strong>用户组标识符GID</strong>:每个用户可以分配到一个或多个用户组,用户组也有一个唯一的标识符。</li>
<li><strong>所有者和用户组</strong>:每个文件和目录都有一个所有者和一个所属用户组,用于控制访问权限。</li>
<li><strong>主目录Home Directory</strong>:每个用户都有一个主目录,用于存储其个人文件和设置。</li>
<li><strong>系统管理员权限</strong>:系统管理员可以创建、删除和管理用户和用户组,以及控制用户的权限和访问权限。</li>
</ul>
<h3 id="实现机制">实现机制<a aria-hidden="true" tabindex="-1" href="#实现机制" class="internal"> §</a></h3>
<p>Linux 多用户系统的实现基于以下机制:</p>
<ul>
<li><strong>配置文件</strong>:用户和用户组的信息存储在特定的配置文件中,如 <code>/etc/passwd</code><code>/etc/shadow</code><code>/etc/group</code><code>/etc/gshadow</code></li>
<li><strong>身份验证</strong>:用户登录时需要进行身份验证,通常使用用户名和密码进行认证。</li>
<li><strong>管理工具</strong>:系统管理员可以使用命令行工具或图形界面来创建、删除和管理用户和用户组,以及配置用户的权限和访问权限。</li>
<li><strong>安全机制</strong>Linux 系统提供了许多安全机制如访问控制列表ACL、文件系统权限和 SELinux用于保护系统和用户的数据安全。</li>
</ul>
<h3 id="权限管理">权限管理<a aria-hidden="true" tabindex="-1" href="#权限管理" class="internal"> §</a></h3>
<p>在 Linux 系统中文件和目录的权限由三个组件组成所有者权限、所属组权限和其他用户权限。每个组件可以设置为读取r、写入w和执行x权限这些权限可以用数字表示r=4, w=2, x=1</p>
<h3 id="用户和权限的配置文件">用户和权限的配置文件<a aria-hidden="true" tabindex="-1" href="#用户和权限的配置文件" class="internal"> §</a></h3>
<p>以下是存储用户和权限信息的主要配置文件:</p>
<ul>
<li><strong>/etc/passwd</strong>:存储用户账户信息。</li>
<li><strong>/etc/shadow</strong>:存储用户密码信息,包含加密的密码和其他安全信息。</li>
<li><strong>/etc/group</strong>:存储用户组信息。</li>
<li><strong>/etc/gshadow</strong>:存储用户组密码信息。</li>
<li><strong>/etc/login.defs</strong>:定义系统登录的默认配置。</li>
<li><strong>/etc/adduser.conf</strong>:定义添加用户时的默认配置。</li>
</ul>
<h3 id="安全性建议">安全性建议<a aria-hidden="true" tabindex="-1" href="#安全性建议" class="internal"> §</a></h3>
<p>在使用 root 用户时,应注意系统的安全性,<strong>尽量使用 <code>sudo</code><code>su</code> 命令以普通用户身份执行命令,以减少误操作对系统的影响。</strong></p>
<h2 id="用户">用户<a aria-hidden="true" tabindex="-1" href="#用户" class="internal"> §</a></h2>
<h3 id="创建">创建<a aria-hidden="true" tabindex="-1" href="#创建" class="internal"> §</a></h3>
<h4 id="useradd">Useradd<a aria-hidden="true" tabindex="-1" href="#useradd" class="internal"> §</a></h4>
<p><code>useradd</code> 命令是 Linux 系统中的一个命令行工具,用于创建新用户帐户。通过 <code>useradd</code> 命令,可以指定新用户的用户名、用户 IDUID、主目录、默认 shell 和密码等信息。</p>
<p>在大多数 Linux 系统中,只有管理员用户(如 root 用户)可以创建新用户。通常情况下,管理员用户需要使用 <code>sudo</code> 命令或以 root 用户身份登录系统,才能使用 <code>useradd</code> 命令创建新用户。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 创建一个新用户</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">useradd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-c, --comment COMMENT</code></td><td>指定用户的注释字段。</td><td><code>sudo useradd -c &quot;John Smith&quot; john</code></td></tr><tr><td><code>-d, --home-dir HOME_DIR</code></td><td>指定用户的家目录。</td><td><code>sudo useradd -d /home/john john</code></td></tr><tr><td><code>-e, --expiredate EXPIRE_DATE</code></td><td>指定用户的账户过期日期。</td><td><code>sudo useradd -e 2023-06-30 john</code></td></tr><tr><td><code>-f, --inactive INACTIVE</code></td><td>设置密码过期后的不活动期限为 INACTIVE以禁用账户。</td><td><code>sudo useradd -f 30 john</code></td></tr><tr><td><code>-g, --gid GROUP</code></td><td>指定用户的主用户组。</td><td><code>sudo useradd -g staff john</code></td></tr><tr><td><code>-G, --groups GROUPS</code></td><td>指定用户所属的其他用户组。</td><td><code>sudo useradd -G staff,developer john</code></td></tr><tr><td><code>-m, --create-home</code></td><td>创建用户的家目录。</td><td><code>sudo useradd -m john</code></td></tr><tr><td><code>-p, --password PASSWORD</code></td><td>指定用户的加密密码。</td><td><code>sudo useradd -p password_hash john</code></td></tr><tr><td><code>-s, --shell SHELL</code></td><td>指定用户的默认 shell。</td><td><code>sudo useradd -s /bin/bash john</code></td></tr><tr><td><code>-u, --uid UID</code></td><td>指定用户的 UID。</td><td><code>sudo useradd -u 1001 john</code></td></tr></tbody></table>
<h4 id="adduser">Adduser<a aria-hidden="true" tabindex="-1" href="#adduser" class="internal"> §</a></h4>
<p><strong><code>adduser</code> 命令是 Linux 系统中的一个高层次的用户添加工具,它提供了比 <code>useradd</code> 更加用户友好的界面和交互过程。</strong><code>adduser</code> 通常作为一个 Perl 脚本,封装了 <code>useradd</code> 命令,并在用户创建过程中进行一些附加的配置工作,如创建主目录、复制模板文件、设置密码等。</p>
<ul>
<li><strong>配置文件</strong><code>adduser</code> 命令的默认配置文件为 <code>/etc/adduser.conf</code>,可以在此文件中修改默认设置,如主目录、用户组等。</li>
<li><strong>密码设置</strong><code>adduser</code> 默认会在用户创建过程中提示输入密码。如果使用 <code>--disabled-password</code> 选项,则不会设置密码,需要在用户创建后使用 <code>passwd</code> 命令单独设置。</li>
<li><strong><code>useradd</code> 的兼容性</strong>:虽然 <code>adduser</code> 提供了更友好的用户创建界面,但它并不是所有发行版都默认包含的命令。某些轻量级发行版可能只提供 <code>useradd</code></li>
</ul>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 创建一个新用户</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">adduser</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>--home HOME_DIR</code></td><td>指定用户的家目录。</td><td><code>sudo adduser --home /home/john john</code></td></tr><tr><td><code>--shell SHELL</code></td><td>指定用户的默认 shell。</td><td><code>sudo adduser --shell /bin/bash john</code></td></tr><tr><td><code>--uid UID</code></td><td>指定用户的 UID。</td><td><code>sudo adduser --uid 1001 john</code></td></tr><tr><td><code>--gid GID</code></td><td>指定用户的 GID。</td><td><code>sudo adduser --gid 100 john</code></td></tr><tr><td><code>--disabled-password</code></td><td>创建用户但不设置密码。</td><td><code>sudo adduser --disabled-password john</code></td></tr><tr><td><code>--disabled-login</code></td><td>创建用户但禁止登录。</td><td><code>sudo adduser --disabled-login john</code></td></tr><tr><td><code>--gecos GECOS</code></td><td>提供用户的 GECOS 信息。</td><td><code>sudo adduser --gecos &quot;John Smith,,,&quot; john</code></td></tr><tr><td><code>--no-create-home</code></td><td>不创建用户的家目录。</td><td><code>sudo adduser --no-create-home john</code></td></tr><tr><td><code>--ingroup GROUP</code></td><td>将用户添加到指定的主用户组。</td><td><code>sudo adduser --ingroup staff john</code></td></tr><tr><td><code>--extra-groups GROUPS</code></td><td>将用户添加到附加用户组。</td><td><code>sudo adduser --extra-groups staff,developer john</code></td></tr></tbody></table>
<p><strong><code>adduser</code><code>useradd</code> 的区别:</strong></p>
<ul>
<li><strong>交互式</strong><code>adduser</code> 提供了交互式的用户创建过程向导会提示输入用户名、密码、GECOS 信息(如全名、电话等)。</li>
<li><strong>默认设置</strong><code>adduser</code> 使用系统默认配置文件(如 <code>/etc/adduser.conf</code>)来设定新用户的默认值,例如主目录位置、用户组等。</li>
<li><strong>附加任务</strong><code>adduser</code> 会自动完成一些附加任务,如创建用户主目录、复制 <code>/etc/skel</code> 目录中的模板文件到新用户主目录等。</li>
</ul>
<h3 id="管理">管理<a aria-hidden="true" tabindex="-1" href="#管理" class="internal"> §</a></h3>
<h4 id="chfn">Chfn<a aria-hidden="true" tabindex="-1" href="#chfn" class="internal"> §</a></h4>
<p><code>chfn</code> change finger information命令用于更改用户的 GECOS 信息。GECOS 字段包含用户的全名、办公地址、办公电话和家庭电话等信息。通常,这些信息存储在 <code>/etc/passwd</code> 文件中</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 更改当前用户信息</span></span>
<span data-line><span style="color:var(--shiki-token-function);">debian@SevenWate-PC:$</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">chfn</span></span>
<span data-line><span style="color:var(--shiki-token-function);">Password:</span></span>
<span data-line><span style="color:var(--shiki-token-function);">Changing</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">the</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">user</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">information</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">for</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">debian</span></span>
<span data-line><span style="color:var(--shiki-token-function);">Enter</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">the</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">new</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">value,</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">or</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">press</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">ENTER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">for</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">the</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">default</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">Full</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Name:</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">Room</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Number</span><span style="color:var(--shiki-color-text);"> []:</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">Work</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Phone</span><span style="color:var(--shiki-color-text);"> []:</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">Home</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Phone</span><span style="color:var(--shiki-color-text);"> []:</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-f, --full-name NAME</code></td><td>更改用户的全名。</td><td><code>chfn -f &quot;John Smith&quot;</code></td></tr><tr><td><code>-r, --room ROOM</code></td><td>更改用户的办公地址。</td><td><code>chfn -r &quot;Room 123&quot;</code></td></tr><tr><td><code>-w, --work-phone PHONE</code></td><td>更改用户的办公电话。</td><td><code>chfn -w &quot;555-1234&quot;</code></td></tr><tr><td><code>-h, --home-phone PHONE</code></td><td>更改用户的家庭电话。</td><td><code>chfn -h &quot;555-5678&quot;</code></td></tr><tr><td><code>-o, --other OTHER</code></td><td>更改用户的其他信息。</td><td><code>chfn -o &quot;Other Info&quot;</code></td></tr><tr><td><code>-u, --username USER</code></td><td>指定要更改 GECOS 信息的用户名(仅 root 用户可以使用该选项)。</td><td><code>sudo chfn -f &quot;John Smith&quot; john</code></td></tr><tr><td><code>-q, --quiet</code></td><td>安静模式,不输出任何信息。</td><td><code>chfn -q</code></td></tr><tr><td><code>-v, --verbose</code></td><td>显示详细信息。</td><td><code>chfn -v</code></td></tr></tbody></table>
<h4 id="chsh">Chsh<a aria-hidden="true" tabindex="-1" href="#chsh" class="internal"> §</a></h4>
<p><code>chsh</code> change shell命令用于更改用户的默认登录 shell。通过 <code>chsh</code> 命令,用户可以选择不同的 shell 来作为他们的登录环境。在 Linux 系统中,常见的 shell 有 <code>bash</code><code>zsh</code><code>ksh</code><code>csh</code> 等。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 查看当前系统 shell</span></span>
<span data-line><span style="color:var(--shiki-token-function);">cat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/etc/shells</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 更改当前用户的默认 shell</span></span>
<span data-line><span style="color:var(--shiki-token-function);">chsh</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/bin/bash</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 更改其他用户的默认 shell</span></span>
<span data-line><span style="color:var(--shiki-token-function);">chsh</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/bin/bash</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-s, --shell SHELL</code></td><td>指定新的登录 shell。</td><td><code>chsh -s /bin/zsh</code></td></tr><tr><td><code>-l, --list-shells</code></td><td>列出系统中可用的 shell。</td><td><code>chsh -l</code></td></tr><tr><td><code>-u, --username USER</code></td><td>指定要更改 shell 的用户。仅 root 用户可以使用该选项。</td><td><code>sudo chsh -s /bin/zsh john</code></td></tr><tr><td><code>-h, --help</code></td><td>显示帮助信息。</td><td><code>chsh -h</code></td></tr></tbody></table>
<table><thead><tr><th>Shell</th><th>描述</th><th>主要特性</th><th>适用场景</th></tr></thead><tbody><tr><td><code>sh</code></td><td>Bourne Shell最早的 UNIX Shell。</td><td>基本命令解释器,轻量,标准 UNIX Shell</td><td>传统 UNIX 系统,基础脚本编写</td></tr><tr><td><code>bash</code></td><td>Bourne Again Shell最常用的 Shell向后兼容 <code>sh</code></td><td>强大的脚本功能,命令行编辑,历史记录,命令补全</td><td>日常使用,脚本编写,系统管理员使用</td></tr><tr><td><code>csh</code></td><td>C Shell语法类似 C 语言。</td><td>C 语言风格语法,别名,历史记录</td><td>喜欢 C 语言语法的用户,脚本编写</td></tr><tr><td><code>tcsh</code></td><td><code>csh</code> 的改进版本,增加了一些用户友好功能。</td><td>增强的命令行编辑,命令补全,语法高亮</td><td>改进的 C Shell 用户,交互式使用</td></tr><tr><td><code>ksh</code></td><td>Korn Shell结合了 <code>sh</code><code>csh</code> 的优点。</td><td>丰富的编程特性,数组处理,命令行编辑</td><td>高级脚本编写,系统管理员使用</td></tr><tr><td><code>zsh</code></td><td>Z Shell功能强大且灵活支持许多高级特性。</td><td>强大的命令补全,插件系统,主题支持,多行命令编辑</td><td>高级用户,脚本编写,开发人员</td></tr><tr><td><code>fish</code></td><td>Friendly Interactive Shell用户友好的 Shell。</td><td>人性化提示,智能命令补全,颜色高亮,简易配置</td><td>新手用户,日常使用,用户友好环境</td></tr><tr><td><code>dash</code></td><td>Debian Almquist Shell轻量级的 <code>sh</code> 实现。</td><td>轻量快速,标准兼容,资源占用低</td><td>系统启动脚本,嵌入式系统,资源受限环境</td></tr><tr><td><code>ash</code></td><td>Almquist Shell另一个轻量级的 <code>sh</code> 实现。</td><td>轻量快速,标准兼容,资源占用低</td><td>嵌入式系统,资源受限环境,轻量级需求</td></tr><tr><td><code>rbash</code></td><td>Restricted Bash限制版的 <code>bash</code></td><td>限制用户执行某些命令,增强安全性</td><td>受限用户环境,安全要求高的场景</td></tr><tr><td><code>scponly</code></td><td>限制用户只能使用 <code>scp</code> 命令。</td><td>限制用户只进行 SCP 操作,增强安全性</td><td>安全文件传输环境,受限用户访问</td></tr><tr><td><code>nologin</code></td><td>禁止用户登录 Shell但允许 FTP 等非交互式服务。</td><td>禁止交互登录,显示消息,安全性控制</td><td>禁止交互登录的用户,提供非交互服务</td></tr><tr><td><code>git-shell</code></td><td>专为 Git 用户设计的 Shell限制用户只能执行 Git 命令。</td><td>限制用户只能使用 Git 命令,增强代码管理安全性</td><td>Git 服务器环境,限制用户操作,代码管理服务器</td></tr></tbody></table>
<h4 id="chage">Chage<a aria-hidden="true" tabindex="-1" href="#chage" class="internal"> §</a></h4>
<p><code>chage</code> change age命令用于更改用户密码的有效期和过期信息。系统管理员可以通过 <code>chage</code> 命令来设置用户密码的到期时间、警告时间和账户失效时间等,从而增强系统的安全性。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 查看用户密码信息</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">chage</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-l</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-d, --lastday LAST_DAY</code></td><td>设置用户密码最后一次更改的日期。日期格式为 YYYY-MM-DD。</td><td><code>sudo chage -d 2024-08-05 john</code></td></tr><tr><td><code>-E, --expiredate EXPIRE_DATE</code></td><td>设置账户过期日期。日期格式为 YYYY-MM-DD。</td><td><code>sudo chage -E 2024-12-31 john</code></td></tr><tr><td><code>-I, --inactive INACTIVE</code></td><td>设置密码过期后多少天账户变为不活跃状态。</td><td><code>sudo chage -I 30 john</code></td></tr><tr><td><code>-m, --mindays MIN_DAYS</code></td><td>设置密码的最短使用期限(两次修改密码之间最少要间隔的天数)。</td><td><code>sudo chage -m 7 john</code></td></tr><tr><td><code>-M, --maxdays MAX_DAYS</code></td><td>设置密码的最长使用期限(密码过期前的最大天数)。</td><td><code>sudo chage -M 90 john</code></td></tr><tr><td><code>-W, --warndays WARN_DAYS</code></td><td>设置密码过期前警告用户的天数。</td><td><code>sudo chage -W 7 john</code></td></tr><tr><td><code>-l, --list</code></td><td>显示用户密码和账户的过期信息。</td><td><code>sudo chage -l john</code></td></tr><tr><td><code>-h, --help</code></td><td>显示帮助信息。</td><td><code>chage -h</code></td></tr></tbody></table>
<p><em>日期格式应为 YYYY-MM-DD如果不指定具体日期可以使用 <code>-1</code> 表示永不过期。</em></p>
<h4 id="passwd">Passwd<a aria-hidden="true" tabindex="-1" href="#passwd" class="internal"> §</a></h4>
<p><code>passwd</code> password命令是 Linux 系统中的一个命令行工具,用于更改用户的密码或口令。默认情况下,每个 Linux 用户都有一个口令或密码来保护其账户的安全性。<code>passwd</code> 命令可用于更改密码或口令。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 更改当前用户的</span></span>
<span data-line><span style="color:var(--shiki-token-function);">passwd</span><span style="color:var(--shiki-color-text);"> </span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 更改其他用户的密码</span></span>
<span data-line><span style="color:var(--shiki-token-function);">passwd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-d, --delete</code></td><td>删除用户的密码,使账户不需要密码即可登录。</td><td><code>sudo passwd -d john</code></td></tr><tr><td><code>-e, --expire</code></td><td>使用户密码立即过期,强制用户在下次登录时更改密码。</td><td><code>sudo passwd -e john</code></td></tr><tr><td><code>-i, --inactive INACTIVE</code></td><td>设置密码过期后账户被禁用前的天数。</td><td><code>sudo passwd -i 30 john</code></td></tr><tr><td><code>-k, --keep-tokens</code></td><td>仅更新有效期信息而不更改密码。</td><td><code>sudo passwd -k john</code></td></tr><tr><td><code>-l, --lock</code></td><td>锁定用户密码,禁用账户。</td><td><code>sudo passwd -l john</code></td></tr><tr><td><code>-S, --status</code></td><td>显示账户的密码状态信息。</td><td><code>sudo passwd -S john</code></td></tr><tr><td><code>-u, --unlock</code></td><td>解锁用户密码,启用账户。</td><td><code>sudo passwd -u john</code></td></tr><tr><td><code>-x, --maxdays MAX_DAYS</code></td><td>设置密码的最大使用期限(天)。</td><td><code>sudo passwd -x 90 john</code></td></tr><tr><td><code>-n, --mindays MIN_DAYS</code></td><td>设置密码的最小使用期限(天)。</td><td><code>sudo passwd -n 7 john</code></td></tr><tr><td><code>-w, --warndays WARN_DAYS</code></td><td>设置密码过期前的警告天数。</td><td><code>sudo passwd -w 7 john</code></td></tr><tr><td><code>-q, --quiet</code></td><td>安静模式,不输出任何信息。</td><td><code>passwd -q</code></td></tr></tbody></table>
<h4 id="usermod">Usermod<a aria-hidden="true" tabindex="-1" href="#usermod" class="internal"> §</a></h4>
<p><code>usermod</code>user modify命令是 Linux 系统中的一个命令行工具,用于修改用户的属性或配置。<code>usermod</code> 命令允许您更改现有用户的用户名、UID、主目录、默认 shell 等信息,还可以将用户添加到其他用户组中。</p>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-c, --comment COMMENT</code></td><td>修改用户的注释字段。</td><td><code>sudo usermod -c &quot;John Smith&quot; john</code></td></tr><tr><td><code>-d, --home HOME_DIR</code></td><td>修改用户的主目录,并将目录内容移至新位置(使用 <code>-m</code> 选项)。</td><td><code>sudo usermod -d /home/newjohn -m john</code></td></tr><tr><td><code>-e, --expiredate EXPIRE_DATE</code></td><td>设置用户帐户的过期日期。</td><td><code>sudo usermod -e 2024-12-31 john</code></td></tr><tr><td><code>-f, --inactive INACTIVE</code></td><td>设置密码过期后多少天账户变为不活跃状态。</td><td><code>sudo usermod -f 30 john</code></td></tr><tr><td><code>-g, --gid GROUP</code></td><td>修改用户的主用户组。</td><td><code>sudo usermod -g staff john</code></td></tr><tr><td><code>-G, --groups GROUPS</code></td><td>修改用户所属的附加组。</td><td><code>sudo usermod -G staff,developer john</code></td></tr><tr><td><code>-a, --append</code></td><td>将用户添加到附加组(与 <code>-G</code> 选项一起使用)。</td><td><code>sudo usermod -a -G sudo john</code></td></tr><tr><td><code>-l, --login NEW_LOGIN</code></td><td>修改用户的登录名。</td><td><code>sudo usermod -l newjohn john</code></td></tr><tr><td><code>-L, --lock</code></td><td>锁定用户密码,禁用账户。</td><td><code>sudo usermod -L john</code></td></tr><tr><td><code>-U, --unlock</code></td><td>解锁用户密码,启用账户。</td><td><code>sudo usermod -U john</code></td></tr><tr><td><code>-s, --shell SHELL</code></td><td>修改用户的登录 shell。</td><td><code>sudo usermod -s /bin/zsh john</code></td></tr><tr><td><code>-u, --uid UID</code></td><td>修改用户的用户 IDUID</td><td><code>sudo usermod -u 1001 john</code></td></tr><tr><td><code>-p, --password PASSWORD</code></td><td>修改用户的加密密码。</td><td><code>sudo usermod -p password_hash john</code></td></tr><tr><td><code>-m, --move-home</code></td><td>将用户的主目录内容移动到新位置(与 <code>-d</code> 选项一起使用)。</td><td><code>sudo usermod -d /home/newjohn -m john</code></td></tr><tr><td><code>-o, --non-unique</code></td><td>允许分配重复的 UID<code>-u</code> 选项一起使用)。</td><td><code>sudo usermod -o -u 1001 john</code></td></tr></tbody></table>
<h3 id="删除">删除<a aria-hidden="true" tabindex="-1" href="#删除" class="internal"> §</a></h3>
<h4 id="userdel">Userdel<a aria-hidden="true" tabindex="-1" href="#userdel" class="internal"> §</a></h4>
<p><code>userdel</code>User Delete命令是 Linux 系统中的一个命令行工具,用于删除现有用户帐户。默认情况下,<code>userdel</code> 命令仅删除用户的帐户,而不删除用户的主目录和邮件箱。如果需要删除用户的主目录和邮件箱,可以使用 <code>-r</code> 选项。</p>
<ul>
<li><strong>删除用户前的检查</strong>:在删除用户之前,应检查用户是否拥有任何正在运行的进程,并终止这些进程。可以使用 <code>ps -u username</code> 命令查看用户的进程。</li>
<li><strong>备份重要数据</strong>:在删除用户及其主目录之前,建议备份用户的重要数据,以防止数据丢失。</li>
<li><strong>SELinux 用户映射</strong>:如果系统启用了 SELinux并且为用户分配了 SELinux 用户映射,可以使用 <code>-Z</code> 选项删除该映射。</li>
<li><strong>删除用户后</strong>:删除用户后,应检查并清理与该用户相关的任何残留文件或配置,以确保系统的一致性和安全性。</li>
</ul>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 删除一个用户</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">userdel</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-f, --force</code></td><td>强制删除用户账户,即使用户当前正在登录。</td><td><code>sudo userdel -f john</code></td></tr><tr><td><code>-r, --remove</code></td><td>删除用户的主目录及其邮件池。</td><td><code>sudo userdel -r john</code></td></tr><tr><td><code>-Z, --selinux-user</code></td><td>删除用户的 SELinux 用户映射。</td><td><code>sudo userdel -Z john</code></td></tr></tbody></table>
<h2 id="用户组">用户组<a aria-hidden="true" tabindex="-1" href="#用户组" class="internal"> §</a></h2>
<h3 id="创建-1">创建<a aria-hidden="true" tabindex="-1" href="#创建-1" class="internal"> §</a></h3>
<h4 id="groupadd">Groupadd<a aria-hidden="true" tabindex="-1" href="#groupadd" class="internal"> §</a></h4>
<p><code>groupadd</code> 命令是 Linux 系统中的一个命令行工具,用于创建新的用户组。管理员用户(如 root 用户)可以使用 <code>groupadd</code> 命令创建新组。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 创建一个新组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">groupadd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newgroup</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-f, --force</code></td><td>强制操作,如果组已存在则不报错。如果组不存在则创建新组。</td><td><code>sudo groupadd -f developers</code></td></tr><tr><td><code>-g, --gid GID</code></td><td>指定新组的组 ID。</td><td><code>sudo groupadd -g 1001 developers</code></td></tr><tr><td><code>-K, --key KEY=VALUE</code></td><td>覆盖 <code>/etc/login.defs</code> 文件中的设置。</td><td><code>sudo groupadd -K GID_MIN=1000 developers</code></td></tr><tr><td><code>-o, --non-unique</code></td><td>允许创建具有重复 GID 的组。</td><td><code>sudo groupadd -o -g 1001 developers</code></td></tr><tr><td><code>-r, --system</code></td><td>创建一个系统组。</td><td><code>sudo groupadd -r sysgroup</code></td></tr></tbody></table>
<h3 id="管理-1">管理<a aria-hidden="true" tabindex="-1" href="#管理-1" class="internal"> §</a></h3>
<h4 id="groups">Groups<a aria-hidden="true" tabindex="-1" href="#groups" class="internal"> §</a></h4>
<p><code>groups</code> 命令是 Linux 系统中的一个命令行工具,用于显示当前用户所属的用户组。如果没有指定用户名,则 <code>groups</code> 命令将显示当前用户所属的用户组。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 显示当前用户所属的用户组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">groups</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 显示指定用户所属的用户组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">groups</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">john</span></span></code></pre></div>
<h4 id="gpasswd">Gpasswd<a aria-hidden="true" tabindex="-1" href="#gpasswd" class="internal"> §</a></h4>
<p><code>gpasswd</code> group password命令是 Linux 系统中的一个命令行工具,用于管理用户组的密码和成员列表。管理员用户(如 root 用户)可以使用 <code>gpasswd</code> 命令来添加或删除用户组的成员,或者设置或删除用户组的密码。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 设置组密码</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">gpasswd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newgroup</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-a, --add user</code></td><td>将用户添加到组中。</td><td><code>sudo gpasswd -a john developers</code></td></tr><tr><td><code>-d, --delete user</code></td><td>从组中删除用户。</td><td><code>sudo gpasswd -d john developers</code></td></tr><tr><td><code>-r, --remove</code></td><td>删除组密码。</td><td><code>sudo gpasswd -r developers</code></td></tr><tr><td><code>-R, --restrict</code></td><td>禁用组密码,只有组管理员可以使用 <code>newgrp</code> 命令。</td><td><code>sudo gpasswd -R developers</code></td></tr><tr><td><code>-A, --administrators user,...</code></td><td>设置组管理员。</td><td><code>sudo gpasswd -A admin1,admin2 developers</code></td></tr><tr><td><code>-M, --members user,...</code></td><td>设置组成员,覆盖现有成员。</td><td><code>sudo gpasswd -M john,doe developers</code></td></tr></tbody></table>
<h4 id="groupmod">Groupmod<a aria-hidden="true" tabindex="-1" href="#groupmod" class="internal"> §</a></h4>
<p><code>groupmod</code> group modify命令是 Linux 系统中的一个命令行工具,用于修改已有用户组的属性,例如组 ID、组名称和组密码等。管理员用户如 root 用户)可以使用 <code>groupmod</code> 命令来更改用户组的属性。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 修改组名</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">groupmod</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-n</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newname</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">oldname</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-g, --gid GID</code></td><td>将组的 GID 设置为指定的值。</td><td><code>sudo groupmod -g 1001 newgroup</code></td></tr><tr><td><code>-n, --new-name NEW_GROUP</code></td><td>将组的名称更改为指定的名称。</td><td><code>sudo groupmod -n newgroup2 newgroup</code></td></tr><tr><td><code>-o, --non-unique</code></td><td>允许使用非唯一 GID 创建组。</td><td><code>sudo groupmod -o newgroup</code></td></tr><tr><td><code>-p, --password PASSWORD</code></td><td>将组密码设置为指定的密码。</td><td><code>sudo groupmod -p mypassword newgroup</code></td></tr></tbody></table>
<h3 id="删除-1">删除<a aria-hidden="true" tabindex="-1" href="#删除-1" class="internal"> §</a></h3>
<h4 id="groupdel">Groupdel<a aria-hidden="true" tabindex="-1" href="#groupdel" class="internal"> §</a></h4>
<p><code>groupdel</code> group delete是 Linux 系统中的一个命令行工具,用于删除一个用户组。删除用户组时,系统会自动将该组的所有成员从该组中删除,并将文件和目录中的组 ID 更改为其他组。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 删除一个用户组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">groupdel</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newgroup</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-f, --force</code></td><td>强制删除用户组,即使该组仍有成员。</td><td><code>sudo groupdel -f newgroup</code></td></tr><tr><td><code>-h, --help</code></td><td>显示命令帮助信息。</td><td><code>groupdel -h</code></td></tr><tr><td><code>-R, --root CHROOT_DIR</code></td><td>在指定的 chroot 环境中运行命令。</td><td><code>sudo groupdel --root /mnt/newroot newgroup</code></td></tr><tr><td><code>-v, --verbose</code></td><td>显示命令详细输出。</td><td><code>sudo groupdel -v newgroup</code></td></tr></tbody></table>
<h2 id="root-超级用户">Root 超级用户<a aria-hidden="true" tabindex="-1" href="#root-超级用户" class="internal"> §</a></h2>
<p>在 Linux 系统中root 是超级用户具有完全的系统管理权限。root 用户可以执行任何命令并访问系统中的所有文件和资源。在默认情况下root 用户的密码是空的,因此在安全性方面需要额外注意。</p>
<h3 id="su">Su<a aria-hidden="true" tabindex="-1" href="#su" class="internal"> §</a></h3>
<p><code>su</code>switch user命令是 Linux 系统中的一个命令行工具,它允许您在不注销当前用户的情况下切换到其他用户帐户。默认情况下,<code>su</code> 命令切换到超级用户帐户root</p>
<ul>
<li><strong>使用 <code>sudo</code> 代替 <code>su</code></strong>:在许多现代系统中,推荐使用 <code>sudo</code> 命令来代替 <code>su</code>,以提供更细粒度的权限控制和审计功能。</li>
<li><strong>登录环境</strong>:使用 <code>-l</code><code>-</code> 选项时,<code>su</code> 命令会模拟用户完整的登录过程,包括加载用户的 shell 配置文件(如 <code>.bash_profile</code><code>.profile</code> 等)。</li>
<li><strong>环境变量</strong>:默认情况下,<code>su</code> 命令会重置环境变量,以匹配目标用户的环境。使用 <code>-m</code><code>-p</code> 选项可以保留当前的环境变量。</li>
<li><strong>权限要求</strong>:切换到其他用户身份通常需要输入目标用户的密码。切换到 root 用户身份需要输入 root 用户的密码。</li>
<li><strong>安全性</strong>:尽量使用 <code>su</code> 命令时指定 <code>-</code> 选项,以确保切换到目标用户的完整环境,减少潜在的权限问题。</li>
</ul>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 默认切换 root</span></span>
<span data-line><span style="color:var(--shiki-token-function);">su</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 切换到 debian</span></span>
<span data-line><span style="color:var(--shiki-token-function);">su</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">debian</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-</code></td><td>切换到目标用户的登录环境,相当于 <code>-l</code> 选项。</td><td><code>su -</code></td></tr><tr><td><code>-l, --login</code></td><td>切换到目标用户的登录环境。</td><td><code>su -l john</code></td></tr><tr><td><code>-c, --command COMMAND</code></td><td>执行指定的命令,然后退出。</td><td><code>su -c 'ls /root'</code></td></tr><tr><td><code>-s, --shell SHELL</code></td><td>使用指定的 shell 而不是目标用户的默认 shell。</td><td><code>su -s /bin/bash john</code></td></tr><tr><td><code>-m, --preserve-environment</code></td><td>保留当前环境变量而不是重置它们。</td><td><code>su -m john</code></td></tr><tr><td><code>-p</code></td><td>保留当前环境变量(等同于 <code>-m</code> 选项)。</td><td><code>su -p john</code></td></tr><tr><td><code>-h, --help</code></td><td>显示帮助信息。</td><td><code>su -h</code></td></tr><tr><td><code>-v, --version</code></td><td>显示版本信息。</td><td><code>su -v</code></td></tr></tbody></table>
<h3 id="sudo">Sudo<a aria-hidden="true" tabindex="-1" href="#sudo" class="internal"> §</a></h3>
<p>在 Unix 和类 Unix 系统中,<code>sudo</code> 是一个强大的工具允许普通用户以超级用户root的权限来执行特定的命令或访问受限资源。<code>sudo</code> 命令的行为由一个配置文件定义,这个文件通常称为 <code>sudoers</code> 文件。</p>
<p><code>sudoers</code> 文件位于 <code>/etc/sudoers</code><code>/etc/sudoers.d</code> 目录中只有超级用户root有权限进行编辑。</p>
<ul>
<li><strong>谨慎编辑 <code>sudoers</code> 文件</strong>:对 <code>sudoers</code> 文件的修改应当谨慎进行,并且建议使用 <code>visudo</code> 命令来编辑,以确保语法正确并避免意外的访问限制。</li>
<li><strong>安全性</strong>:在使用 <code>sudo</code> 命令时,应确保只有可信任的用户和命令被授权,以防止潜在的安全漏洞。</li>
<li><strong>审计和记录</strong><code>sudo</code> 命令的使用会被记录在 <code>/var/log/auth.log</code> 文件中,管理员可以通过该日志进行审计和监控。</li>
</ul>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># Sudoers 文件示例</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 允许 `sudo` 组的成员以任何用户身份ALL:ALL执行任何命令ALL</span></span>
<span data-line><span style="color:var(--shiki-token-function);">%sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">ALL=</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string);">ALL:ALL</span><span style="color:var(--shiki-color-text);">) ALL</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 允许 `admin` 组的成员以任何用户身份ALL:ALL执行任何命令ALL</span></span>
<span data-line><span style="color:var(--shiki-token-function);">%admin</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">ALL=</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string);">ALL:ALL</span><span style="color:var(--shiki-color-text);">) ALL</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 允许 `root` 用户以任何用户身份ALL:ALL执行任何命令ALL</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">ALL=</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string);">ALL:ALL</span><span style="color:var(--shiki-color-text);">) ALL</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 允许 `sudo` 组的成员以任何用户身份ALL:ALL执行任何命令ALL并且无需输入密码NOPASSWD</span></span>
<span data-line><span style="color:var(--shiki-token-function);">%sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">ALL=</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string);">ALL:ALL</span><span style="color:var(--shiki-color-text);">) NOPASSWD: ALL</span></span></code></pre></div>
<h4 id="语法格式">语法格式<a aria-hidden="true" tabindex="-1" href="#语法格式" class="internal"> §</a></h4>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">user/group</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">hosts=</span><span style="color:var(--shiki-color-text);">(</span><span style="color:var(--shiki-token-string);">users:groups</span><span style="color:var(--shiki-color-text);">) commands</span></span></code></pre></div>
<table><thead><tr><th>项目</th><th>描述</th></tr></thead><tbody><tr><td><code>user/group</code></td><td>指定用户或用户组,可以使用用户名或组名。</td></tr><tr><td><code>hosts</code></td><td>指定可以使用 <code>sudo</code> 命令的主机列表可以是主机名、IP 地址或特殊的通配符。</td></tr><tr><td><code>users:groups</code></td><td>指定要执行命令的用户和组,以冒号分隔。</td></tr><tr><td><code>commands</code></td><td>指定允许执行的命令。</td></tr><tr><td><code>ALL</code></td><td>表示匹配所有主机、用户或命令。</td></tr><tr><td><code>NOPASSWD</code></td><td>表示无需输入密码。</td></tr></tbody></table>
<h4 id="使用-sudo-命令创建-sudo-用户">使用 <code>sudo</code> 命令创建 <code>sudo</code> 用户<a aria-hidden="true" tabindex="-1" href="#使用-sudo-命令创建-sudo-用户" class="internal"> §</a></h4>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 1. 创建用户</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">adduser</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">username</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 2. 将用户添加到 sudo 组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">usermod</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-aG</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">username</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 3. 检查用户是否已成功添加到 sudo 组</span></span>
<span data-line><span style="color:var(--shiki-token-function);">groups</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">username</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 4. 确认用户可以使用 sudo 命令</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-l</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-U</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">username</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-u, --user USER</code></td><td>指定要切换到的用户。</td><td><code>sudo -u user1 ls -l</code></td></tr><tr><td><code>-g, --group GROUP</code></td><td>指定要切换到的组。</td><td><code>sudo -g group1 ls -l</code></td></tr><tr><td><code>-k, --reset-timestamp</code></td><td>重置 <code>sudo</code> 命令的时间戳。</td><td><code>sudo -k</code></td></tr><tr><td><code>-v, --validate</code></td><td>验证 <code>sudo</code> 命令的权限,但不执行任何命令。</td><td><code>sudo -v</code></td></tr><tr><td><code>-l, --list [COMMAND]</code></td><td>显示 <code>sudo</code> 命令当前用户的授权信息,或显示指定命令的授权信息。</td><td><code>sudo -l</code><code>sudo -l /usr/bin/apt-get</code></td></tr><tr><td><code>-h, --help</code></td><td>显示 <code>sudo</code> 命令的帮助信息。</td><td><code>sudo -h</code></td></tr><tr><td><code>-V, --version</code></td><td>显示 <code>sudo</code> 命令的版本信息。</td><td><code>sudo -V</code></td></tr></tbody></table>
<h3 id="newusers">Newusers<a aria-hidden="true" tabindex="-1" href="#newusers" class="internal"> §</a></h3>
<p><code>newusers</code> 是一个 Linux 系统命令,用于批量创建新的用户账号。该命令可以从指定的文件中读取一组用户信息,并自动创建这些用户账号,设置相应的密码、主目录和 shell。</p>
<h4 id="语法格式-1">语法格式<a aria-hidden="true" tabindex="-1" href="#语法格式-1" class="internal"> §</a></h4>
<p><code>newusers</code> 命令从指定的文件中读取用户信息,每行包括以下字段,字段间用冒号分隔:</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="text" data-theme="default"><code data-language="text" data-theme="default"><span data-line><span style="color:var(--shiki-color-text);">用户名:密码:用户ID:主组ID:注释字段:主目录:默认shell</span></span></code></pre></div>
<ul>
<li>用户名:新用户的登录名。</li>
<li>密码:用户的密码,通常以加密格式存储。</li>
<li>用户 IDUID新用户的用户标识符。</li>
<li>主组 IDGID新用户的主组标识符。</li>
<li>注释字段:用户的全名或其他描述信息。</li>
<li>主目录:用户的主目录路径。</li>
<li>默认 shell用户登录时的默认 shell。</li>
</ul>
<h4 id="使用-newusers-批量创建">使用 Newusers 批量创建<a aria-hidden="true" tabindex="-1" href="#使用-newusers-批量创建" class="internal"> §</a></h4>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">--------------------</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">user.txt</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">--------------------</span></span>
<span data-line><span style="color:var(--shiki-token-function);">user1:x:1001:1001:User</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">One:/home/user1:/bin/bash</span></span>
<span data-line><span style="color:var(--shiki-token-function);">user2:x:1002:1002:User</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Two:/home/user2:/bin/bash</span></span>
<span data-line><span style="color:var(--shiki-token-function);">user3:x:1003:1003:User</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Three:/home/user3:/bin/bash</span></span>
<span data-line><span style="color:var(--shiki-token-function);">--------------------------------------------------</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 读取 user.txt 批量创建用户</span></span>
<span data-line><span style="color:var(--shiki-token-function);">newusers</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">user.txt</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-u, --uid</code></td><td>指定起始用户 ID</td><td><code>newusers -u 1000 users.txt</code></td></tr><tr><td><code>-g, --gid</code></td><td>指定起始组 ID</td><td><code>newusers -g 1000 users.txt</code></td></tr><tr><td><code>-c, --comment</code></td><td>指定用户的注释信息</td><td><code>newusers -c &quot;User One&quot; users.txt</code>, <code>newusers --comment &quot;User One&quot; users.txt</code></td></tr><tr><td><code>-s, --shell</code></td><td>指定新用户的默认 shell</td><td><code>newusers -s /bin/bash users.txt</code>, <code>newusers --shell /bin/bash users.txt</code></td></tr><tr><td><code>-H, --no-create-home</code></td><td>禁止创建用户主目录</td><td><code>newusers -H users.txt</code>, <code>newusers --no-create-home users.txt</code></td></tr><tr><td><code>-N, --no-user-group</code></td><td>禁止创建与用户名同名的主组</td><td><code>newusers -N users.txt</code>, <code>newusers --no-user-group users.txt</code></td></tr></tbody></table>
<h3 id="chpasswd">Chpasswd<a aria-hidden="true" tabindex="-1" href="#chpasswd" class="internal"> §</a></h3>
<p><code>chpasswd</code> 命令用于批量修改用户的密码,可以一次性修改多个用户的密码,而不需要逐个输入密码。它可以从标准输入、文件或命令行参数中读取用户密码信息,并将其应用于指定的用户账户。</p>
<ul>
<li><strong>文件安全</strong>:文件中包含敏感信息(用户密码),应妥善保管并确保其权限设置正确,以防止未经授权的访问。</li>
<li><strong>加密格式</strong>:如果密码已加密,确保使用 <code>-e</code> 选项。否则,密码将被视为明文并重新加密。</li>
<li><strong>权限要求</strong><code>chpasswd</code> 命令需要管理员权限,通常通过 <code>sudo</code> 命令运行。</li>
<li><strong>密码复杂性</strong>:在更新密码时,建议使用复杂密码,包括大小写字母、数字和特殊字符,以提高账户的安全性。</li>
</ul>
<h4 id="语法格式-2">语法格式<a aria-hidden="true" tabindex="-1" href="#语法格式-2" class="internal"> §</a></h4>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="text" data-theme="default"><code data-language="text" data-theme="default"><span data-line><span style="color:var(--shiki-color-text);">user1:password1</span></span>
<span data-line><span style="color:var(--shiki-color-text);">user2:password2</span></span></code></pre></div>
<h4 id="使用-chpasswd-批量更改">使用 Chpasswd 批量更改<a aria-hidden="true" tabindex="-1" href="#使用-chpasswd-批量更改" class="internal"> §</a></h4>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">--------------------</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">users.txt</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">--------------------</span></span>
<span data-line><span style="color:var(--shiki-token-function);">user1:password1</span></span>
<span data-line><span style="color:var(--shiki-token-function);">user2:password2</span></span>
<span data-line><span style="color:var(--shiki-token-function);">--------------------------------------------------</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 将 user1 的密码修改为 password1</span></span>
<span data-line><span style="color:var(--shiki-token-function);">echo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string-expression);">'user1:password1'</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">|</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">chpasswd</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-comment);"># 批量更新,使用 md5 加密方式</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">chpasswd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-m</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">&lt;</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">users.txt</span></span></code></pre></div>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-e, --encrypted</code></td><td>指定密码已加密</td><td><code>chpasswd -e &lt; users.txt</code></td></tr><tr><td><code>-h, --help</code></td><td>显示帮助信息并退出</td><td><code>chpasswd --help</code></td></tr><tr><td><code>-m, --md5</code></td><td>指定密码以 MD5 格式加密</td><td><code>chpasswd -m &lt; users.txt</code></td></tr><tr><td><code>-c, --crypt-method</code></td><td>指定密码加密方法</td><td><code>chpasswd --crypt-method SHA512 &lt; users.txt</code></td></tr><tr><td><code>-R, --root</code></td><td>以 root 权限运行命令</td><td><code>sudo chpasswd --root</code></td></tr><tr><td><code>-u, --update</code></td><td>仅更新现有用户的密码</td><td><code>chpasswd -u &lt; users.txt</code></td></tr><tr><td><code>-I, --inactive</code></td><td>指定密码失效时间,单位为天</td><td><code>chpasswd --inactive 7 &lt; users.txt</code></td></tr></tbody></table>
<h3 id="pwckgrpck">pwck、grpck<a aria-hidden="true" tabindex="-1" href="#pwckgrpck" class="internal"> §</a></h3>
<p><code>pwck</code>Password Check<code>grpck</code>Group Check命令是 Linux 系统中用于检查 <code>/etc/passwd</code><code>/etc/shadow</code><code>/etc/group</code> 等文件的格式和完整性的工具。这些命令可以帮助系统管理员查找和修复这些文件中的错误,以确保系统的安全性和稳定性。</p>
<p>在执行 <code>pwck</code><code>grpck</code> 之前,建议备份 <code>/etc/passwd</code><code>/etc/shadow</code><code>/etc/group</code><code>/etc/gshadow</code> 文件,以防止误操作导致数据丢失。</p>
<p><strong>用户配置文件:</strong></p>
<ul>
<li><strong>用户配置文件</strong><code>/etc/passwd</code> 文件是 Linux 系统中存储用户信息的文件之一,包含每个用户的用户名、用户 ID、主目录、登录 shell 等信息。</li>
<li><strong>用户密码配置文件</strong><code>/etc/shadow</code> 文件是 Linux 系统中存储用户密码信息的文件之一,包含每个用户的密码哈希值、最后一次更改密码的日期等信息。</li>
<li><strong>用户组配置文件</strong><code>/etc/group</code> 文件是 Linux 系统中存储用户组信息的文件之一,包含每个用户组的名称、组 ID 和组成员列表等信息。</li>
<li><strong>用户组密码配置文件</strong><code>/etc/gshadow</code> 文件是 Linux 系统中存储用户组密码信息的文件之一,包含每个用户组的密码哈希值、管理员列表和成员列表等信息。</li>
<li><strong>默认配置文件</strong><code>/etc/login.defs</code> 文件是 Linux 系统中存储默认登录选项的文件之一,包含默认的密码长度、最大尝试登录次数等信息。</li>
<li><strong>配置文件</strong><code>/etc/adduser.conf</code> 文件是 Linux 系统中存储新用户默认配置选项的文件之一,包含新用户的默认主目录、默认 shell 等信息。</li>
</ul>
<table><thead><tr><th>选项</th><th>描述</th><th>示例</th></tr></thead><tbody><tr><td><code>-r, --root DIR</code></td><td>指定要检查的根目录</td><td><code>pwck/grpck -r /mnt</code></td></tr><tr><td><code>-s, --silent</code></td><td>安静模式,只输出错误信息</td><td><code>pwck/grpck -s /etc/passwd /etc/shadow</code></td></tr><tr><td><code>-q, --quiet</code></td><td>安静模式,不输出信息</td><td><code>pwck/grpck -q /etc/passwd /etc/group</code></td></tr><tr><td><code>-n, --nocheck</code></td><td>不检查用户主目录和组文件</td><td><code>pwck/grpck -n /etc/passwd /etc/shadow</code></td></tr></tbody></table>
<h3 id="pwconvpwunconvgrpconvgrpunconv">pwconv、pwunconv、grpconv、grpunconv<a aria-hidden="true" tabindex="-1" href="#pwconvpwunconvgrpconvgrpunconv" class="internal"> §</a></h3>
<p><code>pwconv</code>Password Conversion<code>pwunconv</code>Password unConversion<code>grpconv</code>Group Conversion<code>grpunconv</code>Group unConversion 命令是 Linux 系统中的工具,用于转换密码文件和组文件的格式。它们帮助系统管理员将 <code>/etc/passwd</code><code>/etc/shadow</code><code>/etc/group</code> 等文件的格式进行转换或恢复,从而提高系统的安全性和管理效率。</p>
<p><strong>作用和用途:</strong></p>
<ul>
<li><strong><code>pwconv</code> 命令</strong>:将 <code>/etc/passwd</code><code>/etc/shadow</code> 文件的格式从标准格式(包括用户名、密码和 UID 等信息)转换为 shadow 格式(将密码单独存储在 <code>/etc/shadow</code> 文件中)。</li>
<li><strong><code>pwunconv</code> 命令</strong>:将 <code>/etc/passwd</code><code>/etc/shadow</code> 文件的格式从 shadow 格式转换为标准格式。</li>
<li><strong><code>grpconv</code> 命令</strong>:将 <code>/etc/group</code> 文件的格式从标准格式(包括组名、组密码和 GID 等信息)转换为 gshadow 格式(将组密码单独存储在 <code>/etc/gshadow</code> 文件中)。</li>
<li><strong><code>grpunconv</code> 命令</strong>:将 <code>/etc/group</code> 文件的格式从 gshadow 格式转换为标准格式。</li>
</ul>
<p>这些工具的用途包括但不限于:</p>
<ul>
<li><strong>提高系统安全性</strong>:使用 shadow 格式将用户密码单独存储在 <code>/etc/shadow</code> 文件中,可以防止未经授权的用户访问密码信息,提高系统安全性。</li>
<li><strong>管理用户和组的身份验证</strong>:通过转换和恢复密码和组文件格式,可以更轻松地管理用户和组的身份验证信息,例如更改密码、添加或删除用户和组等操作。</li>
</ul>
<h2 id="其他">其他<a aria-hidden="true" tabindex="-1" href="#其他" class="internal"> §</a></h2>
<h3 id="w">W<a aria-hidden="true" tabindex="-1" href="#w" class="internal"> §</a></h3>
<p><code>w</code> 命令在 Unix 和 Unix 类操作系统中用于显示有关系统活动的信息。这个命令可以显示当前系统中登录的用户、他们所做的事情、从哪里登录、他们登录的时间以及系统负载等。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">w</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">14:16:51</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">up</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">22</span><span style="color:var(--shiki-token-string);">:16,</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">2</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">users,</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">load</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">average:</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.00</span><span style="color:var(--shiki-token-string);">,</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.00</span><span style="color:var(--shiki-token-string);">,</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.00</span></span>
<span data-line><span style="color:var(--shiki-token-function);">USER</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">TTY</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">来自</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">LOGIN@</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">IDLE</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">JCPU</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">PCPU</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">WHAT</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">tty1</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">二16</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">22</span><span style="color:var(--shiki-token-string);">:15m</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.16</span><span style="color:var(--shiki-token-string);">s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.05</span><span style="color:var(--shiki-token-string);">s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-bash</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">13</span><span style="color:var(--shiki-token-string);">:55</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.00</span><span style="color:var(--shiki-token-string);">s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.51</span><span style="color:var(--shiki-token-string);">s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">0.13</span><span style="color:var(--shiki-token-string);">s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">sshd:</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">sevenwate</span><span style="color:var(--shiki-color-text);"> [priv]</span></span></code></pre></div>
<h3 id="id">Id<a aria-hidden="true" tabindex="-1" href="#id" class="internal"> §</a></h3>
<p><code>id</code> 命令用于显示用户和用户组的标识信息。它可以用于查看当前用户或指定用户的 UID用户标识符、GID组标识符和所属用户组的名称。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">sevenwate@LinuxTest:~$</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">id</span></span>
<span data-line><span style="color:var(--shiki-token-function);">用户id</span><span style="color:var(--shiki-color-text);">=1000(sevenwate) 组id=1000(</span><span style="color:var(--shiki-token-function);">sevenwate</span><span style="color:var(--shiki-color-text);">) 组=1000(</span><span style="color:var(--shiki-token-function);">sevenwate</span><span style="color:var(--shiki-color-text);">),24(</span><span style="color:var(--shiki-token-function);">cdrom</span><span style="color:var(--shiki-color-text);">),25(</span><span style="color:var(--shiki-token-function);">floppy</span><span style="color:var(--shiki-color-text);">),27(</span><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);">),29(</span><span style="color:var(--shiki-token-function);">audio</span><span style="color:var(--shiki-color-text);">),30(</span><span style="color:var(--shiki-token-function);">dip</span><span style="color:var(--shiki-color-text);">),44(</span><span style="color:var(--shiki-token-function);">video</span><span style="color:var(--shiki-color-text);">),46(</span><span style="color:var(--shiki-token-function);">plugdev</span><span style="color:var(--shiki-color-text);">),108(</span><span style="color:var(--shiki-token-function);">netdev</span><span style="color:var(--shiki-color-text);">),1001(</span><span style="color:var(--shiki-token-function);">grpdemo</span><span style="color:var(--shiki-color-text);">)</span></span></code></pre></div>
<h3 id="whoami">Whoami<a aria-hidden="true" tabindex="-1" href="#whoami" class="internal"> §</a></h3>
<p><code>whoami</code> 命令用于显示当前登录用户的用户名。它是一个非常简单的命令,通常用于 shell 脚本和命令行中,以便在需要当前用户的用户名时快速获取它。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">sevenwate@LinuxTest:~$</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">whoami</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwate</span></span></code></pre></div>
<h3 id="last">Last<a aria-hidden="true" tabindex="-1" href="#last" class="internal"> §</a></h3>
<p><code>last</code> 命令在 Linux 中用于显示系统的登录记录。这个命令列出了系统登录和启动的详细信息,如登录用户、登录的 IP 地址、登录时间以及登录持续的时间。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">last</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Wed</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">13</span><span style="color:var(--shiki-token-string);">:55</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">still</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">logged</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">in</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/1</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Wed</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">11</span><span style="color:var(--shiki-token-string);">:07</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">11</span><span style="color:var(--shiki-token-string);">:21</span><span style="color:var(--shiki-color-text);"> (00:14)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Wed</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">11</span><span style="color:var(--shiki-token-string);">:07</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">13</span><span style="color:var(--shiki-token-string);">:00</span><span style="color:var(--shiki-color-text);"> (01:53)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Wed</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">10</span><span style="color:var(--shiki-token-string);">:55</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">11</span><span style="color:var(--shiki-token-string);">:04</span><span style="color:var(--shiki-color-text);"> (00:09)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Wed</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">10</span><span style="color:var(--shiki-token-string);">:49</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">10</span><span style="color:var(--shiki-token-string);">:51</span><span style="color:var(--shiki-color-text);"> (00:02)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">17</span><span style="color:var(--shiki-token-string);">:03</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">17</span><span style="color:var(--shiki-token-string);">:35</span><span style="color:var(--shiki-color-text);"> (00:32)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:03</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:53</span><span style="color:var(--shiki-color-text);"> (00:50)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/2</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> (00:00)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/1</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> (00:00)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:02</span><span style="color:var(--shiki-color-text);"> (00:00)</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">tty1</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:01</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">still</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">logged</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">in</span></span>
<span data-line><span style="color:var(--shiki-token-function);">reboot</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">system</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">boot</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">5.10</span><span style="color:var(--shiki-token-string);">.0-23-amd64</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:00</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">still</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">running</span></span>
<span data-line> </span>
<span data-line><span style="color:var(--shiki-token-function);">wtmp</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">begins</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">Tue</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">May</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">30</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">16</span><span style="color:var(--shiki-token-string);">:00:47</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">2023</span></span></code></pre></div>
<h3 id="lastlog">Lastlog<a aria-hidden="true" tabindex="-1" href="#lastlog" class="internal"> §</a></h3>
<p><code>lastlog</code> 命令用于查看所有用户最后一次登录的时间和登录的终端。这个命令检查 <code>/var/log/lastlog</code> 文件以确定每个用户的最后一次登录信息。此命令的输出包含用户名、最后登录的端口和最后登录的时间。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">lastlog</span></span>
<span data-line><span style="color:var(--shiki-token-function);">用户名</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">端口</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">来自</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">最后登录时间</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">**从未登录过**</span></span>
<span data-line><span style="color:var(--shiki-token-function);">……</span></span>
<span data-line><span style="color:var(--shiki-token-function);">sevenwate</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">pts/0</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">172.17</span><span style="color:var(--shiki-token-string);">.0.100</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);"></span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">5</span><span style="color:var(--shiki-token-string);"></span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">31</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">13</span><span style="color:var(--shiki-token-string);">:55:15</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">+0800</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-constant);">2023</span></span>
<span data-line><span style="color:var(--shiki-token-function);">newuser</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">**从未登录过**</span></span></code></pre></div>
<h2 id="创建用户示例">创建用户示例<a aria-hidden="true" tabindex="-1" href="#创建用户示例" class="internal"> §</a></h2>
<pre><code class="mermaid">graph LR
SwitchToRoot[切换到 root 用户]
SwitchToRoot --> CreateUser[创建新用户]
CreateUser --> SetPassword[设置新用户的密码]
SetPassword --> ChangeUserInfo{更新新用户信息?}
ChangeUserInfo -- Yes --> RunChfn[chfn]
ChangeUserInfo -- No --> AssignHomeDir{指定用户目录?}
RunChfn --> AssignHomeDir
AssignHomeDir -- Yes --> RunUseraddWithD[useradd -d]
AssignHomeDir -- No --> SetLoginShell{指定登录 shell?}
RunUseraddWithD --> SetLoginShell
SetLoginShell -- Yes --> RunUseraddWithS[useradd -s]
SetLoginShell -- No --> AddToExtraGroups{添加到额外的组?}
RunUseraddWithS --> AddToExtraGroups
AddToExtraGroups -- Yes --> RunUsermod[usermod -aG]
AddToExtraGroups -- No --> End(结束)
RunUsermod --> End
</code></pre>
<ol>
<li>
<p><strong>打开终端</strong>:快捷键 Ctrl+Alt+T 打开终端。</p>
</li>
<li>
<p><strong>切换到 root 用户</strong>:使用 <code>su -</code> 命令切换到 root 用户。</p>
</li>
<li>
<p><strong>使用 useradd 命令创建新用户</strong>:使用 <code>useradd</code> 命令和新用户的用户名来创建新用户。例如创建一个名为 <code>newuser</code> 的新用户:</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">useradd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span></code></pre></div>
</li>
<li>
<p><strong>设置新用户的密码</strong>:使用 <code>passwd</code> 命令和新用户的用户名来设置密码。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">passwd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-function);">新的</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">密码:</span></span>
<span data-line><span style="color:var(--shiki-token-function);">重新输入新的</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">密码:</span></span>
<span data-line><span style="color:var(--shiki-token-function);">passwd已成功更新密码</span></span></code></pre></div>
</li>
<li>
<p><strong>更改新用户的信息</strong>(可选):可以使用 <code>chfn</code> 命令更改新用户的全名、房间号、工作电话和家庭电话。</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">chfn</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-function);">正在改变</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">的用户信息</span></span>
<span data-line><span style="color:var(--shiki-token-function);">请输入新值,或直接敲回车键以使用默认值</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">全名</span><span style="color:var(--shiki-color-text);"> []: newuser</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">房间号码</span><span style="color:var(--shiki-color-text);"> []: 888</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">工作电话</span><span style="color:var(--shiki-color-text);"> []: 18688888888</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">家庭电话</span><span style="color:var(--shiki-color-text);"> []: 0371</span></span>
<span data-line><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">其它</span><span style="color:var(--shiki-color-text);"> []: </span></span></code></pre></div>
</li>
<li>
<p><strong>给新用户分配家目录</strong>(可选):默认情况下 <code>useradd</code> 命令会为新用户创建一个在 <code>/home</code> 下的家目录。<code>usermod</code> 可以使用 <code>-d</code> 选项为新用户指定一个不同的家目录。例如,指定 <code>newuser</code> 的家目录是 <code>/opt/newuser</code></p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">usermod</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-d</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/opt/newuser</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-m</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span></code></pre></div>
</li>
<li>
<p><strong>指定不同的登录 shell</strong>(可选):<code>usermod</code> 可以使用 <code>-s</code> 选项指定一个不同的登录 shell。例如为 <code>newuser</code> 指定 <code>/bin/sbin/noligin</code> 作为登录 shell你可以运行</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-comment);"># 使用 usermod 命令</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">usermod</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/usr/bin/nologin</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-comment);"># 使用 chsh 命令</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">chsh</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-s</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/bin/bash</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span></code></pre></div>
</li>
<li>
<p><strong>将新用户添加到一个或多个额外的组</strong>(可选):可以使用 <code>usermod</code> 命令的 <code>-G</code> 选项将新用户添加到一个或多个额外的组。例如将 <code>newuser</code> 添加到 <code>sudo</code><code>users</code> 组,你可以运行:</p>
<div data-rehype-pretty-code-fragment><pre style="background-color:var(--shiki-color-background);" tabindex="0" data-language="shell" data-theme="default"><code data-language="shell" data-theme="default"><span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">usermod</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">-aG</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">sudo,users</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">id</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-function);">用户id</span><span style="color:var(--shiki-color-text);">=1003(newuser) 组id=1003(</span><span style="color:var(--shiki-token-function);">newuser</span><span style="color:var(--shiki-color-text);">) 组=1003(</span><span style="color:var(--shiki-token-function);">newuser</span><span style="color:var(--shiki-color-text);">),27(</span><span style="color:var(--shiki-token-function);">sudo</span><span style="color:var(--shiki-color-text);">),100(</span><span style="color:var(--shiki-token-function);">users</span><span style="color:var(--shiki-color-text);">)</span></span>
<span data-line><span style="color:var(--shiki-token-comment);"># 用户最终信息</span></span>
<span data-line><span style="color:var(--shiki-token-function);">root@LinuxTest:~#</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">cat</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">/etc/passwd</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-keyword);">|</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-function);">grep</span><span style="color:var(--shiki-color-text);"> </span><span style="color:var(--shiki-token-string);">newuser</span></span>
<span data-line><span style="color:var(--shiki-token-function);">newuser:x:1003:1003:newuser,888-1,18688888888,0371-88888888:/opt/newuser2:/usr/bin/nologin</span></span></code></pre></div>
</li>
</ol></article></div><div class="right sidebar"><div class="graph "><h3>Graph View</h3><div class="graph-outer"><div id="graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:1,&quot;scale&quot;:1.1,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></div><svg version="1.1" id="global-graph-icon" xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 55 55" fill="currentColor" xmlSpace="preserve"><path d="M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17
s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4
c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562
C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829
c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91
v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4
s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665
C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2
S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4
s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2
s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z"></path></svg></div><div id="global-graph-outer"><div id="global-graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:-1,&quot;scale&quot;:0.9,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></div></div></div><div class="toc desktop-only"><button type="button" id="toc" class><h3>Table of Contents</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="toc-content"><ul class="overflow"><li class="depth-0"><a href="#概述" data-for="概述">概述</a></li><li class="depth-1"><a href="#设计原则" data-for="设计原则">设计原则</a></li><li class="depth-1"><a href="#实现机制" data-for="实现机制">实现机制</a></li><li class="depth-1"><a href="#权限管理" data-for="权限管理">权限管理</a></li><li class="depth-1"><a href="#用户和权限的配置文件" data-for="用户和权限的配置文件">用户和权限的配置文件</a></li><li class="depth-1"><a href="#安全性建议" data-for="安全性建议">安全性建议</a></li><li class="depth-0"><a href="#用户" data-for="用户">用户</a></li><li class="depth-1"><a href="#创建" data-for="创建">创建</a></li><li class="depth-1"><a href="#管理" data-for="管理">管理</a></li><li class="depth-1"><a href="#删除" data-for="删除">删除</a></li><li class="depth-0"><a href="#用户组" data-for="用户组">用户组</a></li><li class="depth-1"><a href="#创建-1" data-for="创建-1">创建</a></li><li class="depth-1"><a href="#管理-1" data-for="管理-1">管理</a></li><li class="depth-1"><a href="#删除-1" data-for="删除-1">删除</a></li><li class="depth-0"><a href="#root-超级用户" data-for="root-超级用户">Root 超级用户</a></li><li class="depth-1"><a href="#su" data-for="su">Su</a></li><li class="depth-1"><a href="#sudo" data-for="sudo">Sudo</a></li><li class="depth-1"><a href="#newusers" data-for="newusers">Newusers</a></li><li class="depth-1"><a href="#chpasswd" data-for="chpasswd">Chpasswd</a></li><li class="depth-1"><a href="#pwckgrpck" data-for="pwckgrpck">pwck、grpck</a></li><li class="depth-1"><a href="#pwconvpwunconvgrpconvgrpunconv" data-for="pwconvpwunconvgrpconvgrpunconv">pwconv、pwunconv、grpconv、grpunconv</a></li><li class="depth-0"><a href="#其他" data-for="其他">其他</a></li><li class="depth-1"><a href="#w" data-for="w">W</a></li><li class="depth-1"><a href="#id" data-for="id">Id</a></li><li class="depth-1"><a href="#whoami" data-for="whoami">Whoami</a></li><li class="depth-1"><a href="#last" data-for="last">Last</a></li><li class="depth-1"><a href="#lastlog" data-for="lastlog">Lastlog</a></li><li class="depth-0"><a href="#创建用户示例" data-for="创建用户示例">创建用户示例</a></li></ul></div></div><div class="backlinks "><h3>Backlinks</h3><ul class="overflow"><li>No backlinks found</li></ul></div><div class="explorer mobile-only"><button type="button" id="explorer" data-behavior="collapse" data-collapsed="collapsed" data-savestate="true" data-tree="[{&quot;path&quot;:&quot;Journal&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Journal/2024&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Journal/2024/W33&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Obsidian&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Obsidian/Templates&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Personal&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Personal/Blog&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Personal/Blog/2018&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;Personal/Blog/2020&quot;,&quot;collapsed&quot;:
function toggleCallout() {
const outerBlock = this.parentElement;
outerBlock.classList.toggle(`is-collapsed`);
const collapsed = outerBlock.classList.contains(`is-collapsed`);
const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight;
outerBlock.style.maxHeight = height + `px`;
let current = outerBlock;
let parent = outerBlock.parentElement;
while (parent) {
if (!parent.classList.contains(`callout`)) {
return;
}
const collapsed2 = parent.classList.contains(`is-collapsed`);
const height2 = collapsed2 ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight;
parent.style.maxHeight = height2 + `px`;
current = parent;
parent = parent.parentElement;
}
}
function setupCallout() {
const collapsible = document.getElementsByClassName(
`callout is-collapsible`
);
for (const div of collapsible) {
const title = div.firstElementChild;
if (title) {
title.removeEventListener(`click`, toggleCallout);
title.addEventListener(`click`, toggleCallout);
const collapsed = div.classList.contains(`is-collapsed`);
const height = collapsed ? title.scrollHeight : div.scrollHeight;
div.style.maxHeight = height + `px`;
}
}
}
document.addEventListener(`nav`, setupCallout);
window.addEventListener(`resize`, setupCallout);
</script><script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark'
mermaid.initialize({
startOnLoad: false,
securityLevel: 'loose',
theme: darkMode ? 'dark' : 'default'
});
document.addEventListener('nav', async () => {
await mermaid.run({
querySelector: '.mermaid'
})
});
</script><script src="https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js" type="application/javascript"></script><script src="../../../../postscript.js" type="module"></script></html>