1.4 管理用户和组账户
用户
每一个用户都有一个UID,这个UID是唯一的,可以理解为身份证号码
每个用户都至少在一个用户组中,若果没有指定,则默认存在于同名组中
多个用户可以属于同一个组,一个用户也可以属于多个组,但是这种情况下要有一个主要组
用户的分类
超级用户(管理员):root用户,UID=0
程序用户:不能登录,用来执行某些程序特有的用户
普通用户:可以简单理解为个人用的登录账号
和用户有关的文件
/etc/passwd文件
该文件用于保存用户的基本信息,每一行对应一个用户的账号记录
'我们来看一下这个文件,每一行都被:分隔为7个字段'
[root@redhat-1-6 tmp]# tail -5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
'字段1 用户名'
'字段2 密码占位符x'
'字段3 用户账号的UID'
'字段4 基本组的GID'
'字段5 用户的全名'
'字段6 用户家目录'
'字段7 登录shell,如果需要某个用户不能登录,可以设置它的登陆shell为/sbin/nologin或者/bin/false'
'这里的mysql用户,UID=27,GID=27,全名:MySQL Server,家目录:/var/lib/mysql,登录shell:/bin/false 是用来运行MySQL数据库的用户,不需要登录,这就是程序用户'
/etc/shadow文件
用来保存用户密码的各种信息
每一行对应一个用户的密码记录
'我们来看一下这个文件,每一行都被:分隔为9个字段'
[root@redhat-1-6 tmp]# head -5 /etc/shadow
root:$6$wmA5eoMLiRgss.kP$ZFKk9iD1YvjJ0GMdQUPwE9obj0ST5TnW8gItVt77jem858FBdB1UjO5Olk.NId9JCM5nll6UyeedzrY0Efk3./:17949:0:99999:7:::
bin:*:15937:0:99999:7:::
daemon:*:15937:0:99999:7:::
adm:*:15937:0:99999:7:::
lp:*:15937:0:99999:7:::
'字段1表示用户账号的名称'
'字段2表示加密的密码字串信息 !表示锁定了,不能登录'
'字段3表示上次修改密码的时间(从1970年到改密码时间相隔的天数)'
'字段4表示密码的最短有效天数,默认值是0(至少要用多少天才能改密码)'
'字段5表示密码的最长有效天数,默认值是99999'
'字段6表示提前多少天警告用户口令将过期,默认值7'
'字段7表示在密码过期多少天之后禁用此用户(宽松多少天)'
'字段8表示账号失效时间,默认值为空'
'字段9表示保留字段(未使用)'
- 字段2详解
:$6$j1qF5W7eZICdrB.D$vr3HTF0oHTuJ/g4BXgYii6WmnNpKoRt2seljJMxELBMcjH3ijfCvM8Zv5Qz2JN3TtrcUiGOK9C1hyM1wcMs5Q/:
'字段2用$符号分为了3部分'
第一部分的数字$6$表示是使用了什么加密算法
1 MD5
2a Blowfish
5 SHA-256
6 SHA-512
通过openssl可以生成密文密码 openssl passwd -1 密码
第二部分表示盐值(salt),提高密码安全性的,是随机生成的
第三部分是算法按照密码生成的,同一算法相同的密码是一样的
/etc/skel/*文件
新建用户账号时,/etc/skel/ 里的文件(包括隐藏文件)会自动复制到用户的家目录
[root@redhat-1-6 tmp]# ll -a /etc/skel/
total 28
drwxr-xr-x. 2 root root 4096 Feb 22 22:52 .
drwxr-xr-x. 101 root root 12288 Mar 31 01:20 ..
-rw-r--r--. 1 root root 18 Jul 9 2013 .bash_logout #用户每次退出登录时执行
-rw-r--r--. 1 root root 176 Jul 9 2013 .bash_profile #用户每次登录时执行
-rw-r--r--. 1 root root 124 Jul 9 2013 .bashrc #每次进入新的bash环境时执行
[root@redhat-1-6 tmp]# ll -a /etc/profile
-rw-r--r--. 1 root root 1796 Aug 20 2013 /etc/profile #真正要执行的脚本文件
/etc/login.defs文件
保存了用户初始化属性的设置,比如设置普通用户的UID和GID范围等
组
每个组也有一个唯一的GID
和组有关的文件
/etc/group文件
保存组的账号的文件,一行对应一个组
'我们来看一下这个文件'
[root@redhat-1-6 tmp]# tail -5 /etc/group
sshd:x:74:
tcpdump:x:72:
oprofile:x:16:
slocate:x:21:
mysql:x:27:
'第一部分表示组账号名'
'第二部分表示密码(不用设置)'
'第三部分表示GID'
'第四部分表示组中的用户(不一定完全显示)'
'主要组 用户至少属于一个组(主要组)默认情况下创建用户会自动创建一个同名的组,是其主要组
与用户相关的默认组,在/etc/passwd中的第四部分表示
次要组用户可以同时属于其他的组,在/etc/group文件的第四个字段定义'
添加和删除用户
添加用户
- useradd命令创建用户
- 语法: useradd [选项] … user_name
- 常用命令选项
-u 指定UID
-d 指定宿主目录,默认为/home/用户名
-e 指定账号失效时间
-g 指定用户的基本组名(GID号)
-G 指定用户的附加组名(GID号)
-M 不为用户创建家目录
-s 指定用户的登录shell
-c 指定字段五的详细信息
useradd命令执行后,修改了/etc/passwd、/etc/shadow、/etc/group文件,在/home下创建了新用户的家目录,并将/etc/skel/下的所有文件复制了进去,还会在/var/spool/mail 创建一个与用户名同名的用户邮箱
删除用户
- userdel命令删除用户
- 语法: userdel [r] … user_name
- -r 连用户的家目录一并删除
修改用户参数
usermod 修改用户参数
- 语法:usermod [选项] … user_name
- 常用命令选项
-l 更改用户账号的登录名称200
例如:usermod -l user1 u1 将u1的登录名改为user1
-L 锁定用户账户,锁定后密文密码之前会有!表示锁定
-U 解锁用户账户 只能解锁!锁定
-u 修改UID
-d 修改宿主目录,默认为/home/用户名
-e 指定账号失效时间
-g 指定用户的基本组名(GID号) GID必须存在
-G 指定用户的附加组名(GID号)
-s 指定用户的登录shell
-c 指定用户说明
passwd 修改密码
- 语法: passwd [选项] … user_name
- 常用命令选项
-d 清空用户密码,使之无需密码就可登录,只能本地登录
例如: u1::17859:0:99999:7::: 第二部分为空表示密码为空只能本地登录
u2:!!:17859:0:99999:7::: 第二部分!!表示没有设置密码无法登陆
-l 锁定用户账号,锁定后密文密码之前会有!!表示锁定
-S 查看用户账号状态是否被锁定
-u 解锁用户账号 只能解锁!!锁定
--stdin 接受标准输入作为密码
- 例如:echo “123” | passwd --stdin uu 把123通过管道传送给uu作为密码,没有交互
root用户可以更改所有用户的密码,不要求复杂性,管理员修改密码时不需要输入当前密码
普通用户只能更改自己的密码,要求复杂性,修改密码时要先输入当前密码
chage 修改用户密码的相关参数
- 语法: chage [选项] … user_name
-m 密码最短有效期
-M 密码最长有效期
-l 列出密码时效的具体信息
-d chage -d 0 用户名 使其密码失效,下次登录需修改密码
可以用来设置密码最后有效期限
组的修改
groupadd新建组
- groupadd 【-g GID】 组账号名
groupdel删除组
- 只能删除空组
groupmod修改组名和组id
- groupmod 【选项】… 组账号名
- 常用命令选项
-n 修改组名
-g 修改组id
gpasswd添加、删除组成员,设置组账号密码
- gpasswd 【选项】… 组账号名
- 常用命令选项
-a 向组内添加一个用户 gpasswd -a user1 g1 将user1加入g1组
-d 从组内删除一个用户 gpasswd -d user1 g1 将user1踢出g1组
-M 重置组内成员列表,以逗号分隔 会踢出原来所有成员,只保留新添加的
用户和组的查询
- id查询用户身份标识
id 用户名 uid=5001(uu) gid=5001(uu) groups=5001(uu),504(g1)
UID 主要组 属于的组 - figer查询用户账号详细信息(字段五)
figer 【用户名】 - chfn修改用户备注信息(字段五),/etc/passwd第五个字段
- who、w、users查询已登录主机的用户信息
who,查看时有id的是远程登录,没有id的是本地登录
w,还显示开机时间
users,只显示登录的用户名 - groups查询用户所属的组
groups 【用户名】