在 Linux 系统中,与用户管理有关的文件主要有如下几个:分别是/etc/passwd,/etc/shadow,/etc/gfoup,/etc/gshadow 。它们分别与用户的账号,密码,用户组及用户组密码有关。我们创建用户也就是跟这几个文件打交道。

1. 如何新建一个用户?

主要是下面这两个步骤:

一. 通过useradd命令完成一个新用户的初始化设置工作

二. 通过passwd为这个新用户设置密码

给系统添加一个用户叫wirelessqa,密码为12345

1. 先添加用户wirelessqa

  1. bixiaopeng@ubuntu:~$ useradd wirelessqa
  2. useradd: cannot lock /etc/passwd; try again later.

#oh,my god,需要root权限

  1. bixiaopeng@ubuntu:~$ su
  2. Password:

再试一次添加用户wirelessqa

  1. root@ubuntu:/home/bixiaopeng# user add wirelessqa

没有任何结果说明是没错误

2. 为wirelessqa设置密码

  1. root@ubuntu:/home/bixiaopeng# passwd wirelessqa
  2. Enter new UNIX password:
  3. Retype new UNIX password:
  4. passwd: password updated successfully

上面说明密码设置成功了,当然我们也可以为上面的用户修改密码,方法是一样的

此时虽然我们已经新建了帐号,但是在home目录下是看不到的

  1. root@ubuntu:/home# pwd
  2. /home
  3. root@ubuntu:/home# ls -al
  4. total 12
  5. drwxr-xr-x 3 root root 4096 8��� 17 00:31 .
  6. drwxr-xr-x 23 root root 4096 6��� 17 18:14 ..
  7. drwxr-xr-x 29 bixiaopeng bixiaopeng 4096 8��� 16 19:45 bixiaopeng

3. 如果想同时在home目录(默认的)创建用户目录,需要用到 -m参数

  1. root@ubuntu:/home# useradd -m bilaoshi
  2. root@ubuntu:/home# passwd bilaoshi
  3. Enter new UNIX password:
  4. Retype new UNIX password:
  5. passwd: password updated successfully
  6. root@ubuntu:/home# ls -al
  7. total 16
  8. drwxr-xr-x 4 root root 4096 8��� 17 00:38 .
  9. drwxr-xr-x 23 root root 4096 6��� 17 18:14 ..
  10. drwxr-xr-x 2 bilaoshi bilaoshi 4096 8��� 17 00:38 bilaoshi
  11. drwxr-xr-x 29 bixiaopeng bixiaopeng 4096 8��� 17 00:34 bixiaopeng

2. 添加用户(useradd)常用参数



1. useradd默认在/home目录下为新增加的账号建一个主目录,如果想改变主目录存放位置,可以使用useradd的参数-d

例:新建一个用户alex3,主目录放在/home/account里

  1. useradd -d /home/account alex3

2. 
useradd的初始化操作还包括为用户单独建立一个与用户名同名的组(floatboat组)。这叫用户私有组的机制,与默认组机制相对应。


对用户分组一是方便管理,二是可以明确权限。如果想让此用户加入一个已有的组的话,可以使用-g参数。


例: 让alex加入bilaoshi组

  1. useradd -g bilaoshi alex

还可以使用-G参数使他同时加入多个组

例:让alex加入bilaoshi1和bilaoshi2组:

  1. useradd -G bilaoshi1,bilaoshi2 alex

3.  新建一个账号,指定分组和UID,使用-g 和  -u参数

  1. root@ubuntu:/home/bixiaopeng# grep 888 /etc/passwd
  2. root@ubuntu:/home/bixiaopeng# useradd -u 888 -g bilaoshi alex
  3. root@ubuntu:/home/bixiaopeng# grep alex /etc/passwd /etc/shadow /etc/group
  4. /etc/passwd:alex:x:888:1002::/home/alex:/bin/sh
  5. /etc/shadow:alex:!:15934:0:99999:7:::

4. 新建一个系统账号,加上参数 -r 

  1. root@ubuntu:/home/bixiaopeng# useradd -r alex2
  2. root@ubuntu:/home/bixiaopeng# grep alex2 /etc/passwd /etc/shadow /etc/group
  3. /etc/passwd:alex2:x:999:999::/home/alex2:/bin/sh
  4. /etc/shadow:alex2:!:15934::::::
  5. /etc/group:alex2:x:999:

