200 ? "200px" : this.width)!important;}
-->

介绍

在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息。

用户信息

先从用户信息开始分析,可以通过查询/etc/password文件,每一行代表一个用户信息

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

mysql:x:496:501::/home/mysql:/bin/bash

每个冒号分隔一部分,整行总共分为7个部分。

1.用户名

2.用户密码,早期版本的账号密码是直接存在这里,为了兼容所以也保留下了这部分,用X代替。

3.UID:所属的用户ID,每个文件的前面都有该文件所属的用户和组,其实存的是UID只不过是通过UID再去etc/password、/etc/shadow中找到对应的UID和GID的名称。

超级用户的uid=0

系统用户(1-499):其中1-99是系统创建的,100-499是用户创建的系统账户,系统用户不能登入但是可以执行系统的一些命令,这个跟最后指定的shell有关;有一个特殊的shell是/sbin/nologin

普通用户(500-65535)

4.GID:账号所属的用户组ID,和/etc/group组文件有关联

5.用户描述

6.用户的家目录:创建用户的家目录默认是在/home/用户/,在创建用户的时候可以指定用户的家目录,系统用户的家目录比较特殊,比如root用户的家目录是/root

7.shell:shell是终端和kernel(内核)沟通的桥梁、内核再和低层的硬件交互(包括CPU、主板、硬盘、显卡、光驱等),linux默认的shell是/bin/bash

密码信息

用户密码文件中每一行记录一个用户的密码信息,总共有九个部分

[root@localhost ~]# cat /etc/shadow
root:$1$4/CBv0UU$GZ1mEvqxy6/9UaTGI9YUT0:16862:0:99999:7:::

1.用户名:对应/etc/password文件中的用户信息

2.密码:密码存的是密文

3.最近更改密码的日期:linux将1970年1月1日作为1,所以上面的16862是累加的,具体就不去算了

4.密码不可被更改的天数:0代表密码随时可以被更改,通常可以用来设置某个用户在多少天密码不能被更改

5.密码需要重新更改的天数:99999为273年,改时间是在第3部分的基础上再相加的。

6.密码需要修改前的警告天数:改天数是在第5的基础上计算的,这里默认是7天也就是密码在需要更改前的第7天开始就发出警告。

7.密码过期后账号宽限的天数:当密码超过了需要更改的天数后,如果用户依然没有更改密码,那么该密码就过期了,在过期的这几天里密码依旧可以登入当用户在宽限的时间内登入系统系统会强制用户修改密码,如果用户在宽限的天内还未修改密码那么密码就永久过期无法再登入,只有账户超出了密码过期的天数之后账户才失效,所以一个账户总的有效时间是3+6+7。

8.用户失效的日期:改日期同第3部分一样都是从1970年1月1日开始计算出来的数字,超过这个日期之后无论用户密码是否过期用户都失效不能再使用,改日期通常会用在规定一个用户在规定的日期之后就用户就不能使用的收费系统中。

9.保留部分

计算当前日期通过1970年换算过来的数字

[root@localhost ~]# echo $(($(date +'%s')/+))

计算指定日期通过1970年换算过来的数字

[root@localhost ~]# echo $(($(date --date="2016-01-01" +'%s')/+))

创建用户

明白了上面的概念之后就可以来创建用户了,创建用户的命令是useradd,接下来看几个主要的参数。

 useradd [-u UID] [-g 初始群组] [-G 次要群组] [-m\M] [-c 说明] [-d 家目录绝对路径] [-s shell] 账号名
  -c, --comment COMMENT         用户说明
-d, --home-dir HOME_DIR 用户的家目录
-D, --defaults 默认的用户配置
-e, --expiredate EXPIRE_DATE 用户的失效日期,这里需要指定的是从1970年1月1日开始计算出来的数字,比如16925代表2016年5月4日过期,对应密码文件的第8部分
-f, --inactive INACTIVE 指定密码过期的时间,这里指定的是数字,比如10代表密码在过期的10天内还可以登入但是登入后需要强制修改密码, 对应密码文件的第7部分
-g, --gid GROUP 用户的GID
-G, --groups GROUPS 列出用户还能加人的组、次要组
-h, --help 帮助信息
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home 强制需要创建家目录
-M, --no-create-home 强制不创建家目录
-N, --no-user-group 不创建用户的组名和用户名一样
-o, --non-unique 允许创建的用户uid相同,默认情况下用户的UID是唯一的,加上-o参数可以创建相同UID的不用用户
-p, --password PASSWORD 指定创建用户的密码,这里的密码存储的是密文,所以还需要知道密文对应的明文密码是多少
-r, --system 创建一个系统用户
-s, --shell SHELL 指定用户的shell
-u, --uid UID 指定用户的uid
-U, --user-group 创建的用户组名同用户名,这是默认的
  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user mapping

1.创建用户test

创建用户不加参数默认会创建一个同名的用户组、密码为空,用户的UID和GID都是500之后在现有的UID和GID的基础上往后自动添加、默认会创建一个同名的家目录家目录的默认权限是700

[root@localhost ~]# useradd test
[root@localhost ~]# grep test /etc/passwd /etc/shadow /etc/group
/etc/passwd:test:x:501:502::/home/test:/bin/bash
/etc/shadow:test:!!:16925:0:99999:7:::
/etc/group:test:x:502:

[root@localhost ~]# ll -d /home/test
  drwx------. 4 test test 4096 May 4 16:25 /home/test

2.创建用户new备注用户为test,指定用户UID为600,用户的组初始组为test、用户的次要组为mysql,指定用户的失效日期(注意这里的失效日期也是需要通过1970年1月1日进行换算)、指定用户的过期天数

3.创建系统用户old

