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

介绍

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

用户信息

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

  1. root:x:0:0:root:/root:/bin/bash
  2.  
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4.  
  5. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  6.  
  7. 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

密码信息

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

  1. [root@localhost ~]# cat /etc/shadow
  2. 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年换算过来的数字

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

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

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

创建用户

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

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

1.创建用户test

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

  1. [root@localhost ~]# useradd test
  2. [root@localhost ~]# grep test /etc/passwd /etc/shadow /etc/group
  3. /etc/passwd:test:x:501:502::/home/test:/bin/bash
  4. /etc/shadow:test:!!:16925:0:99999:7:::
  5. /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.创建不允许登入的用户

  1. useradd test -s /sbin/nologin

5.指定用户家目录

先创建用户家目录

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

创建用户并指定家目录

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

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

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

删除用户

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

1.不加参数删除用户

  1. userdel testuser

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

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

  1. userdel -r test

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

用户组

创建用户组

  1. groupadd groupname

删除用户组

  1. groupdel groupname

修改用户组

  1. --修改用户组名
  2. groupmod -h newname oldname
  3.  
  4. --修改用户组ID
  5. 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. TDD学习笔记【三】---是否需针对非public方法进行测试?

    前言 在Visual Studio 2012 中,针对Unit Test 的部分,有一个重要的变动: 原本针对「测试对象非public 的部分」,开发人员可通过Visual Studio 2010 自 ...

  2. Xcode 突然有部分文件不显示

    今天突然Xcode抽风了,突然我的项目中的文件好多不显示出来,本地文件夹都有,见鬼了..... 真心坑死了,于是乎就找度娘了,果然被我发现了 看见这个蓝色小时钟没呀,就是他在捣鬼,我点击一下变成灰色就 ...

  3. MIT 6.828 JOS学习笔记16. Lab 2.2

    Part 3 Kernel Address Space JOS把32位线性地址虚拟空间划分成两个部分.其中用户环境(进程运行环境)通常占据低地址的那部分,叫用户地址空间.而操作系统内核总是占据高地址的 ...

  4. 一个windows下的ddos样本

    一个windows下的ddos样本. 加载器 程序运行之后会在临时目录释放出一个256_res.tmp的文件 之后将该文件移动至system32目录下,以rasmedia.dll命名. 删除原文件. ...

  5. [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

    [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

  6. Java 正则表达式匹配模式[贪婪型、勉强型、占有型]

    Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...

  7. startssl申请配置免费https证书

    之前给业务配置都是在沃通上申请免费证书,而后通过反向代理层的Nginx进行https认证. 今天来了个新需求,要求域名直接解析至阿里云SLB.https配置需要通过阿里云的控制台部署这倒无所谓,只是在 ...

  8. maven构建简单的web项目

    把jdk给换掉 项目修改好了以后写个页面测试一下,结果正常 下面应该添加依赖让web项目一步步丰满起来. 0-添加依赖 1-建一个servlet 2-web.xml中添加servlet声明 3-重新运 ...

  9. js排序算法总结——冒泡,快速,选择,插入,希尔,归并

    相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放 ...

  10. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...