Linux用户和用户组管理

时间:2022-01-15 16:44:50

Llinux和其他的类UNIX系统一样是一个多用户、多任务的操作系统。多用户的特性允许多人在Linux中创建独立的账户来确保个人数据的安全性。而多任务机制允许多个用户同时登陆,同时使用系统的软硬件资源。
在linux操作系统中,每一个用户都有一个唯一的身份标识,称为用户ID(UID)。每一个用户至少属于一个用户组。用户组是由系统管理员创建,由多个用户组成的用户群体。每一个用户组也有一个唯一的身份标识,称为用户组ID。不同的用户和用户组对系统拥有不同的权限。对文件或目录的访问,以及对程序的执行都需要调用者拥有相符合的身份,同时一个正被执行的程序也相应的继承了调用者的所有权限。
Linux用户被划分为两类:一类是根用户(root用户),也称为超级用户;另一类是普通用户。根用户是系统的所有者,对系统拥有最高的权力,可以对所有文件、目录进行访问,可以执行系统中所有程序而不管文件、目录和程序的所有者的同意与否。普通用户的权限由系统管理员创建时赋予。普通用户通常只能管理属于自己的主文件,或者组内共享及完全共享的文件。根用户与windows系统中的administrator地位相当,但根用户在Linux系统中是唯一的,且不允许重新命名。
普通用户管理:包括添加新用户、删除用户、修改用户属性以及对现有用户的访问参数进行设置。与此密切相关的文件包括/etc/passwd、/etc/shadow以及/home目录下的文件。

添加新用户:

1.设置用户名称及密码
2.设置用户的UID。系统在 /etc/passwd文件中查找目前使用的大于或等于500的UID的最大编号,加1后赋予当前的新用户;若目前还没有大于500的编号,则将500赋予该用户。
3.添加该新用户所属的用户组。每一个用户都会属于一个或多个用户组。系统在添加新用户时默认添加的用户组与心用户名相同,同时会赋予该用户组一个GID,通常GID的编号与UID的编号相同。
4.创建以新用户的用户名为名称的主目录。在大多数的系统中,用户的主目录都被创建在一个特定的目录下,例如/home。各用户对自己的主目录有完全的读、写执行权限,其他用户只能依据该目录的权限设置进行访问。
5.设定用户的shell环境,默认是/bin/bash。
6.设定用户的失效时间,默认是99999天后。
7.设定失效前发出警告的天数,默认是失效前7天。

1.作用
useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户。
2.格式
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
3.主要参数
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的起始群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。
4.说明
useradd可用来建立用户账号,他和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

例:添加一个新用户student2,UID为502,用户组ID100(users用户组的ID是100),用户目录为/home/student2,用户默认shell为/bin/bash,账户失效日期为2016年10月30日,则其命令为?

#useradd student2 -u 502 -d /home/student2 -s /bin/bash -e 10/30/16 -g 100

显示/etc/passwd文件最后一行

#tail -1 /etc/passwd
student2:x:502:100::/home/student2:/bin/bash

显示/etc/shadow文件最后一行

#tail -1 /etc/shadow
student2:!!:15860:0:99999:7:13816

解析/etc/passwd文件
passwd文件存储着用户的相关信息,包括用户名、密码和主目录位置等。根用户对该文件有读和写的权限,普通用户只有读权限。Linux2.0以上版本为了增强系统的安全性,采用了用户基本信息与密码分开存储的方法,密码已不再存放在/etc/passwd文件中,而是转存到了同目录下的/etc/shadow文件中,其原来存放密码的位置用“x”标识来表示。
格式如下:username:encypted password:UID:GID:full name:home directory:login shell

#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

用户名:密码:UID:GID:注释:用户家目录:用户的shell
用户名是用户在系统中的标识,通常长度不超过8位,由字母,数字,下划线或句点组成。
密码:该字段存放加密后的用户密码。由于现在的系统大多采用shadow技术,该字段通常只存放一个特殊字“x”真正的密码已经转移到/etc/shadow文件中。
如果该字段的第一个字符为#则表示该用户已被停用,即系统暂时不再允许该用户登录,但该用户的用户信息和相应的主目录及属主文件仍保存在系统中,并没有被系统删除。
用户表示号:UID是用户在系统中的唯一标识,必须是整数,通常和用户名一一对应。当有多个用户名对应同一个UID时,系统会把他们视为同一个用户。UID的取值范围是0~65535.0~499一般由系统自己保留,其中0由根用户占用,新增用户的UID和GID需要大于或等于500。
用户组标识号:GID该字段记录用户所属的用户组。用户组的具体定义可以查看/etc/group文件。
登陆目录:该目录是用户登陆系统后的默认目录,通常就是用户的主目录,一般在/home下。根用户登陆系统默认的登陆目录是/root。
登陆shell:用户以文本方式登陆系统后需要启动一个shell进程。shell是用户和linux内核之间的接口程序,负责将用户的操作传递给内核,所以shell通常也被称为命令解释器。在linux系统中有多种shell可以使用,各shell之间略有差别,常用的包括sh(Bourne Shell)、csh(C Shell)、ksh(Korn Shell)、tcsh(TENEX/TOPS-20 type C Shell)和bash(Bourne Again Shell)等。其中C Shell可以提供方便的用户界面设计,语法与C语言很相似,而Korn Shell兼有C Shell和Bourne Again Shell的优点。