创建的系统用户虽然在用户文件中有指定家目录,但是实际上在home目录下并不会创建对应用户的目录,且不会创建用户邮件通知目录。

4.创建不允许登入的用户

useradd test -s /sbin/nologin

5.指定用户家目录

先创建用户家目录

[root@localhost ~]# mkdir -p /test/home
[root@localhost ~]# mkdir /test/home/testuser

创建用户并指定家目录

[root@localhost ~]# useradd -d /test/home/testuser testuser
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

注意:这里的家目录是绝对路径,也就是你指定了那个目录家目录就是哪个目录不会在你指定的目录下再创建目录,这里会有警告说用户不能拷贝文件到家目录,因为家目录的权限还是之前创建目录用户的权限,这个时候需要给家目录赋予用户拥有者。

[root@localhost ~]# chown testuser:testuser /test/home/testuser
[root@localhost ~]# ll /test/home
total
drwxr-xr-x. testuser testuser May : testuser
[root@localhost ~]#

删除用户

userdel [options] LOGIN
  -f, --force                   强制删除用户,不管该用户是否在使用                             
-h, --help 帮助信息
-r, --remove 删除用户和组并且删除用户的家目录和邮件通知目录
-Z, --selinux-user 删除SELinux用户

1.不加参数删除用户

userdel testuser

不加参数删除只会删除用户、密码、用户组,不会删除用户的家目录和用户的邮件目录

2.删除用户同时删除用户的家目录和邮件通知目录

userdel -r test

使用-r参数删除用户会同时删除用户的家目录和用户的邮件通知目录,如果用户的用户组是使用其它用户的用户组,其它用户组不会被删除。

用户组

创建用户组

groupadd groupname

删除用户组

groupdel groupname

修改用户组

--修改用户组名
groupmod -h newname oldname --修改用户组ID
groupmod -g newgid oldgid

单独对用户组的操作用的不会很多,这里只需要了解一下就好。

总结

修改用户这里就不做详细的解释,跟创建用户的语法相差不大,

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

Linux 创建修改删除用户和组的更多相关文章

  1. Linux创建修改删除用户和组

    Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...

  2. Linux无法使用userdel删除用户和组的解决办法

    转自:http://www.linuxidc.com/Linux/2013-07/87371.htm 简述: 今天在看书的时候,看到有个实例,手痒痒的跟着做了起来...但是,出现问题了..测试的用户和 ...

  3. Kali linux创建和删除用户

    #创建用户 图形界面如此友好,直接点用户——添加用户——设置密码即可,如果切换帐号,同样点用户——切换用户——输入密码即可. #删除用户的指令比较复杂一些,这里我们找到了特别好的资源,简明有效. ht ...

  4. [Linux] 创建、删除用户

    系统:Ubuntu useradd:创建新用户或更新默认新用户信息 创建新用户 xxx,/home 目录没有同名文件夹,并且此用户没有 shell 权限 $ sudo useradd xxx 创建新用 ...

  5. Oracle忘记用户名和密码以及管理员用户新增修改删除用户

    Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...

  6. Linux——CentOS7添加/删除用户和用户组1

    Linux--CentOS7添加/删除用户和用户组 2017.05.02 19:58 23012浏览   前言 今天又重新装了centos7突然有关用户和用户组有关的命令记不清了,所以记一下,也方便你 ...

  7. oracle11g创建修改删除表

    oracle11g创建修改删除表 我的数据库名字: ORCL         密码:123456 1.模式 2.创建表 3.表约束 4.修改表 5.删除表 1.模式 set oracle_sid=OR ...

  8. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...

  9. Linux基础学习-用户的创建修改删除

    用户添加修改删除 1 useradd添加用户 添加一个新用户hehe,指定uid为3000,家目录为/home/haha [root@qdlinux ~]# useradd -u 3000 -d /h ...

随机推荐

  1. Xocde一次版本升级遇到的问题 (Code Sign Error)

    因为Xcode对ios版本的支持问题,我对XCode进行了一次升级,导致原来还好的项目代码出现了编译时错误. Code Sign Error failed with exit code 1 问题就在于 ...

  2. Git使用笔记

    Ubuntu下安装步骤 sudo apt-get install git完成git的安装 安装完成后进行配置 git config –global user.name “Your Name” git ...

  3. Learn Git and GitHub without any code!

    What is GitHub? GitHub is a code hosting platform for version control and collaboration.代码托管平台. repo ...

  4. linux中redis的php扩展安装

    PHP中的扩展一般都是在安装环境的时候就已经装好了的.但是有的一些扩展在后期想要加上去的话也是可以的.php支持后期安装扩展. 想要安装扩展就需要先去下载安装扩展所需要的扩展源码包.autoconf. ...

  5. Daily Scrum Meeting 汇总

    Alpha Daily Scrum Meeting --FirstDay(11.8) Daily Scrum Meeting --SecondDay(11.9) Daily Scrum Meeting ...

  6. 好文分享_java堆栈的区别

    Java Heap Memory Heap memory is used by java runtime to allocate memory to Objects and JRE classes. ...

  7. CSS3动画制作

    CSS3动画制作 rotate 绕中心旋转 fadeInPendingFadeOutUp 先渐现,停留2s,再向上滑动并逐渐消失 fadeInUp2D 向上滑动并渐现, 因Animate.css的fa ...

  8. .net 开发---windows服务

    因为想把quartz.net自动run的程式挂到windows服务中去,遇到问题记录 1.创建windows服务后,利用C:\Windows\Microsoft.NET\Framework\v4.0. ...

  9. 《转》Unity3D研究院编辑器之创建Lua脚本模板

    Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 :  Assets/Editor/Lua/Template/lua.lua ...

  10. php js数组问题

    <script type="text/javascript"> var a = new Array(); a = "a"; a = "b& ...