linux⽤户及组相关⽂件介绍
⽤户和组⽂件介绍
1.⽤户账号⽂件:passwd
passwd命令⽤于设置⽤户的认证信息,包括⽤户密码、密码过期时间等。系统管理者则能⽤它管理系统⽤户的密码。只有管理者可以指定⽤户名称,⼀般⽤户只能变更⾃⼰的密码。
选项
-d:删除密码,仅有系统管理者才能使⽤;
-f:强制执⾏;
-k:设置只有在密码过期失效后,⽅能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使⽤;
-u:解开已上锁的帐号。
知识扩展
与⽤户、组账户信息相关的⽂件
存放⽤户信息:
/etc/passwd
/etc/shadow
存放组信息:
/etc/group
/etc/gshadow
⽤户信息⽂件分析(每项⽤:隔开)
例如:jack:X:503:504:::/home/jack/:/bin/bash
jack  //⽤户名
X  //⼝令、密码
503  //⽤户(0代表root、普通新建⽤户从500开始)
504  //所在组
:  //描述
/home/jack/  //⽤户主⽬录
/bin/bash  //⽤户缺省Shell
组信息⽂件分析
例如:jack:$!$::13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的⼝令
13801  //创建⽇期与今天相隔的天数
0  //⼝令最短位数
99999  //⽤户⼝令
7  //到7天时提醒
*  //禁⽤天数
*  //过期天数
实例
如果是普通⽤户执⾏passwd只能修改⾃⼰的密码。如果新建⽤户后,要为新⽤户创建密码,则⽤passwd⽤户名,注意要以root⽤户的权限来创建。
[root@localhost ~]# passwd linuxde    //更改或创建linuxde⽤户的密码;
Changing password for user linuxde.
New UNIX password:          //请输⼊新密码;
Retype new UNIX password:  //再输⼊⼀次;
passwd: all authentication tokens updated successfully. //成功;
普通⽤户如果想更改⾃⼰的密码,直接运⾏passwd即可,⽐如当前操作的⽤户是linuxde。
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde⽤户的密码;
(current) UNIX password:  //请输⼊当前密码;
New UNIX password:        //请输⼊新密码;
Retype new UNIX password:  //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功;
⽐如我们让某个⽤户不能修改密码,可以⽤-l选项来锁定:
[root@localhost ~]# passwd -l linuxde    //锁定⽤户linuxde不能更改密码;
Locking password for user linuxde.
passwd: Success          //锁定成功;
[linuxde@localhost ~]#  linuxde  //通过su切换到linuxde⽤户;
[linuxde@localhost ~]$ passwd      //linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password:          //输⼊linuxde的当前密码;
passwd: Authentication token manipulation error    //失败,不能更改密码;
再来⼀例:
[root@localhost ~]# passwd -d linuxde  //清除linuxde⽤户密码;
Removing password for user linuxde.
passwd: Success                        //清除成功;
[root@localhost ~]# passwd -S linuxde    //查询linuxde⽤户密码状态;
Empty password.                        //空密码,也就是没有密码;
注意:当我们清除⼀个⽤户的密码时,登录时就⽆需密码,这⼀点要加以注意。
/etc/passwd每⼀个分段的含义:
1、账户名称:
⽤来对应UID
2、密码:
早起Unix系统的密码就是防⽌这个字段上,但是英⽂这个档案的特性是所有程序都能读取,容易造成密码数据被窃取
应此后来就将这个字段的密码数据放到了/etc/shadow中了,所以这⾥使⽤【X】,
3、UID:
这就是使⽤者标⽰符,UId有以下限制:
ID            该ID使⽤的者特性
0            UID是0时,代表这个账号是【系统管理员】!所以当你的其他啊账号名称也具有root
的权限是,就将该账号的UID改为0即可,⼀个系统上⾯的系统管理不见得只有root,
不过不建议有多个UID为0的账号。
1~499        保留给系统使⽤的ID,默认500以下的数字给系统作为保利账号只是⼀个习惯。
由于系统上⾯启动的服务希望使⽤较⼩的权限去运⾏,应此不希望使⽤root的⾝份去执⾏
这些服务,所以我们就得要提供这些运⾏中的程序的拥有者账号才⾏,这些系统账号通常是不可登陆的,
所以才会有/sbin/nologin这个特殊的shell的存在。
500~        ⼀般使⽤者
4、GID:
这个与/etc/group有关!其实/etc/group的观念与/etc/passwd差不多,应⽤来规范组名
5、⽤户信息说明栏:
6、家⽬录:
root的家⽬录在/root,所以当root登陆的之后,就会⽴刻跑到/root⽬录⾥头,如果坏、这个账号需要使⽤
特别⼤的空间,就可以对这个字段进⾏修改,已移动到其他同硬盘。默认的⽤户家⽬录在/home/youIdname
/etc/shadow⽂件结构:
8、Shell:
定义⽤户登陆系统使⽤什么shell,这⾥需要注意,有⼀个shell可以⽤来特带成让账户⽆法取得shell环境的登陆动作!
那就是/sbin/nologin这个特殊东西,也可以⽤来制作pop邮件账号者的数据。(Post Office Protocol)
通过查看“/etc/passwd”⽂件,可以得到如下完整的系统账号⽂件
2.⽤户影⼦⽂件——shadow
/etc/shadow
由于shadow⽂件的权限,所以,只有root可以读
vi /etc/shadow
⼀共有九列信息:
第⼀列表⽰⽤户名;
第⼆列表⽰经过加密之后的密码,如果密码是!!或者*,表⽰没有密码,不能登录;
第三列表⽰密码的最后⼀次修改⽇期,使⽤1970.1.1作为标准时间,每过⼀天时间戳+1;
第四列表⽰两次密码的修改间隔;
第五列表⽰密码的有效期;
第六列表⽰密码到期之前的警告时间;
第七列表⽰密码过期之后的宽限天数(0表⽰到期后⽴即失效,-1则永久不失效);
第⼋列表⽰账号失效时间,要⽤时间戳表⽰,时间戳换算为⽇期:date -d "1970-01-01 18382 days",⽇期换算为时间戳:echo $(($(date --date="2020/05/13" +%s)/86400+1));第九列保留
3.⽤户组账号⽂件——group和gshadow
group:
/ect/group ⽂件是⽤户组配置⽂件,即⽤户组的所有信息都存放在此⽂件中。
此⽂件是记录组 ID(GID)和组名相对应的⽂件。前⾯讲过,etc/passwd ⽂件中每⾏⽤户信息的第四个字段记录的是⽤户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group ⽂件中查。
/etc/group ⽂件的内容可以通过 Vim 看到:
可以看到,此⽂件中每⼀⾏各代表⼀个⽤户组。在前⾯章节中,我们曾创建 lamp ⽤户,系统默认⽣成⼀个 lamp ⽤户组,在此可以看到,此⽤户组的 GID 为 502,⽬前它仅作为 lamp ⽤户的初始组。
各⽤户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:密码:GID:该⽤户组中的⽤户列表
接下来,分别介绍各个字段具体的含义。
组名
也就是是⽤户组的名称,有字母或数字构成。同 /etc/passwd 中的⽤户名⼀样,组名也不能重复。
组密码
和 /etc/passwd ⽂件⼀样,这⾥的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow ⽂件中。
不过,⽤户设置密码是为了验证⽤户的⾝份,那⽤户组设置密码是⽤来做什么的呢?⽤户组密码主要是⽤来指定组管理员的,由于系统中的账号可能会⾮常多,root ⽤户可能没
有时间进⾏⽤户的组调整,这时可以给⽤户组指定组管理员,如果有⽤户需要加⼊或退出某⽤户组,可以由该组的组管理员替代 root 进⾏管理。但是这项功能⽬前很少使⽤,我们也很少设置组密码。如果需要赋予某⽤户调整某个⽤户组的权限,则可以使⽤ sudo 命令代替。
组ID (GID)
就是组的 ID 号,Linux 系统就是通过 GID 来区分⽤户组的,同⽤户名⼀样,组名也只是为了便于管理员记忆。
这⾥的组 GID 与 /etc/passwd ⽂件中第 4 个字段的 GID 相对应,实际上,/etc/passwd ⽂件中使⽤ GID 对应的组名,就是通过此⽂件对应得到的。
组中的⽤户
此字段列出每个组包含的所有⽤户。需要注意的是,如果该⽤户组是这个⽤户的初始组,则该⽤户不会写⼊这个字段,可以这么理解,该字段显⽰的⽤户都是这个⽤户组的附加⽤户。
举个例⼦,lamp 组的组信息为 "lamp:x:502:",可以看到,第四个字段没有写⼊ lamp ⽤户,因为 lamp 组是 lamp ⽤户的初始组。如果要查询这些⽤户的初始组,则需要先到
/etc/passwd ⽂件中查看 GID(第四个字段),然后到 /etc/group ⽂件中⽐对组名。
每个⽤户都可以加⼊多个附加组,但是只能属于⼀个初始组。所以我们在实际⼯作中,如果需要把⽤户加⼊其他组,则需要以附加组的形式添加。例如,我们想让 lamp 也加⼊root 这个组,那么只需要在第⼀⾏的最后⼀个字段加⼊ lamp,即 root:x:0:lamp 就可以了。
⼀般情况下,⽤户的初始组就是在建⽴⽤户的同时建⽴的和⽤户名相同的组。
到此,我们已经学习了/etc/passwd、/etc/shadow、/etc/group,它们之间的关系可以这样理解,即先在 /etc/group ⽂件中查询⽤户组的 GID 和组名;然后在 /etc/passwd ⽂件中查该 GID 是哪个⽤户的初始组,同时提取这个⽤户的⽤户名和 UID;最后通过 UID 到 /etc/shadow ⽂件中提取和这个⽤户相匹配的密码。
gshadow:
前⾯讲过,/etc/passwd ⽂件存储⽤户基本信息,同时考虑到账户的安全性,将⽤户的密码信息存放另⼀个⽂件 /etc/shadow 中。本节要将的 /etc/gshadow ⽂件也是如此,组⽤户信息存储在 /etc/group ⽂件中,⽽将组⽤户的密码信息存储在 /etc/gshadow ⽂件中。
⾸先,我们借助 Vim 命令查看⼀下此⽂件中的内容
⽂件中,每⾏代表⼀个组⽤户的密码信息,各⾏信息⽤ ":" 作为分隔符分为 4 个字段,每个字段的含义如下:
组名:加密密码:组管理员:组附加⽤户列表
组名
同 /etc/group ⽂件中的组名相对应。
组密码
对于⼤多数⽤户来说,通常不设置组密码,因此该字段常为空,但有时为 "!",指的是该组没有组密码,也不设有组管理员。
组管理员
从系统管理员的⾓度来说,该⽂件最⼤的功能就是创建组管理员。那么,什么是组管理员呢?
考虑到 Linux 系统中账号太多,⽽超级管理员 root 可能⽐较忙碌,因此当有⽤户想要加⼊某组时,root 或许不能及时作出回应。这种情况下,如果有组管理员,那么他就能将⽤户加⼊⾃⼰管理的组中,也就免去⿇烦 root 了。
不过,由于⽬前有 sudo 之类的⼯具,因此组管理员的这个功能已经很少使⽤了。
组中的附加⽤户
该字段显⽰这个⽤户组中有哪些附加⽤户,和 /etc/group ⽂件中附加组显⽰内容相同。
4.使⽤pwck和grpck命令验证⽤户和组⽂件
pwck:
pwck命令⽤来验证系统认证⽂件/etc/和/etc/shadow的内容和格式的完整性。
选项
-q:仅报告错误信息;
-s:以⽤户排序⽂件“/etc/passwd”和“/etc/shadow”;
-r:只读⽅式运⾏指令。
实例pwck /etc/passwd
user '': directory '/var/spool/lpd' does not exist
user 'news': directory '/var/spool/news' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'www-data': directory '/var/www' does not exist
user 'list': directory '/var/list' does not exist
user 'irc': directory '/var/run/ircd' does not exist
user 'gnats': directory '/var/lib/gnats' does not exist
user 'nobody': directory '/nonexistent' does not exist
user 'syslog': directory '/home/syslog' does not exist
user 'couchdb': directory '/var/lib/couchdb' does not exist
user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist
user 'usbmux': directory '/home/usbmux' does not exist
user 'haldaemon': directory '/var/run/hald' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'saned': directory '/home/saned' does not exist
user 'hplip': directory '/var/run/hplip' does not exist
pwck:⽆改变
grpck:
grpck命令⽤于验证组⽂件的完整性,在验证之前,需要先锁定(lock)组⽂件/etc/group和/etc/shadow。
grpck命令检查数据是否正确存放,每条记录是否都包含⾜够的信息,是否有⼀个唯⼀的组名,是否包含正确的⽤户,是否正确设置了组的管理员等。grpck检查发现错误以后,
在命令⾏提⽰⽤户是否删除错误的记录。如果⽤户没有明确回答删除记录,grpck终⽌运⾏。
选项
-r:只读模式;
-s:排序组。
实例
对组账号和影⼦⽂件进⾏验证:
grpck  //必须以管理员⾝份运⾏
grpck /etc/group /etc/gshadow  //后⾯两句⼀样,如果没有输出信息,则表⽰没有错误。
测试错误的实例:
check_user:x: >> /etc/group    //添加⼀⾏错误的格式数据
/etc/group |  check_user
check_user:x:  //这⼉GID字段为空,是错误的。
grpck /etc/group
invalid group  entry
delete line 'check_user:x:'? y      //提⽰是否删除
grpck: the files have been updated  //这时已经删除了错误的⾏,提⽰⽂件已经更新。
cat /etc/group  | grep check_user  //没有查到,已经删除了。
5.使⽤useradd命令添加⽤户
useradd命令⽤于Linux中创建的新的系统⽤户。useradd可⽤来建⽴⽤户帐号。帐号建好之后,再⽤设定帐号的密码.⽽可⽤删除帐号。使⽤useradd指令所建⽴的帐号,实际上
是保存在/etc/passwd⽂本⽂件中。
在Slackware中,adduser指令是个script程序,利⽤交谈的⽅式取得输⼊的⽤户帐号资料,然后再交由真正建⽴帐号的useradd命令建⽴新⽤户,如此可⽅便管理员建⽴⽤户帐
号。在Red Hat Linux中,adduser命令则是useradd命令的符号连接,两者实际上是同⼀个指令。
选项
-c<;备注>:加上备注⽂字。备注⽂字会保存在passwd的备注栏位中;
-d<;登⼊⽬录>:指定⽤户登⼊时的启始⽬录;
-D:变更预设值;
-e<;有效期限>:指定帐号的有效期限;
-f<;缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<;组>:指定⽤户所属的组;
-G<;组>:指定⽤户所属的附加组;
-m:⾃动建⽴⽤户的登⼊⽬录;
-M:不要⾃动建⽴⽤户的登⼊⽬录;
-n:取消建⽴以⽤户名称为名的组;
-r:建⽴系统帐号;
-s<shell>:指定⽤户登⼊后所使⽤的shell;
-u<uid>:指定⽤户。
实例
新建⽤户加⼊组:
useradd –g sales jack –G company,employees    //-g:加⼊主要组、-G:加⼊次要组
建⽴⼀个新⽤户账户,并设置ID:
useradd caojh -u 544
需要说明的是,设定ID值时尽量要⼤于500,以免冲突。因为Linux安装后会建⽴⼀些特殊⽤户,⼀般0到499之间的值留给bin、这样的系统账号。
应⽤实例
建⽴⼀个新⽤户账户testuser1,并设置UID为544,主⽬录为/usr/testuser1,属于users组:
1. #useradd -u 544 -d /usr/testuser1  -g users -m  testuser1    //加-m 如果主⽬录不存在则⾃动创建
⽰例
使⽤管理员账号登陆系统,建⽴⽤户tmp_3452 密码3sdt5:Eawhg
1. 添加⽤户命令:
2. adduser tmp_3452
3. 修改密码命令:
4. passwd tmp_3452
在系统出现提⽰输⼊密码是输⼊密码:3sdt5:Eawhg 系统提⽰输⼊确认密码后再输⼊⼀次。OK添加成功。
6.使⽤usermod命令修改⽤户信息
usermod命令⽤于修改⽤户的基本信息。usermod命令不允许你改变正在线上的使⽤者帐号名称。当usermod命令⽤来改变user ,必须确认这名user没在电脑上执⾏任何程序。你需⼿动更改使⽤者的档。也需⼿动更改使⽤者的⼯作档。采⽤NIS serve 选项
-c<;备注>:修改⽤户帐号的备注⽂字;
-d<;登⼊⽬录>:修改⽤户登⼊时的⽬录;
-e<;有效期限>:修改帐号的有效期限;
-
f<;缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<;组>:修改⽤户所属的组;
linux创建新用户和密码
-G<;组>;修改⽤户所属的附加组;
-l<;帐号名称>:修改⽤户帐号名称;
-L:锁定⽤户密码,使密码⽆效;
-s<shell>:修改⽤户登⼊后所使⽤的shell;
-u<uid>:修改⽤户ID;
-U:解除密码锁定。
实例
将newuser2添加到组staff中:
usermod -G staff newuser2
修改newuser的⽤户名为newuser1:
usermod -l newuser1 newuser
锁定账号newuser1:
usermod -L newuser1
解除对newuser1的锁定:
usermod -U newuser1
7.使⽤userdel命令删除⽤户
userdel命令⽤于删除给定的⽤户,以及与⽤户相关的⽂件。若不加选项,则仅删除⽤户帐号,⽽不删除相关⽂件。
选项
-f:强制删除⽤户,即使⽤户当前已登录;
-r:删除⽤户的同时,删除与⽤户相关的所有⽂件。
实例
userdel命令很简单,⽐如我们现在有个⽤户linuxde,其家⽬录位于/var⽬录中,现在我们来删除这个⽤户:
userdel linuxde      //删除⽤户linuxde,但不删除其家⽬录及⽂件;
userdel -r linuxde    //删除⽤户linuxde,其家⽬录及⽂件⼀并删除;
请不要轻易⽤-r选项;他会删除⽤户的同时删除⽤户所有的⽂件和⽬录,切记如果⽤户⽬录下有重要的⽂件,在删除前请备份。
其实也有最简单的办法,但这种办法有点不安全,也就是直接在/etc/中删除您想要删除⽤户的记录;但最好不要这样做,/etc/passwd是极为重要的⽂件,可能您⼀不⼩⼼会操作失
误。
除了使⽤ userdel 命令删除⽤户,还可以⼿动⽅式删除,毕竟通过前⾯的学习,我们已经知道与⽤户相关信息的存储位置。虽然这样做没有实际意义,但对于初学者来说,可以加深对 userdel 命令的理解。
⼿动删除指定⽤户的具体操作如下:
#建⽴新 lamp ⽤户
[root@localhost ~]# useradd lamp
[root@localhost ~]# passwd lamp
#为 lamp ⽤户设置密码,由此 lamp ⽤户才算是创建成功
#下⾯开始⼿动删除 lamp
[root@localhost ~]# vi /etc/passwd
lamp:x:501:501::/home/lamp:/bin/bash  <--删除此⾏
#修改⽤户信息⽂件,删除lamp⽤户⾏
[root@localhost ~]#vi /etc/shadow
lamp:$6$KoOYtcOJ $56Xk9vp3D2vMRBxibNOn.21cVJ9onbW8IHx4WrOx6qBqfGa9U3mjMsGjqYnj L/4t3zt3YxElce2X8rbb12x4a0:15716:0:99999:7:::  <--删除此⾏
#修改影⼦⽂件,删除lamp⽤户密码⾏,注意,这个⽂件的权限是000,所以要强制保存
[root@localhost ~]#vi /etc/group
lamp:x:501:  <--删除此⾏
#修改组信息⽂件,删除lamp组信息
[root@localhost ~]#vi /etc/gshadow
lamp:!::  <--删除此⾏
#修改组影⼦⽂件,删除lamp组密码信息。同样注意需要强制保存
[root@localhost ~]# rm -rf /var/spod/mail/lamp  #删除⽤户邮箱
[root@localhost ~]# rm -rf/home/lamp/  #删除⽤户的家⽬录
#⾄此,⽤户彻底删除,再新建⽤户lamp。如果可以正常建⽴,则说明我们⼿⼯删除⼲净了
[root@localhost ~]# useradd lamp
[root@localhost ~]# passwd lamp
#重新建⽴同名⽤户,没有报错,说明前⾯的⼿⼯删除是可以完全删除⽤户的
⼿动删除⽤户,仅是为了让读者对 userdel 命令理解地更透彻,实际使⽤中,使⽤ userdel 删除⽤户更⽅便。
最后需要⼤家注意的是,如果要删除的⽤户已经使⽤过系统⼀段时间,那么此⽤户可能在系统中留有其他⽂件,因此,如果我们想要从系统中彻底的删除某个⽤户,最好在使⽤ userdel 命令之前,先通过 find -user ⽤户名命令查出系统中属于该⽤户8.使⽤groupadd命令创建⽤户组
groupadd命令⽤于创建⼀个新的⼯作组,新⼯作组的信息将被添加到系统⽂件中。
选项
-f,--force 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与-g⼀起使⽤,并且指定的GID_MIN已经存在时,选择另⼀个唯⼀的GID(即-g关闭)。
-g,--gid GID 这个值必须是唯⼀的,除⾮使⽤-o选项。但必须是⾮负的。默认值是使⽤⼤于或等于GID_MIN的最⼩值,并且⼤于每个其他组。
-K,--key KEY=VALUE 重写/etc/login.defs默认值(GID_MIN,GID_MAX和其他)。可以指定多个K选项。⽰例:-K GID_MIN=100 –KGID_MAX=499。注意:-K GID_MIN=10,GID_MAX=499不能⼯作。
-o,--non-unique 此选项允许添加⼀个⾮唯⼀的GID值。
-p,--password PASSWORD 为新组使⽤此加密过的密码。默认为禁⽤密码。注意:不推荐使⽤这个选项,因为密码(或加密过的密码)会被⽤户通过列出这个过程⽽看到。您应该确保密码符合系统的密码政策。
-r,--system 创建⼀个系统组。新的系统组数字标识符在SYS_GID_MIN到SYS_GID_MAX范围内选择,定义在login.defs中⽽不是GID_MIN到GID_MAX。
-R,--root CHROOT_DIR 将修改应⽤到CHROOT_DIR⽬录,并使⽤配置。
实例
建⽴⼀个新组,并设置组ID加⼊系统:
groupadd -g 344 linuxde
此时在/etc/⽂件中产⽣⼀个组ID(GID)是344的项⽬。
8.使⽤groupmod命令修改⽤户属性
groupmod命令更改组识别码或名称。需要更改组的识别码或名称时,可⽤groupmod指令来完成这项⼯作。
选项
-g<;组识别码>:设置欲使⽤的组识别码;
-o:重复使⽤组识别码;
-n<;新组名称>:设置欲使⽤的组名称。
实例
修改组名
[root@runoob ~]# groupadd linuxso

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。