解析/etc/shadow文件
由于普通用户可以读取/etc/passwd文件,因此密码直接保存在该文件中是极不安全的,很可能被别有用心的人获取并破译。目前的操作系统在密码保护方面大多采用了Shadow Passwords及MD5口令保护功能。Shadow Passwords技术,即影子密码,是将加密的口令放在另一个文件/etc/shadow文件中,并对/etc/shadow文件设置严格的权限,只有根用户可以读取该文件。
格式如下:
username:Encypted password:Number of days:Minimum password life:Maximum password life:Warning period:Disable account:Account expiration:Reserver

#cat /etc/shadow
root:$6$NatgviEA$Q61tXao4v7U1idFuwwyRfIZcptMJaMrWEW/tEJfT.dVdnbZJ8pMRGiJ0U7DJCeliR7sA37W5wm5LjOQyLywld1:16849:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::

每个用户占一行,一行9个字段,前八个字段分别表示用户名、密码、从1970年到上次修改密码的天数,密码必须连续使用的天数、密码有效期、密码失效前警告的天数、从密码过期到彻底停用的天数、账号失效日期,最后一段作为保留字段。
username:用户的登录名
Encypted password:已加密的密码
Number of days:从1970年1.1到上次修改密码的天数
Minimum password life:至少在设定天数内密码是不能修改的,可设置为0
Maximum password life:在设定的天数之后必须修改密码
Warning period:在密码失效前,提前提醒用户密码即将失效的天数
Disable account:设定密码过期之后,如果该账号仍没有被使用,则停用该账号的天数
Account expiration:设定账号失效的时间。如果到这个时间还没有使用该账号,用户将不能以该账号身份登陆。时间的格式为YYYY-MM-DD,也可以是距离1970年1.1的天数
Reserver:系统保留

修改用户的账号:修改用户的账号包括更改用户的用户名、密码、主目录、所属用户组和登陆shell等信息。
1.修改用户基本信息usermod命令
 -c<备注>  修改用户帐号的备注文字。
 -d登入目录>  修改用户登入时的目录。 加-m命令会将原文件夹中的文件转移到新文件里。
 -e<有效期限>  修改帐号的有效期。格式为YYYY-MM-DD.
 -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
 -g<群组>  修改用户所属的群组。
 -G<群组>  修改用户所属的附加群组。
 -l<帐号名称>  修改用户帐号名称。
 -L  锁定用户密码,使密码无效。
 -s  修改用户登入后所使用的shell。
 -u  修改用户ID。
 -U  解除密码锁定。

usermod 不 允 许 你 改 变 正 在线 上 的 使 用 者 帐 号 名 称 。 当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执 行 任 何 程 序。 你 需 手 动 更 改 使 用 者 的 crontab 档 。 也 需 手 动 更 改 使 用 者 的 at 工 作 档 。 采 用 NIS server 须 在 server 上 更 动 相 关 的 NIS 设 定 。
应用举例:
1、将 newuser2 添加到组 staff 中
usermod -g staff newuser2
2、修改 newuser 的用户名为 newuser1
usermod -l newuser1 newuser
3、锁定账号 newuser1
usermod -L newuser1
4、解除对 newuser1 的锁定
usermod -U newuser1

修改用户密码
passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码;

passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码;请看下面的例子;
[root@localhost ~]# passwd 注:没有加任何用户,我是用root用户来执行的passwd 表示修改root用户的密码;下面也有提示;
Changing password for user root.
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:验证新密码;
passwd: all authentication tokens updated successfully. 注:修改root密码成功;

如果是普通用户执行passwd 只能修改自己的密码;

如果新建用户后,要为新用户创建密码,则用 passwd 用户名 ,注意要以root用户的权限来创建;

[root@localhost ~]# passwd beinan 注:更改或创建beinan用户的密码;
Changing password for user beinan.
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:再输入一次;
passwd: all authentication tokens updated successfully. 注:成功;

普通用户如果想更改自己的密码,直接运行passwd即可;比如当前操作的用户是beinan;

[beinan@localhost ~]$ passwd
Changing password for user beinan. 注:更改beinan用户的密码;
(current) UNIX password: 注:请输入当前密码;
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:确认新密码;
passwd: all authentication tokens updated successfully. 注:更改成功;

2、passwd 几个比较重要的参数;