3. 添加用户(useradd)默认值


在 linux 中使用 useradd 去新增用户时,一些在 /etc/passwd 中的值是会去参考 /etc/default/useradd 这个文件的。其文件内容基本如下:
  1. root@ubuntu:/home/bixiaopeng# cat /etc/default/useradd
  2. # Default values for useradd(8)
  3. #
  4. # The SHELL variable specifies the default login shell on your
  5. # system.
  6. # Similar to DHSELL in adduser. However, we use "sh" here because
  7. # useradd is a low level utility and should be as general
  8. # as possible
  9. SHELL=/bin/sh //老毕注:默认使用的shell
  10. #
  11. # The default group for users
  12. # 100=users on Debian systems
  13. # Same as USERS_GID in adduser
  14. # This argument is used when the -n flag is specified.
  15. # The default behavior (when -n and -g are not specified) is to create a
  16. # primary user group with the same name as the user being added to the
  17. # system.
  18. # GROUP=100 //老毕注:默认的用户组
  19. #
  20. # The default home directory. Same as DHOME for adduser
  21. # HOME=/home //老毕注:账户目录地址
  22. #
  23. # The number of days after a password expires until the account
  24. # is permanently disabled
  25. # INACTIVE=-1 //老毕注:密码过期的宽限时间,对应 /etc/shadow 的第七栏
  26. #
  27. # The default expire date
  28. # EXPIRE= //老毕注:账号失效日期,对应 /etc/shadow 的第八栏
  29. #
  30. # The SKEL variable specifies the directory containing "skeletal" user
  31. # files; in other words, files such as a sample .profile that will be
  32. # copied to the new user's home directory when it is created.
  33. # SKEL=/etc/skel //老毕注:用户家目录里面的内容参照文件(里面基本上全为隐藏文件——>以“.”开头的文件)
  34. #
  35. # Defines whether the mail spool should be created while
  36. # creating the account
  37. # CREATE_MAIL_SPOOL=yes //老毕注:建立使用者的mailbox

4. 修改用户的设置

对现有用户的修改,比较常用的主要是:
1. 修改密码(用passwd) 2.修改用户的登录shell 3.修改用户所属的默认组 4.设置帐号有效期 5.修改用户的说明信息等等 6.修改用户主目录。

1. passwd 用户名 【回车输入密码就可以了】

2. 修改用户的登录shell

使用chsh命令可以修改自己的shell,只有超级用户才能用chsh username为其它用户修改shell设置。
注意,指定的shell必须是列入/etc/shells文件中的shell,否则该用户将不能登陆。

一般,比较常见的shells文件包括下面这些shell:

/bin/bash2 
/bin/bash 
/bin/sh 
/bin/ash 
/bin/bsh 
/bin/tcsh 
/bin/csh

也可以使用usermod命令修改shell信息:
usermod -s /bin/bash bilaoshi

其中/bin/bash和bilaoshi应取相应的shell路径文件名及用户名。

3. 修改用户所属的默认组
这个功能也可以通过usermod命令来实现,使用-g参数,例如把bilaoshi的默认组改为bixiaopeng,可以使用如下命令:
usermod -g bixiaopeng bilaoshi 
注意:nobody在类UNIX系统中一般都意味着没有任何权限。
4.设置帐号有效期
如果使用了影子口令,则可以使用如下命令来修改一个帐号的有效期:
usermod -e MM/DD/YY username

例如把用户bilaoshi的有效期定为2013年12月31日:

usermod -e 12/31/13 bilaoshi

注意: 如果把该用户的有效期设为已经过去的时间,就可以暂时禁止该用户登录系统。

5. 修改用户的说明信息

修改用户的说明信息,最简单的方法莫过于直接修改/etc/passwd文件,找到对应的用户记录行,例如下列行:

bilaoshi:x:1002:1002::/home/bilaoshi:/bin/sh

你可以直接在第四个冒号和第五个冒号之间插入该用户的说明就可以了。其实,很多用户设置都可以在这修改,比如该行最后一部分/bin/bash就是用户登录shell的设置。

6. 修改用户主目录

修改用户的主目录主要使用usermod命令的-d参数,例如:

usermod -d /main bilaoshi

