一,用户/组简介
Linux是一个多用户操作系统,允许多个用户同时登录系统使用系统资源。
一种秩序以区分不同用户。这就是用户ID,即账户、用户共有两种。超级用户和普通用户。超级用户又被成为管理员,用来管理整个系统,因此具有所有权限(当然也具有摧毁整个系统的能力,一定要慎用)。普通用户拥有一般的、可设定的权限,以进行正常工作。组是用户的集合。创建用户时,若没有指定属组,系统会创建一个与其同名的私有组。此私有组只包含其一个用户。当用户登录时,其当前所属的组为主组,其它组成为附加组。
安全上下文机制:
- 进程以其发起者的身份运行,即进程对文件的访问前线,取决于发起此进程的用户的权限。
- 系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登陆系统。
- 系统组:与系统用户类似
二,Linux的用户/组系统文件
1,/etc/passwd
/etc/passwd为用户的信息库(The /etc/passwd file is a text file that describes user login accounts for the system. )
我们man一下passwd,输入‘man 5 passwd’。在man手册中可知,/etc/passwd中的每一行定义了一个用户的信息,分为7个字段,以:作为分隔符。
name:password:UID:GID:GECOS:directory:shell
各字段说明:
- name:用户登录系统时使用的用户名,是唯一的。
- password:由于口令受/etc/shadow保护,此字段可以是加密的密码,也可以用x占位。所有加密的口令以及和口令有关的设置都保存在/etc/shadow中。
- UID:用户标识符。系统用来标识用户。每个用户的标识符都是唯一的。root的UID为0,系统用户的UID为0-499,普通用户的UID为500-60000。
- GID:用户所属的主组的ID号。
- GECOS:保存用户的注释信息。
- directory:用户登录系统后所进入的目录,即用户的主目录、家目录
- shell:用户的默认shell;登录时默认。
2,/etc/shadow
由于/etc/passwd文件对所有用户均是可读的,为了安全起见,其中的口令经过加密后保存在本文件中,它只对root可读。每一行有9个字段,以:为分隔符。
各字段说明如下:
- 用户名:用户的账户名
口令:是加密过的用户的口令;此字段又以$分割成三部分:
jeffrey:$1$p7agobhA$HnDl86u18D4Ru95CTMEoi1:17772:0:99999:7:::
第一部分:$1-6 .第一个$之后的内容为数字1-6,其指明了密码字段所使用的加密算法;对应关系如下:
1 —- md5加密算法
2 —- sha160
3 —- sha224
4 —- sha256
5 —- sha384
6 —- sha512
第二部分: $salt . 这一部分是在加密算法中为了提高密码安全性而加入的一些随机数,称为salt(杂质),第2个$之后的字符串就是对这些随机数加密生成的。
第三部分:$passwd: . 这一部分是用户设置的密码,第三个$后面的字符串就是经过加密算法加密后生成的字符串。
最近一次修改密码的时间:从1970.1.1起,到用户最后一次更改口令之间的天数
- 密码最短使用期限:从1970.1.1起,到用户可以更改口令的天数
- 密码最长使用期限:从1970.1.1起,到用户必须更改口令的天数
- 警告时间:在用户口令过期之前多少天气象用户更新
- 不活动时间:在用户口令过期之后到禁用账户的天数
- 过期期限:从1970.1.1起,到账户被禁用的天数
- 标志:保留位
3,/etc/group
将用户分组是Linux管理用户及控制访问权限的一种手段。组的属性都保存在本文件中,并且本文件对所有用户均可读。每行共有4个字段,以:为分割符。
各字段说明如下:
- 组名:该组的名称
- 组口令:由于受/etc/gshadow保护,此文件中只以x占位。加密的组口令保存在/etc/gshadow中。
- GID:组的ID号。
- 组成员列表:以此组为附加组的用户列表,多个成员以 ,分割。
4,/etc/gshadow
文件用于定义用户组口令、组管理员等信息,只有root可以读取。共有4个字段,以:分割。
各字段说明如下:
- 组名:组名称,与group文件中的组名称对应
- 组口令:保存加密的组口令
- 组的管理员账号:组的管理员账号,管理员有权对该组添加、删除账号
- 组成员:属于该组的用户成员列表,列表中多个用户间以,分割
总结:账户管理的是指就是管理上述4个账户系统文件。
三,用户/组命令
用户管理:常用的有useradd ,userdel, usermod, passwd, chsh, chfn, finger, id, chage.
接下来一一详解:
useradd 添加用户
选项:
-u , - - uid UID 指定UID,若不指定GID,则默认GID与UID相同。
-g , - - gid GID/Group 指定基本组,可以跟上组名或GID,但此组必须事先存在;
-G, - - groups GROUP1[,GROUP2,…[,GROUPN]]] 指定用户所属的附加组,多个组之间用逗号分隔。
-c , - - comment “COMMENT” 指定注释信息
-d , - - home /path/to/directory 指定用户的家目录:通过复制目录/etc/skel并重命名为指定的目录名来实现,若指定的目录事先已经存在,则不会为用户复制“环境配置文件”。
-s , - - shell /path/to/shell 指定用户默认的shell,可用的所有shell列表存储在/etc/shell文件中。
-m -k 创建家目录
-r ,- - system 添加系统用户
-M 不创建家目录
注意:创建用户时的诸多默认设定保存在配置文件/etc/login.defs
useradd -D : 显示用户创建的默认配置
usradd -D options : 修改选项对应的值,修改的结果保存于文件/etc/default/useradd中。
例:
[root@localhost jeffrey]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@localhost jeffrey]# useradd -D -s /bin/csh
[root@localhost jeffrey]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
shell类型主要为:
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
示例:
//指定UID
[root@localhost jeffrey]# useradd -u 1111 Cherry
[root@localhost jeffrey]# tail -1 /etc/passwd
Cherry:x:1111:1111::/home/Cherry:/bin/bash
//指定UID、GID
[root@localhost jeffrey]# useradd -u 2222 -g 1111 Barry
[root@localhost jeffrey]# tail -2 /etc/passwd
Cherry:x:1111:1111::/home/Cherry:/bin/bash
Barry:x:2222:1111::/home/Barry:/bin/bash
//为新用户指定附加组GID为1111(组名为Cherry)、注释信息、shell和家目录。
[root@localhost jeffrey]# useradd -G 1111 -c "My name is Sarry" -d /etc/Sarry -s /bin/csh Sarry
[root@localhost jeffrey]# tail -1 /etc/passwd
Sarry:x:2223:2223:My name is Sarry:/etc/Sarry:/bin/csh
//可以看出组Cherry的附加组成员列表中有Sarry
[root@localhost jeffrey]# tail -3 /etc/group
leonard:x:1001:
Cherry:x:1111:Sarry
Sarry:x:2223:
userdel 删除用户(不删除家目录)
选项
-r 删除用户时一并删除其家目录
示例:
[root@localhost /]# userdel Barry
[root@localhost /]# ls /home
Barry Cherry jeffrey
[root@localhost /]# userdel -r Cherry
[root@localhost /]# ls /home
Barry jeffrey
usermod 修改用户账号属性
选项
-u , - - uid UID 修改用户UID为指定的UID
-g , - - gid Group 修改用户所属的基本组
-G, - - groups GROUP1[,GROUP2,…[,GROUPN]]] 修改用户所属的附加组,多个组之间以逗号隔开
-a . - - append : 与-G一起使用,用于为用户追加新的附加组
-c , - - comment COMMENT 修改用户注释信息
-d , - - home HOME_DIR : 修改用户的家目录,并且用户原家目录中的文件不会被转移到新位置
-m , - - move HOME 指定新家目录位置,并将原来的家目录中的文件移动到新的家目录
-l , - - login NEW_login 改用户名
-s , - - shell SHELL 改用户默认shell为指定的SHELL
-L , –lock : 锁定用户密码,即在用户密码字符串之前添加一个“ !”。
-U , - - unlock : 解锁用户密码,即去点被锁定密码字符串前面的“ !”
su 切换用户
用法:
# su - USERNAME
# su -l USERNAME
登录式切换,会通过读取目标用户的配置文件来重新初始化环境
# su USERNAME
非登录式切换,不会通过读取目标用户的配置文件来重新初始化环境
# su -c COMMAND
表示仅以指定用户的身份运行此处指定的命令
示例:
[root@localhost /]# su jeffrey -c passwd
Changing password for user jeffrey.
Changing password for jeffrey.
(current) UNIX password:
id 查看用户ID属性信息(UID,GID)
用法:
#id 直接使用,显示当前用户的ID信息
选项
-u 只查看UID
-g 只查看基本组的GID
-G 查看所有组,包括基本组和附加组GID
-n 与上述选项结合使用,显示其名字(而不是其id)
示例:
[root@localhost jeffrey]# id jeffrey
uid=1000(jeffrey) gid=1000(jeffrey) groups=1000(jeffrey)
finger USER 查看用户账号信息
示例:
[root@localhost jeffrey]# finger jeffrey
Login: jeffrey Name: jeffrey
Directory: /home/jeffrey Shell: /bin/bash
On since Sun Sep 9 05:43 (PDT) on :0 from :0 (messages off)
On since Mon Sep 10 02:58 (PDT) on pts/0 from :0
7 seconds idle
No mail.
No Plan.
chsh 修改用户的默认shell
用法:
# chsh 修改当前用户的默认shell
# chsh Username 修改指定用户的默认shell
选项
-s 修改用户的shell
-l 显示系统支持的shell
示例:
[root@localhost jeffrey]# chsh jeffrey
Changing shell for jeffrey.
New shell [/bin/bash]: /bin/csh
Shell changed.
[root@localhost jeffrey]# chsh -s /bin/bash jeffrey
Changing shell for jeffrey.
Shell changed.
[root@localhost jeffrey]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
chfn 修改用户的finger信息
用法:
# chfn 直接执行会出现修改finger信息的提示
示例:
[root@localhost jeffrey]# chfn jeffrey
Changing finger information for jeffrey.
Name [jeffrey]: jeffrey
Office []: Security
Office Phone []: 911
Home Phone []: 9111
Finger information changed.
whoami 显示当前用户名称
passwd 修改用户密码
用法:
#passwd 修改当前用户的密码
#passwd USERNAME : 修改用户指定的密码,但仅root由此权限。
选项
-l 锁定用户账号
-u 解锁用户账号
-d 删除用户密码
-e DATE : 过期期限,日期;
-i DAYS :非活动期限;
-n DAYS : 密码的最短使用期限;
-x DAYS : 密码的最长使用期限;
-w DAYS : 警告期限;- - stdin 从标准输入中修改密码;
示例:修改Jeffrey的密码为helloworld
[root@localhost /]# echo helloworld | passwd --stdin jeffrey
Changing password for user jeffrey.
passwd: all authentication tokens updated successfully.
pwck 查看用户账号的完整性
用法:
# pwck USERNAME
示例:
[root@localhost jeffrey]# pwck
user 'ftp': directory '/var/ftp' does not exist
user 'saslauth': directory '/run/saslauthd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'gnome-initial-setup': directory '/run/gnome-initial-setup/' does not exist
pwck: no changes
chage 修改用户密码的过期信息
选项 :
-d 修改用户密码最近一次修改的时间
-E 修改密码过期时间
-I 修改密码活动时间
-m 修改密码最短使用期限
-M 修改密码最长使用期限
-W 修改密码警告时间
组管理:常用命令有groupadd, groupdel, groupmod, gpasswd, newgroup
groupadd 创建新工作组
用法:
#groupadd GROUPNAME
选项
-g 指定GID,默认条件下创建的组ID为前一ID号+1
-r 创建系统组
示例:
[root@localhost jeffrey]# groupadd leonard
[root@localhost jeffrey]# tail -2 /etc/group
jeffrey:x:1000:
leonard:x:1001:
[root@localhost jeffrey]# groupadd -g 1111 Cherry
[root@localhost jeffrey]# tail -2 /etc/group
leonard:x:1001:
Cherry:x:1111:
groupdel 删除工作组
用法:
#groupdel GROUPNAME
示例:
[root@localhost jeffrey]# tail -2 /etc/group
leonard:x:1001:
Tom:x:1234:
[root@localhost jeffrey]# groupdel Tom
[root@localhost jeffrey]# tail -2 /etc/group
jeffrey:x:1000:
leonard:x:1001:
groupmod 修改工作组信息
选项:
-g GID 指定新GID -n GROUPNAME 指定新组名
示例:
[root@localhost jeffrey]# tail -1 /etc/group
Cherry:x:1111:
[root@localhost jeffrey]# groupmod -g 1234 Cherry
[root@localhost jeffrey]# tail -1 /etc/group
Cherry:x:1234:
[root@localhost jeffrey]# groupmod -n Tom Cherry
[root@localhost jeffrey]# tail -1 /etc/group
Tom:x:1234:
gpasswd 工作组文件管理工具
用法:
#gpasswd 直接使用会
选项
-a USERNAME 向组内添加用户
-d USERNAME 从组内删除用户
-A 设置组管理员
newgrp 临时切换用户基本组
用法:
#newgrp [-] [group]
选项:
- : 会模拟用户重新登陆以实现重新初始化其工作环境
使用exit可返回原基本组
groups 显示指定用户所属的基本组和附加组
用法:
# groups USERNAME
示例:
[root@localhost jeffrey]# groups jeffrey
jeffrey : jeffrey