版权声明:
#####################################################
本文内容来自《老男孩linux运维实战培训》学生―罗迪
如有转载,请务必保留本文链接及本内容版权信息。
欢迎广大运维同仁一起交流linux/unix网站运维技术!
QQ:923401910
E-mail:[email protected]
#####################################################
老男孩老师 QQ:49000448 31333741
网站地址:http://www.etiantian.org
老男孩博客:http://oldboy.blog.51cto.com
老男孩交流群246054962 208160987 22619930744246017
网站运维交流群:114580181 45039636 37081784
#####################################################
无论哪种操作系统都有用户和组的概念,当我们想要去管理系统时就会使用一个用户的身份去管理。Linux 是一个多用户的操作系统,用户和用户组的管理是系统管理员的重要工作之一。在 Linux 系统中,每一个用户对应一个帐号这个号我们称为(UID)。系统安装完成后,系统本身已创建了一些特殊用户,它们具有特殊的意义,其中最重要的是超级用户,即 root。
当我们登录系统时,系统并不会看你的用户名是什么,而是看用户的ID号。系统中的每一个用户账号对应的UID就是用户的ID 值,系统中每个用户的UID的值是唯一的,其中root用户的UID是0,如果把普通用户的UID 改为0,那么就和root共用一个UID,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID 。
刚刚我们说UID,那什么又是GID呢,其实GID和UID差不多,从数字0开始算GID为0的组让系统付予给root用户组;系统会预留一些较靠前的GID给系统虚拟用户用;每个系统预留的GID都有所不同,查看系统添加用户组默认的GID范围应该查看/etc/login.defs中的。
前面提到了系统中有root和一些系统默认的用户,那么还有其它的用户吗?有,好,我们下面就来看看linux系统中存在哪些用户,和用户所对应的UID和GID号。
Linux系统中的用户有root“系统超级管理员”、“普通用户”、“虚拟用户”以称系统用户这三类,虚拟用户无法登录系统,当一些程序需要运行时,程序就会去调用虚拟用户。
用户分类 |
UID/GID号范围 |
说明 |
root |
0 |
Root用户是系统超级管理员,具有至高无上的权力。 |
虚拟用户 |
1-499 |
虚拟用户是系统默认所建立的用户,一般来说我们不会去改变UID和GID号。 |
普通用户 |
500~65535 |
普通用户是由系统管理员所建立的用户,系统员可以 |
/etc/passwd和/etc/shadow文件的说明:
/etc/passwd这个文件主要存储了用户的信息,在该文件中的每一行都代表一个账号。每一行都是以“:”作为分隔符,分隔成了7个部分:
[root@localhost ~]# more /etc/passwd
root : x: 0 : 0 : root : /root : /bin/bash
账号密码UIDGID说明信息家目录SHELL
l账号:主要用来对应UID号
l密码:早期用户的密码存储在这个文件中,但这个文件的特性是所有程序都能够读取的。所以为了安全起见,现在的密码都存放到/etc/shadow文件中了。这里一般都用X来代替了,但是X不是用户真正的密码。
lUID:用户ID号(识别码),root用户的ID为“0”
lGID:与/etc/group有关,/etc/group与/etc/passwd的概念差不多
l说明信息栏:用来解释该账号的意义
l家目录:用户的家目录(用户登录时所进入的目录)默认所有用户的家目录为/home/
lSHELL:用于用户输入命令时的解释,默认的用户shell为bash,有一个shell很特殊,那就是/sbin/nologin 当用户把默认shell设置成该shell时,用户将无法登录系统。
/etc/shadow存储了用户的密码,该文件默认是不让任何人查看的(除ROOT外),该文件也是以“:”作为分隔符,分隔成9个部分:
[root@localhost ~]# more /etc/shadow
root:$6$5sbsryf7PWG.IogF$E.U/Vj4CDWC07UZv3EMtdDTRA1u23.X8IWUuMzw4ab8oEBaaofIaJ0Z1DyxyhlxDkgjCD6w.H62Xk.fW8Kiuc1:15893:0:99999:7:::
l用户账号:密码也要和账号对应
l密码: 用户真正的密码,该密码是通过加密的密码,如果该字符串第一个字符为(*)或(!)表示这个账号并不会用来登录。
l最近更改密码的日期:该字段记录“更该密码的那一天”,这日期是从1970年1月1日开始算的,起始为1到1971年1月1日为366,依次累加。
l密码不可更改的天数:该字段如果为“0”,表示用户随时可以更改密码。如果为5,那么5天之内,用户都无法更改密码。
l密码需要重新更改的天数:可以理解为密码保持有效的最大天数,如果为99999,表示密码不需要重新输入。
l密码更改期限前的警告期限:根据该字段值,发出密码失效前的警告提示
l密码过期的宽限时间:当过了警后告期限时用户还没有更改密码,使用密码失效了。那么还可以在该字段规定的时间范围里使用以前的密码进行登录,如果在这个天数后还是没有更改密码,那么该账号就会失效。
l账号失效时间:该字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
l保留:未用
/etc/group
该文件记录GID与用户名称的
[root@localhost ~]# cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
l用户组名称:组名称
l用户组密码:组密码,这个通常不需要设置,组密码存入/etc/gshadow文件中
lGID:用户组ID
l支持的账号名称:一个组加入了多个用户,那么这个字段就显示所有的用户
UID与GID设置文件/etc/login.defs,默认建立用户,用户UID为500。如果系统中已存在大于500的ID那么该用户的最终ID为“取最大+1”。但是在建立用户时使用了-r选项时,就会找“比500小的最大的那个ID+1”
[root@localhost home]# cat /etc/login.defs
MAIL_DIR/var/spool/mail
PASS_MAX_DAYS99999
PASS_MIN_DAYS0
PASS_MIN_LEN5
PASS_WARN_AGE7
UID_MIN500
UID_MAX60000
GID_MIN500
GID_MAX60000
了解了系统用户和组的相关概念后,我们如何去添加一个用户呢?添加用户我们使用useradd命令进行添加,接下来我们就来讲讲useradd的用法。
Useradd添加用户:
1.命令用法:
Useradd【选项】【用户名】
2.常用选项:
-u在创建用户的时候指定用户的uid
-g在创建用户时指定用户的组
-G指定用户的附加组
-s指定用户的默认登录shell
-e指定用户的失效时间“系统会在指定时间后2天才会生效”
-M建立用户时不建立家目录
-m建立用户时指定家目录位置
实例:
添加一个用户user1指定他的登录shell为/bin/sh
[root@mail ~]# useradd -s /bin/shuser1
[root@mail ~]# tail -1 /etc/passwd
user1:x:2005:2005::/home/user1:/bin/sh
添加一个用户user20 指定用户的UID为539,说明信息为user10c
[root@mail yum]# useradd -u 539 -c user10c user20
[root@mail yum]# tail /etc/passwd
cccc:x:2002:2002::/home/cccc:/bin/bash
usera:x:2003:2003::/home/usera:/bin/bash
userb:x:2004:2004::/home/userb:/bin/bash
user1:x:2005:2005::/home/user1:/bin/sh
user3:x:65535:2006::/home/user3:/bin/bash
user5:x:2006:2007::/home/user5:/bin/bash
user7:x:2007:2008::/home/user7:/bin/bash
opop:x:65534:2009::/home/opop:/bin/bash
xdd:x:2008:2010::/home/xdd:/bin/bash
user20:x:539:539:user10c:/home/user20:/bin/bash
设置密码用passwd命令:
当使用useradd添加一个用户后,该用户暂时是无法登录的,这时就需要给用户设置密码。
用法:passwd【用户】
如果当前用户是root,那么它就可以给任何一个用户设置密码。当前用户想更改密码,在终端中直接输入passwd即可。
方法一
[root@localhost home]# passwdluodi
Changing password for user luodi.
New password: ――有安全机制,不会显示输入信息
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple――提示密码太简单了,但还是可以通过
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost home]#
方法二
[luodi@localhost ~]$ passwd
Changing password for user luodi.
Changing password for luodi.
(current) UNIX password:
New password:
BAD PASSWORD: it is based on a dictionary word――普通用户设置密码要符合要求
普通用户符合要求如下:
l密码不能与账号相同
l密码尽量不要选用字典里面会出现的字符串
l密码需要超过8个字符
系统中添加一个用户后,同时会创建一个和用户名同名的组,那么我们有没有办法手工建立一个用户组呢?可以使用groupadd这个命令来实现,下面是该命令的一些用法。
groupadd
用法: groupadd [ -g gid] [-r]
-g:后面接特定的GID,用来直接给予某个GID
-r:建立系统用户组
[root@localhost /]# groupadd gpfile
[root@localhost /]# grep gpfile /etc/group
gpfile:x:506:
[root@localhost /]# groupadd -r gpfile1
[root@localhost /]# grep gpfile /etc/group
gpfile:x:506:
gpfile1:x:489:
加入组可以使用gpasswd
用法:gpasswd【groupname】
gpasswd【-A user1,......】【-M user2,user4..】 groupname
gpasswd【-rR】 groupname
:没有任何参数,表示给groupname设置一个密码,密码存放/etc/gshadow文件中
-A :将groupname的主控权交给后面的用户管理(该用户组的管理员)
-M:将某些账号加入这个用户组中
-r:将groupname的密码删除
-R:让groupname的密码栏失效,newgrp就不能使用了
实例:
[root@localhost ~]# gpasswd -M testuser,luodi grp――把testuser,luodi加入grp
[root@localhost ~]# cat /etc/group | grep grp
grp:x:506:testuser,luodi
使用usermod修改用户的信息,常用的选项有如下几种
用法: usermod 【-cdegGlsuLU】 username
-c<备注> 修改用户帐号的备注文字。
-d<登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s 修改用户登入后所使用的shell。
-u 修改用户ID。
-U 解除密码锁定。
实例:
[root@localhost home]# usermod -L luodi
[root@localhost home]# cat /etc/shadow | grep luodi
luodi:!$6$nt5SUHfQ$Wp6qgjPIA/uLdha80s.x2fzx/HJuFQ3QsOUgBBBPjPySzsuaCGeR1PcjL6NQPiHyjqggqIwyCiED8srv3BwIX0:15919:0:99999:7:::
删除用户
.userdel:删除用户
用法:userdel 【-r】【用户】
-r:连同家目录一起删除
删除时最好先执行“find/-userusername”查出整个系统内属于username的文件,然后再删除。
[root@localhost /]# userdel luodi――不带-r选项
[root@localhost /]# ls -ld /home/luodi/
drwx------ 5 501 502 4096 2013-07-29 20:19 /home/luodi/――发现目录还存在
[root@localhost /]#
[root@localhost /]# rm -rf /home/luodi/
[root@localhost /]# userdel-r testdir
[root@localhost /]#
[root@localhost /]# ls -ld /home/testdir
ls: cannot access /home/testdir: No such file or directory――发现没有这个目录
[root@localhost /]#
删除组使用groupdel
groupdel删除用户组
用法:groupdel【groupname】
[root@localhost ~]# groupdelgpfile
[root@localhost ~]#
注意
[root@mail yum]# groupdel ddd
groupdel: cannot remove the primary group of user 'ddd'
[root@mail yum]#
删除组总结:
如果一个组当前是属于一个用户的主属主的话,那么删除该组时就会提示如下信息