这一行将bilaoshi的主目录改到/main。
如果想将现有主目录的主要内容转移到新的目录,应该使用-m开关,如下所示:

usermod -d -m /main bilaoshi

5. 删除用户账号

此时我的用户已经这么多了


那我们想办法删除一个吧
  1. root@ubuntu:~# userdel wirelessqa

ok,此时用户wirelessqa就被删除了 

6. 你还应该知道的事

1. /etc/passwd文件说明

  1. oot@ubuntu:/home/account# cat /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. ……..
  4. saned:x:114:123::/home/saned:/bin/false
  5. bixiaopeng:x:1000:1000:bixiaopeng,,,:/home/bixiaopeng:/bin/bash
  6. bilaoshi:x:1002:1002::/home/bilaoshi:/bin/sh
  7. alex:x:888:1002::/home/alex:/bin/sh
  8. alex2:x:999:999::/home/alex2:/bin/sh

在passwd的文件里,每一行被冒号(":")分成7个部分,分别是:


[用户名]:[密码]:[UID]:[GID]:[身份描述]:[主目录]:[登录shell] 


其中:

⒈[用户名]是passwd文件里各记录行唯一的有"唯一性"要求的域。也就是说每一行的第一个区域的内容都不能相同,其它区域就无所谓了。

⒉[密码]区域在以前,保存着一个经过不可逆的哈希算法进行DES加密的13位字符,但不包括单引号和冒号。这13位字符中,前两位是密钥,在加密的 时候随机生成的。由于这个字符串不包括单引号,所以以前有一种不修改密码又禁止用户登录的方式就是在密码前面加一个单引号。值得注意的是,现在由于使用了 shadow口令,在密码区域只有一个x字符。

⒊[UID]虽然是系统用来标志文件归属,确定各种权限的标志,但这个区域的内容并不要求唯一的。比较常见而又与安全问题相关的一个例子是有多个 UID和GID均为0的用户帐号。注意到在该文件最后一行还有一个UID和GID为0的用户imnotroot,虽然它声称自己不是root,但是它却有 和root完全相同的权限,因为系统并非根据[用户名],而是根据UID和GID来分用户的权力的。所以,这种情况无疑为系统埋下了安全的炸弹。但是,当 imnorroot做锁定屏幕等操作的时候,如果它的密码和root的不一样,它将无法解锁,因为系统只是查到第一个UID为0的用户(自然是root) 后,就不在往下查找了——它当UID也是唯一的。

⒋[GID]用户默认的组ID,这个ID可以在文件/etc/group里查到对应的组名。

⒌[身份描述]:就是用户的身份说明,默认的是无任何说明,可人工添加。

⒍[主目录]:用户的主目录,可以使用前面介绍的命令修改。

⒎[登录shell]:用户登录时系统提供的shell

<注意>:[UID]和[GID]小于500的一般都是系统自己保留,不做普通用户和组的标识的,所以新增加的用户和组一般都是UID和GID大于500的。

2. /etc/group文件说明

  1. root@ubuntu:/home/account# cat /etc/group
  2. root:x:0:
  3. daemon:x:1:
  4. bin:x:2:
  5. sys:x:3:
  6. adm:x:4:bixiaopeng
  7. …...
  8. pulse-access:x:120:
  9. utempter:x:121:
  10. rtkit:x:122:
  11. saned:x:123:
  12. bixiaopeng:x:1000:
  13. sambashare:x:124:bixiaopeng
  14. bilaoshi:x:1002:
  15. alex2:x:999:

它总共分四个部分:

[组名]:[密码域]:[GID]:[组员列表]

新组的增加可以使用groupadd newgroupname

1. 由于组一般都不用密码保护,所以虽然看起来密码域有个X字符,其实那只表示使用了SHADOW。


2. 组员列表用逗号分隔各个帐号3. 一个组的组员如果默认登录组就是它的话,那么在组员列表里将不显示这个组员的帐号,例如用如下命令 增加的用户:

  1. useradd -g bilaoshi bilaoshi

