Linux 创建修改删除用户和组的方法
<p><span><strong>介绍</strong></span></p>
<p>
在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息。</p>
<p>
<strong>用户信息</strong></p>
<p>
先从用户信息开始分析,可以通过查询/etc/password文件,每一行代表一个用户信息</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_214901">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">root:x:0:0:root:</code><code class="bash plain">/root</code><code class="bash plain">:</code><code class="bash plain">/bin/bash</code>
</div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">bin:x:1:1:bin:</code><code class="bash plain">/bin</code><code class="bash plain">:</code><code class="bash plain">/sbin/nologin</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">daemon:x:2:2:daemon:</code><code class="bash plain">/sbin</code><code class="bash plain">:</code><code class="bash plain">/sbin/nologin</code>
</div>
<div class="line number6 index5 alt1">
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">mysql:x:496:501::</code><code class="bash plain">/home/mysql</code><code class="bash plain">:</code><code class="bash plain">/bin/bash</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
每个冒号分隔一部分,整行总共分为7个部分。</p>
<p>
1.用户名</p>
<p>
2.用户密码,早期版本的账号密码是直接存在这里,为了兼容所以也保留下了这部分,用x代替。</p>
<p>
3.uid:所属的用户id,每个文件的前面都有该文件所属的用户和组,其实存的是uid只不过是通过uid再去etc/password、/etc/shadow中找到对应的uid和gid的名称。</p>
<p>
超级用户的uid=0</p>
<p>
系统用户(1-499):其中1-99是系统创建的,100-499是用户创建的系统账户,系统用户不能登入但是可以执行系统的一些命令,这个跟最后指定的shell有关;有一个特殊的shell是/sbin/nologin</p>
<p>
普通用户(500-65535)</p>
<p>
4.gid:账号所属的用户组id,和/etc/group组文件有关联</p>
<p>
5.用户描述</p>
<p>
6.用户的家目录:创建用户的家目录默认是在/home/用户/,在创建用户的时候可以指定用户的家目录,系统用户的家目录比较特殊,比如root用户的家目录是/root</p>
<p>
7.shell:shell是终端和kernel(内核)沟通的桥梁、内核再和低层的硬件交互(包括cpu、主板、硬盘、显卡、光驱等),linux默认的shell是/bin/bash</p>
<p>
<strong>密码信息</strong></p>
<p>
用户密码文件中每一行记录一个用户的密码信息,总共有九个部分</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_446444">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># cat /etc/shadow</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">root:$1$4</code><code class="bash plain">/cbv0uu</code><code class="bash plain">$gz1mevqxy6</code><code class="bash plain">/9uatgi9yut0</code><code class="bash plain">:16862:0:99999:7:::</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
1.用户名:对应/etc/password文件中的用户信息</p>
<p>
2.密码:密码存的是密文</p>
<p>
3.最近更改密码的日期:linux将1970年1月1日作为1,所以上面的16862是累加的,具体就不去算了</p>
<p>
4.密码不可被更改的天数:0代表密码随时可以被更改,通常可以用来设置某个用户在多少天密码不能被更改</p>
<p>
5.密码需要重新更改的天数:99999为273年,改时间是在第3部分的基础上再相加的。</p>
<p>
6.密码需要修改前的警告天数:改天数是在第5的基础上计算的,这里默认是7天也就是密码在需要更改前的第7天开始就发出警告。</p>
<p>
7.密码过期后账号宽限的天数:当密码超过了需要更改的天数后,如果用户依然没有更改密码,那么该密码就过期了,在过期的这几天里密码依旧可以登入当用户在宽限的时间内登入系统系统会强制用户修改密码,如果用户在宽限的天内还未修改密码那么密码就永久过期无法再登入,只有账户超出了密码过期的天数之后账户才失效,所以一个账户总的有效时间是3+6+7。</p>
<p>
8.用户失效的日期:改日期同第3部分一样都是从1970年1月1日开始计算出来的数字,超过这个日期之后无论用户密码是否过期用户都失效不能再使用,改日期通常会用在规定一个用户在规定的日期之后就用户就不能使用的收费系统中。</p>
<p>
9.保留部分</p>
<p>
<strong>计算当前日期通过1970年换算过来的数字</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_893500">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># echo $(($(date +'%s')/86400+1))</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">16927</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>计算指定日期通过1970年换算过来的数字</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_76687">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># echo $(($(date --date="2016-01-01" +'%s')/86400+1))</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">16802</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>创建用户</strong></p>
<p>
明白了上面的概念之后就可以来创建用户了,创建用户的命令是useradd,接下来看几个主要的参数。</p>
<p>
useradd [-u uid] [-g 初始群组] [-g 次要群组] [-m\m] [-c 说明] [-d 家目录绝对路径] [-s shell] 账号名</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_608075">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">-c, --comment comment 用户说明</code>
</div>
<div class="line number2 index1 alt1">
<code class="plain plain">-d, --home-dir home_dir 用户的家目录</code>
</div>
<div class="line number3 index2 alt2">
<code class="plain plain">-d, --defaults 默认的用户配置</code>
</div>
<div class="line number4 index3 alt1">
<code class="plain plain">-e, --expiredate expire_date 用户的失效日期,这里需要指定的是从1970年1月1日开始计算出来的数字,比如16925代表2016年5月4日过期,对应密码文件的第8部分</code>
</div>
<div class="line number5 index4 alt2">
<code class="plain plain">-f, --inactive inactive 指定密码过期的时间,这里指定的是数字,比如10代表密码在过期的10天内还可以登入但是登入后需要强制修改密码, 对应密码文件的第7部分</code>
</div>
<div class="line number6 index5 alt1">
<code class="plain plain">-g, --gid group 用户的gid</code>
</div>
<div class="line number7 index6 alt2">
<code class="plain plain">-g, --groups groups 列出用户还能加人的组、次要组</code>
</div>
<div class="line number8 index7 alt1">
<code class="plain plain">-h, --help 帮助信息</code>
</div>
<div class="line number9 index8 alt2">
<code class="plain plain">-k, --skel skel_dir use this alternative skeleton directory</code>
</div>
<div class="line number10 index9 alt1">
<code class="plain plain">-k, --key key=value override /etc/login.defs defaults</code>
</div>
<div class="line number11 index10 alt2">
<code class="plain plain">-l, --no-log-init do not add the user to the lastlog and</code>
</div>
<div class="line number12 index11 alt1">
<code class="plain spaces"> </code><code class="plain plain">faillog databases</code>
</div>
<div class="line number13 index12 alt2">
<code class="plain plain">-m, --create-home 强制需要创建家目录</code>
</div>
<div class="line number14 index13 alt1">
<code class="plain plain">-m, --no-create-home 强制不创建家目录</code>
</div>
<div class="line number15 index14 alt2">
<code class="plain plain">-n, --no-user-group 不创建用户的组名和用户名一样</code>
</div>
<div class="line number16 index15 alt1">
<code class="plain plain">-o, --non-unique 允许创建的用户uid相同,默认情况下用户的uid是唯一的,加上-o参数可以创建相同uid的不用用户</code>
</div>
<div class="line number17 index16 alt2">
<code class="plain plain">-p, --password password 指定创建用户的密码,这里的密码存储的是密文,所以还需要知道密文对应的明文密码是多少</code>
</div>
<div class="line number18 index17 alt1">
<code class="plain plain">-r, --system 创建一个系统用户</code>
</div>
<div class="line number19 index18 alt2">
<code class="plain plain">-s, --shell shell 指定用户的shell</code>
</div>
<div class="line number20 index19 alt1">
<code class="plain plain">-u, --uid uid 指定用户的uid</code>
</div>
<div class="line number21 index20 alt2">
<code class="plain plain">-u, --user-group 创建的用户组名同用户名,这是默认的</code>
</div>
<div class="line number22 index21 alt1">
<code class="plain plain">-z, --selinux-user seuser use a specific seuser for the selinux user mapping</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
1.创建用户test</p>
<p>
创建用户不加参数默认会创建一个同名的用户组、密码为空,用户的uid和gid都是500之后在现有的uid和gid的基础上往后自动添加、默认会创建一个同名的家目录家目录的默认权限是700</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_740593">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># useradd test</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"></code><code class="bash comments"># grep test /etc/passwd /etc/shadow /etc/group</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">/etc/passwd</code><code class="bash plain">:</code><code class="bash functions">test</code><code class="bash plain">:x:501:502::</code><code class="bash plain">/home/test</code><code class="bash plain">:</code><code class="bash plain">/bin/bash</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">/etc/shadow</code><code class="bash plain">:</code><code class="bash functions">test</code><code class="bash plain">:!!:16925:0:99999:7:::</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">/etc/group</code><code class="bash plain">:</code><code class="bash functions">test</code><code class="bash plain">:x:502:</code>
</div>
<div class="line number6 index5 alt1">
</div>
<div class="line number7 index6 alt2">
<code class="bash spaces"> </code><code class="bash plain"></code><code class="bash comments"># ll -d /home/test</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash spaces"> </code><code class="bash plain">drwx------. 4 </code><code class="bash functions">test</code> <code class="bash functions">test</code> <code class="bash plain">4096 may 4 16:25 </code><code class="bash plain">/home/test</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
2.创建用户new备注用户为test,指定用户uid为600,用户的组初始组为test、用户的次要组为mysql,指定用户的失效日期(注意这里的失效日期也是需要通过1970年1月1日进行换算)、指定用户的过期天数</p>
<p>
<img title="Linux 创建修改删除用户和组的方法" alt="Linux 创建修改删除用户和组的方法" src="https://zhuji.jb51.net/uploads/img/202305/cb9bea05cb33a269481ca4dd73238b14.jpg"></p>
<p>
3.创建系统用户old</p>
<p>
创建的系统用户虽然在用户文件中有指定家目录,但是实际上在home目录下并不会创建对应用户的目录,且不会创建用户邮件通知目录。</p>
<p>
<img title="Linux 创建修改删除用户和组的方法" alt="Linux 创建修改删除用户和组的方法" src="https://zhuji.jb51.net/uploads/img/202305/bd1be4fc94129f2c582128e04a58b0b4.jpg"></p>
<p>
4.创建不允许登入的用户</p>
<p>
<img title="Linux 创建修改删除用户和组的方法" alt="Linux 创建修改删除用户和组的方法" src="https://zhuji.jb51.net/uploads/img/202305/2ea2228c041e2b1736f367d037d4b5a9.jpg"></p>
<p>
5.指定用户家目录</p>
<p>
先创建用户家目录</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_684848">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># mkdir -p /test/home</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"></code><code class="bash comments"># mkdir /test/home/testuser</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
创建用户并指定家目录</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_8599">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># useradd -d /test/home/testuser testuser</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">useradd</code><code class="bash plain">: warning: the home directory already exists.</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">not copying any </code><code class="bash functions">file</code> <code class="bash plain">from skel directory into it.</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
注意:这里的家目录是绝对路径,也就是你指定了那个目录家目录就是哪个目录不会在你指定的目录下再创建目录,这里会有警告说用户不能拷贝文件到家目录,因为家目录的权限还是之前创建目录用户的权限,这个时候需要给家目录赋予用户拥有者。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_923575">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># chown testuser:testuser /test/home/testuser</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"></code><code class="bash comments"># ll /test/home</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">total 4</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">drwxr-xr-x. 2 testuser testuser 4096 may 5 06:22 testuser</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain"></code><code class="bash comments">#</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>删除用户</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_757308">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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">userdel login</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<blockquote>
<p>
-f, --force 强制删除用户,不管该用户是否在使用 <br>
-h, --help 帮助信息<br>
-r, --remove 删除用户和组并且删除用户的家目录和邮件通知目录<br>
-z, --selinux-user 删除selinux用户</p>
</blockquote>
<p>
1.不加参数删除用户</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_18910">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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">userdel testuser</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
不加参数删除只会删除用户、密码、用户组,不会删除用户的家目录和用户的邮件目录</p>
<p>
2.删除用户同时删除用户的家目录和邮件通知目录</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_788951">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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">userdel -r </code><code class="bash functions">test</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
使用-r参数删除用户会同时删除用户的家目录和用户的邮件通知目录,如果用户的用户组是使用其它用户的用户组,其它用户组不会被删除。</p>
<p>
<strong>用户组</strong></p>
<p>
创建用户组</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_790896">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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">groupadd groupname</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
删除用户组</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_823824">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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">groupdel groupname</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
修改用户组</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_902130">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">--修改用户组名</code>
</div>
<div class="line number2 index1 alt1">
<code class="plain plain">groupmod -h newname oldname</code>
</div>
<div class="line number3 index2 alt2">
</div>
<div class="line number4 index3 alt1">
<code class="plain plain">--修改用户组id</code>
</div>
<div class="line number5 index4 alt2">
<code class="plain plain">groupmod -g newgid oldgid</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
单独对用户组的操作用的不会很多,这里只需要了解一下就好。</p>
<p>
<span><strong>总结</strong></span></p>
<p>
修改用户这里就不做详细的解释,跟创建用户的语法相差不大,</p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:https://www.cnblogs.com/chenmh/p/5459359.html</p>
頁:
[1]