[root@localhost beinan]# passwd –help
Usage: passwd [OPTION…]
-k, –keep-tokens keep non-expired authentication tokens
注:保留即将过期的用户在期满后能仍能使用;
-d, –delete delete the password for the named account (root only)
注:删除用户密码,仅能以root权限操作;
-l, –lock lock the named account (root only)
注:锁住用户无权更改其密码,仅能通过root权限操作;
-u, –unlock unlock the named account (root only)
注:解除锁定;
-f, –force force operation
注:强制操作;仅root权限才能操作;
-x, –maximum=DAYS maximum password lifetime (root only) 注:两次密码修正的最大天数,后面接数字;仅能root权限操作;
-n, –minimum=DAYS minimum password lifetime (root only) 注:两次密码修改的最小天数,后面接数字,仅能root权限操作;
-w, –warning=DAYS number of days warning users receives before 注:在距多少天提醒用户修改密码;仅能root权限操作;
password expiration (root only)
-i, –inactive=DAYS number of days after password expiration when an 注:在密码过期后多少天,用户被禁掉,仅能以root操作;
account becomes disabled (root only)
-S, –status report password status on the named account (root 注:查询用户的密码状态,仅能root用户操作;
only)
–stdin read new tokens from stdin (root only)

删除用户
userdel -r [username]
执行前需要查看是否在线运行程序以及是否有定时任务
查询方法

#ps -aux | grep "student"
student 4001 0.0 0.5 4712 666 ? s 12:15 0:00 stidentproc

#crontab -u student -r

用户的临时禁用
可以在passwd文件用户名前加#或在shadow文件密码字段前加*或!

所有选项的默认配置在/etc/login.defs文件里

根用户管理
密码修改同样使用passwd命令
普通用户切换root
使用su命令 临时切换至root权限
使用完毕可使用exit命令推出root
也可以使用su切换至其他用户

当忘记root密码时可以进入单用户模式进行修改,也可以使用光盘挂在/mnt/sysimage目录下删除shadow文件中的密码部分。

用户组的管理
添加新用户组
groupadd
-g:指定新建工作组的id,默认从大于499中选取;
-r:创建系统工作组,系统工作组的组ID小于500;
-o:允许添加组ID号不唯一的工作组。
-f:加入已经有的组时,发展程序退出。

#groupadd -g 502 student

修改用户组属性
groupmod
-g <群组识别码>  设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n <新群组名称>  设置欲使用的群组名称。

#groupmod -g 550 -n director student

一个用户在多个用户组间切换

newgrp [-] [group]

删除用户组
groupdel 必须在所有用户都退出的情况下才能删除组。

解析/etc/group文件
Group_name:用户组的名称
Encrypted_password:用户的密码,用x代替
GID:用户组标识
User_list:组成员列表

#cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon

解析/etc/gshadow文件

#cat /etc/gshadow
root:::root
bin:::root,bin,daemon

Group_name:用户组名称
Encrypted_password:用户组的密码,该字段用于保存加密后的用户组密码
Group administrators:用户组的管理员账号
User_list:组成员列表

使用chage命令查询账户有效期 一般用-l命令

who命令查询登陆用户
last查询最近用户登录时间

账号管理命令
1.id命令
用于显示用户当前UID,GID和用户所属的组的列表
2.whoami命令
用于显示当前用户的名称
3.groups命令
用于显示指定用户所属的用户组,如果未指定则显示当前用户所属的组
4.newgrp命令
用于新建分组
5.finger命令
用于查找并显示用户信息。
6.who命令
显示当前登录用户的用户名,登陆终端,登陆时间以及登陆地址
7.w命令
用于显示当前登陆的所有用户的信息。
8.cnfin命令
修改用户的基本信息。执行该命令系统会进入交互模式,依次询问用户的真实姓名、住址、办公电话和家庭电话。
9.write命令
使用write命令,可以将信息实时传递给登陆的用户或终端。通过在命令行指定用户或终端可以控制信息发往何处。不带任何选项可以将信息发给所有登陆用户。

用户创建共享目录
例:项目组成员s1.s2.s3需要创建一个公共目录用于存放项目开发中的文件。可以将这些用户组织到一个公共组并创建一个共享目录。通过设置SGID位,允许改组中的任何用户把文件复制到共享目录中,并允许改组其他成员读取共享目录中的所有文件。
1.使用groupadd创建一个公共组

#groupadd student

2.使用useradd创建s1,s2,s3账号,并给每个用户分配一个密码

#useradd s1 -g student
#passwd s1

#useradd s2 -g student
#passwd s2

#useradd s3 -g student
#passwd s2

3.创建一个名为/home/student的新共享目录。对于拥有这个目录的用户和组,使用chmod 770 /home/student命令给这个目录分配读、写和执行权限(rwx)。

#mkdir /home/student
#chmod 770 /home/student

4.在共享目录上配置SGID位,这将使得拥有这个目录的组中的所有用户都能够拥有所有权级别的权限

#chmod g+s /home/student

5.使用chgrp命令为这个目录设置所有权

#chgrp student /home/student