在/etc/group文件里bilaoshi的组员列表将不显示这个组员,而只是在passwd文件中的GID被设置为1002。而使用如下命令:

  1. root@ubuntu:/home/account# usermod -G bilaoshi,alex2 bilaoshi
  2. root@ubuntu:/home/account# cat /etc/group
  3. root:x:0:
  4. ….
  5. utempter:x:121:
  6. rtkit:x:122:
  7. saned:x:123:
  8. bixiaopeng:x:1000:
  9. sambashare:x:124:bixiaopeng
  10. bilaoshi:x:1002:bilaoshi
  11. alex2:x:999:bilaoshi

就可以看见相关的组后边加上了bilaoshi帐号。当然我们也可以编辑此文件



【每天一个Linux命令】10. 用户账号的新建/修改/删除以及密码修改 useradd/usemod/userdel/passwd的更多相关文章

  1. ***每天一个linux命令(5):rm 删除命令

    昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...

  2. 每天一个linux命令(10):more命令

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...

  3. 每天一个linux命令(10):cat

    1.命令简介 cat (concatenate,连接)命令将[文件]或标准输入组合输出到标准输出,如果没有指定文件,或者文件为"-",则从标准输入读取. 2.用法 cat [选项] ...

  4. 每天一个Linux命令 10

    文件处理命令:ln命令名称:ln 命令英文原意:link语法: ln -s [原文件] [目标文件] -s 创建软连接功能描述:生成链接文件 #ln -s /etc/issue /tmp/issue. ...

  5. 【转载】每天一个Linux命令

    目  录 每天一个linux命令(1)  : ls 命令 每天一个linux命令(2)  : cd 命令 每天一个linux命令(3)  : pwd 命令 每天一个linux命令(4)  : mkdi ...

  6. 2018/03/10 每日一个Linux命令 之 find

    每日一个Linux命令 2018-03-10 Linux 命令 find find [查找目录] [定义条件]   今天很累了,本来不想写了,但想到自己订的学习计划必须坚持下去,每天完成.   fin ...

  7. 2018/03/10 每日一个Linux命令 之 cksum

    每日一个Linux命令 2018-03-10 Linux 命令 cksum cksum [文件]  今天楼下的一个大妈去世了,不仅感叹,现如今,真的和以前不一样了,楼上楼下都不知道住的是谁? cksu ...

  8. 每天一个linux命令:cat(10)

    cat cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用 注意:当文件较大时,文本在屏幕上迅速 ...

  9. 64个命令,每天一个linux命令目录, shutdown,tee,rcp,

    每天一个linux命令目录 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令.学习的主要参考资料为: 1.<鸟哥的linux私房菜> 2.htt ...

随机推荐

  1. linux中class_create和class_register说明

    http://blog.csdn.net/angle_birds/article/details/16802099 本文介绍linux中class_create和class_register的相关使用 ...

  2. iOS开发--TableView详细解释

    -.建立 UITableView  DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];  [Data ...

  3. 命令行添加用户的“作为服务登录”权利(添加Windows用户的时候,门道不是一般的多)good

    1.打开控制台(“开始”|“运行”中输入:MMC) 2.“文件”菜单|“添加删除管理单元”|“添加...”|选“安全模板”|“关闭”. 3.在“C:\Windows\Security\template ...

  4. 屏蔽QQ聊天对话框中的广告

    原文地址: 怎么在QQ聊天对话框中屏蔽广告_百度经验 http://jingyan.baidu.com/article/48a42057ca12c1a924250402.html     QQ已经成为 ...

  5. struts采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架

    今天我用Ecipse搭建Struts框架,并且使用Struts框架编写一个最简单的例子,相信读者能够很容易的明白. Struts是当今Java比较流行的三大框架之一,三大框架是Struts,sprin ...

  6. Innodb引擎 long semaphore waits

    上一篇介绍了因为子表过多,导致innodb crash的情况,但crash的原因是long semaphore waits.long semaphore waits又为何物? 背景:Innodb使用了 ...

  7. Dubbo使用解析及远程服务框架

    this is a thub here Spring的Remoting框架 阿里巴巴的dubbo框架 RPC,RMI,JMS,Webservice的区别

  8. CentOS 7 安装JDK

    卸载原系统上的JDK: [root@admin ~]# java -version 查看需要卸载的JDK清单: [root@admin ~]# rpm -qa | grep java java-1.6 ...

  9. 【转】编译Android系统源码和内核源码

    原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事, ...

  10. Fine Uploader文件上传组件

    最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要 ...