贡嘎小万 發表於 2024-6-7 00:00:00

linux 详解useradd 命令基本用法

<p><strong>linux 详解useradd 命令基本用法</strong></p><p><strong>概要:</strong></p><p>
        在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观。以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作。本文主要描述笔者在学习使用 useradd 命令时的一些测试结果。</p><p>
        说明:本文中的所有试验都是在 Ubuntu14.04 上完成。</p><p><strong>功能</strong></p><p>
        在Linux中 useradd 命令用来创建或更新用户信息。</p><p>
        useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的发行版中建议管理员使用 adduser 命令。其实 adduser 命令只是一个调用了 useradd 命令的脚本文件。</p><p>
        本文将详细分析群组和家目录相关的选项。并且以实例的方式介绍常用的 useradd 命令写法。</p><p><strong>语法和基本选项</strong></p><p>
        注意:本文并不是一个完整的文档,所以仅列出部分常用的选项进行说明。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_292934"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div><div class="line number2 index1 alt1">
                                                                2</div><div class="line number3 index2 alt2">
                                                                3</div><div class="line number4 index3 alt1">
                                                                4</div><div class="line number5 index4 alt2">
                                                                5</div><div class="line number6 index5 alt1">
                                                                6</div><div class="line number7 index6 alt2">
                                                                7</div><div class="line number8 index7 alt1">
                                                                8</div><div class="line number9 index8 alt2">
                                                                9</div><div class="line number10 index9 alt1">
                                                                10</div><div class="line number11 index10 alt2">
                                                                11</div><div class="line number12 index11 alt1">
                                                                12</div><div class="line number13 index12 alt2">
                                                                13</div><div class="line number14 index13 alt1">
                                                                14</div><div class="line number15 index14 alt2">
                                                                15</div><div class="line number16 index15 alt1">
                                                                16</div><div class="line number17 index16 alt2">
                                                                17</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">useradd</code> <code class="bash plain"> username</code></div><div class="line number2 index1 alt1">
                                                                        &nbsp;</div><div class="line number3 index2 alt2"><code class="bash plain">:</code></div><div class="line number4 index3 alt1">
                                                                        &nbsp;</div><div class="line number5 index4 alt2"><code class="bash plain">-d&lt;登入目录&gt; 指定用户登入时的目录。<!--登入目录--></code></div><div class="line number6 index5 alt1">
                                                                        &nbsp;</div><div class="line number7 index6 alt2"><code class="bash plain">-g&lt;群组&gt; 初始群组。<!--群组--></code></div><div class="line number8 index7 alt1">
                                                                        &nbsp;</div><div class="line number9 index8 alt2"><code class="bash plain">-G&lt;群组&gt; 非初始群组。<!--群组--></code></div><div class="line number10 index9 alt1">
                                                                        &nbsp;</div><div class="line number11 index10 alt2"><code class="bash plain">-m 自动创建用户的家目录。</code></div><div class="line number12 index11 alt1">
                                                                        &nbsp;</div><div class="line number13 index12 alt2"><code class="bash plain">-M 不要创建用户的家目录。</code></div><div class="line number14 index13 alt1">
                                                                        &nbsp;</div><div class="line number15 index14 alt2"><code class="bash plain">-N 不要创建以用户名称为名的群组。</code></div><div class="line number16 index15 alt1">
                                                                        &nbsp;</div><div class="line number17 index16 alt2"><code class="bash plain">-s 指定用户登入后所使用的shell。</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p><strong>细说用户组</strong></p><p>
        首先我们要搞清楚,什么是初始群组?简单来说在 /etc/passwd 文件中,每行的第四个字段指定的就是用户的初始群组。用户登录后立即就拥有了初始群组中的权限。</p><p>
        下面我们通过不同的命令来查看群组选项的用法:</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_231396"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">tester1</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        没有使用任何群组相关的参数,默认在创建用户 tester1 的同时会创建一个同名的群组。用户 tester1 的初始群组就是这个新建的群组。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_809548"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">tester2 -N</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        这次我们使用了 -N 选项,即不要生成与用户同名的群组。查看下 /etc/passwd 文件,发现 tester2 用户的初始群组ID是100。这个100是哪来的?有ID为100的群组吗?其实100作为 -N 的默认值是写在配置文件中的。不管有没有ID为100的群组,都是这个值。当然我们也可以通过修改配置文件来改变这个默认值!</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_411515"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">tester3 -g </code><code class="bash functions">sudo</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        sudo 是一个非常有权势的群组,我决定把 tester3 加入到这个群组。好,现在去查看一下 /etc/passwd 和 /etc/group 文件,看看有没有新的群组被创建? tester3 的初始群组又是谁?这次没有创建与 tester3 同名的群组。用户 tester3 的初始群组变成了 sudo。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_235316"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">tester4 -G </code><code class="bash functions">sudo</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        和上一条命令相比我们只是把小写的g替换成了大写的G。但结果可相差太多了,请您一定要好好的检查 /etc/passwd 和 /etc/group 文件。因为这次不仅创建了群组 tester4,它还是用户 tester4 的初始群组。和tester1 的唯一不同是 tester4 被加入了 sudo 群组。</p><p>
        在实际的使用中,tester3 和 tester4 的场景都是比较常见的,需要根据实际情况进行区分。</p><p><strong>细说家目录</strong></p><p>
        Useradd 命令对用户家目录的处理让人困惑,下面我们将通过实验来了解家目录相关的不同选项的使用方法:</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_997145"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">tester1</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        让我们重新看看创建用户 tester1 这条命令。它不会为用户 tester1 创建名为 tester1 的目录作为家目录,但是我们打开 /etc/passwd 文件,发现 tester1 的记录中居然包含了家目录 /home/tester1。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_340358"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">tester1:x:1005:1005::</code><code class="bash plain">/home/tester1</code><code class="bash plain">:</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        这让人不可思议,但这条命令确实是这么实现的。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_322089"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-m tester5</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        若要在创建用户的同时创建用户的家目录,必须指定 -m 选项。</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_792444"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-d </code><code class="bash plain">/home/abc</code> <code class="bash plain">tester6</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        我们希望自己指定家目录,此时不生成目录 abc</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_481861"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-d </code><code class="bash plain">/home/abcd</code> <code class="bash plain">-m tester7</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        此时生成目录 abcd,并且目录下默认存在文件</p><p><strong>常见用例</strong></p><p>
        Case 1: 创建一个带有家目录并且可以登录 bash 的用户</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_298798"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-m -s </code><code class="bash plain">/bin/bash</code> <code class="bash plain">tester1</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        Case 2: 指定创建用户家目录的路径</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_333058"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-m -d </code><code class="bash plain">/home/xxx</code> <code class="bash plain">tester2</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        /home/xxx目录会被创建。</p><p>
        Case 3: 创建一个没有家目录且不能登录的用户</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_771992"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-s </code><code class="bash plain">/sbin/nologin</code> <code class="bash plain">tester3</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        Case 4: 创建时把用户加入不同的用户组</p><div class="jb51code"><div><div class="syntaxhighlighterbash" id="highlighter_614033"><div class="toolbar">?</div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr class="firstRow"><td class="gutter"><div class="line number1 index0 alt2">
                                                                1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash functions">useradd</code> <code class="bash plain">-m -G xxx,</code><code class="bash functions">sudo</code> <code class="bash plain">tester4</code></div></div></td></tr></tbody></table></div></div><div class="codetool" id="codetool"><div class="code_n"></div></div></div><p>
        注意过个组名使用逗号分隔,不能有空格。</p><p>
        &nbsp;感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p><p>
        原文链接:http://www.cnblogs.com/sparkdev/p/5823353.html</p>
頁: [1]
查看完整版本: linux 详解useradd 命令基本用法