用户和组
一、用户和组的概念
随着计算机对多用户需求越来越多,才引入了用户和组的概念。所谓的用户就是操作系统用来标识登陆系统的。就是用户和组是实现计算机资源分配的核心要素。组:是具有相同计算机资源(主要指权限)用户的一个集合。
在计算机内核中,用户和组都是一个数字,我们称之为UID和GID。UID和GID在系统中具有唯一性。实现这个过程进行名称解析才能完成,在Linux系统中使用glib库中的系统调用来完成。
二、用户识别
识别用户通过3A(Authentication,Authorization,Audit)
Authentication:通过密码来实现
Authorization:授权
Audit:审计(通过操作日志来实现的)
三、用户和组类别
用户类别:
管理员用户:UID=0
系统用户:1 <= UID <= 499
普通用户:UID >= 499
组类别:
管理员组:GID=0
系统组:1 <= GID <= 499
用户组:GID >= 500
四、用户和组的对应关系
一对一:一个用户存在一个组中,即用户是组的唯一成员
一对多:一个用户可以存在多个用户组中,此用户有多个组的共同权限
多对一:多个用户组可以存在一个组中,这些用户具有和组共同的权限
多对多:多个用户可以存在多个组中,即上述关系的扩展
五、用户和组相关的配置文件
1、有关用户的相关文件
/etc/passwd:用户账号信息
/etc/passwd-:/etc/passwd的backup(备份)
/etc/passwd文件格式:
account:password:UID:GID:GECOS:directory:shell 一个用户的信息占一行
具体含义:
字段 | account | password | UID | GID | GECOS | directory | shell |
含义 | 用户账号的字符串 | 密码定位符(以前是密码) | 用户标识号,就是用户的UID,通常UID号的取值范围是0~65535 | 组标识号,就是组的GID,指的是主组 | 注释信息 | 家目录,也就是用户登录到系统之后默认所处的目录 | 用户默认shell |
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync
密码复杂度策略:
- 数字、小写、大写和特殊字符至少三类
- 最短长度5位
- 不要使用易猜测的密码
- 定期修改,且不要使用最近曾经使用过的密码
加密方式:
- 对称加密:加密和解密使用同一个密钥;密钥分发困难
- 公钥加密(非对称加密):加密和解密使用一对儿密钥
- 单向加密:提取数据的惟一的特征码,主要用于比对数据的完整性 单向加密的特性是定长输出;不可逆;雪崩效应
/etc/shadow:用户密码和相关的账户设定
/etc/shadow-:/etc/shadow的backup(备份)
/etc/shadow文件格式:
login name:password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field 一个用户信息占一行,用户加密咨询文件。由于/etc/passwd文件是所有用户都可读的,这样就导致了用户的密码容易出现泄露,因此,linux将用户的密码信息从/etc/passwd中分离出来,单独的放到了一个文件中,这个文件就是/etc/shadow,该文件只有root用户拥有读权限,从而保证了用户密码的安全性。
具体含义:
字段 | login name | password | date of last password change | minimum password age | maximum password age | password warning period | password inactivity period | account expiration date | reserved field |
含义 | 用户名,同/etc/passwd相对应 | 加密后的密码 | 最近一次修改密码的时间(从1970-01-01到现在的天数) | 密码最短使用期限(天数) | 密码最长使用期限(天数) | 密码过期警告区间(天数) | 非活动时间(天数) | 账号过期时间,绝对时间 | 保留区域 |
centos:$6$X/HwvP5Q$5qUun33gWjfHALXiJ1e.9XVEUlSEq1k6uPMCDp.ry8h7Y9bs7xVNQrdQsXIHWCIuUEWEqFw0RE8UtPk37Zah91:16252:0:99999:7::: mandriva:!!:16255:0:99999:7::: gentoo:$6$QUEaMRzj$L8g8OsDRr6LZM8KCuu9cieNYnbGS/SUTsVNJf2pRd5iDrsyama.jrKh2gI86b3QQfMqr1oZQwx.TQTLyBocnj/:16255:2:60:3:7:: openstack:!!:16255:0:99999:7:::
2、有关组的相关文件
/etc/group:组的账号信息
/etc/group-:/etc/group文件的backup
/etc/group文件格式:
group_name:passwd:GID:user_list
具体含义:
字段 | group_name | passwd | GID | user_list |
含义 | 组名 | 组密码定位符 | GruopID | 以逗号分开的属于此组(以此作为附属组)的用户列表 |
root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon sys:x:3:bin,adm adm:x:4:adm,daemon
/etc/gshadow:组的密码信息
/etc/gshadow-:/etc/gshadow文件的backup
/etc/gshadow文件格式:
字段 | group_name | passwd | GID | user_list |
含义 | 组名 | 加密后的密码 | 用户组管理者 | 组成员 |
root::: bin:::bin,daemon daemon:::bin,daemon sys:::bin,adm adm:::adm,daemon
六、其他相关的配置文件
(1)etc/login.defs文件
用来定义创建一个用户时的默认设置,比如指定用户的UID和GID的范围,用户的过期时间、是否需要创建用户主目录等等。
下面是centos6.4下的/etc/login.defs,简单介绍如下:
[[email protected] ~]# cat /etc/login.defs | grep -v ^# | grep -v ^$ MAIL_DIR /var/spool/mail #当创建用户时,同时在目录/var/spool/mail中创建一个用户mail文件 PASS_MAX_DAYS 99999 #指定密码保持有效的最大天数 PASS_MIN_DAYS 0 #表示自从上次密码修改以来多少天后用户才被允许修改口令 PASS_MIN_LEN 5 #指定密码的最小长度 PASS_WARN_AGE 7 #表示在口令到期前多少天系统开始通知用户口令即将到期 UID_MIN 500 #指定最小UID为500 ,也就是说添加用户时,用户的UID 从500开始 UID_MAX 60000 #指定最大UID为60000 GID_MIN 500 #指定最小GID为500,也就是添加组时,组的GID从500开始。 GID_MAX 60000 #指定最大GID为60000 CREATE_HOME yes #此项是指定是否创建用户主目录,yes为创建,no为不创建。 UMASK 077 #默认家目录的掩码 USERGROUPS_ENAB yes #########有待验证######################## ENCRYPT_METHOD SHA512 #默认密码加密算法是SHA512
(2)/etc/skel目录
/etc/skel目录定义了新建用户在主目录下默认的配置文件,更改/etc/skel目录下的内容就可以改变新建用户默认主目录的配置文件信息,例如创建一个新用户后,会在新用户的主目录下看到类似.bash_profile, .bashrc, .bash_logout等文件,这些文件就是存在于/etc/skel目录下的。
(3)/etc/default/useradd文件
useradd 添加用户时的规则文件,当我们通过useradd命令不加任何参数创建一个用户后,用户默认的主目录一般位于/home下,默认使用的shell是/bin/bash,这些都是在/etc/default/useradd文件中定义的。更改此文件可以更改添加用户的默认配置,除此方法外还可以通过adduser命令的参数来实现。
[[email protected] ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home #把用户的家目录建在/home中 INACTIVE=-1 #是否启用帐号过期停权,-1表示不启用 EXPIRE= #帐号终止日期,不设置表示不启用 SHELL=/bin/bash #所用SHELL的类型 SKEL=/etc/skel #默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的 CREATE_MAIL_SPOOL=yes #当创建用户时,同时在目录/var/spool/mail中创建一个用户mail文件。yes是创建,no是不创建。
七、用户和组的管理
1)用户的管理命令
useradd,adduser:添加用户
命令 | 常用参数 | 参数意义 | 示例 |
useradd或者adduser | -u | 指定用户的UID | useradd -u 506 gentoo |
-g | 指定用户的GID | useradd -u 506 -g 1000 gentoo | |
-G | 指定用户的附加组,可以指定多个附加组 | useradd -u 506 -G Linux,centos gentoo | |
-c | 添加注释信息,不指定默认为空 | useradd -c ‘this is a test user‘ ubantu | |
-d | 指定用户的家目录,不指定的话,默认数/hmoe/目录下与用户名同名的目录 | useradd -d /tmp/redhat redhat | |
-s | 指定用户的默认shell,不指定的话默认是/bin/bash | useaadd -s /sbin/nologin slackware | |
-r | 添加系统用户 | useradd -r mysql | |
-m | 如果用户没有家目录则自动创建 | ||
-M | 强制不创建家目录 | useradd -M Archlinux | |
-e | expire_date 账号终止日期 | useradd -e 14/7/20 suse |
userdel:删除用户
用法: userdel USER_NAME
常用参数:-r 删除用户是将用户的家目录删除 例如 userdel -r gentoo
passwd:为用户设置密码
常用参数 | 参数意义 | 示例 |
--stdin | 避免交互式设置密码 | echo ‘Acrhlinux‘ | passwd Archlinux |
-l,-u | 用户加锁,解锁 |
passwd -l ArchLinux passwd -u ArchLinux |
-n,-x,-w,-i | 设置用户的最短使用,最长使用,告警,非活动期限 | passwd -n 2 -u 60 -w 7 -i 3 gentoo |
usermod:修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等
常用参数 | 参数意义 | 示例 |
-u,-g,-s,-c | 修改用户的UID,GID,默认shell,注释信息 | usermod -u 800 -g 6666 -s /bin/zsh -c ‘Beijing zhongguancun‘ gentoo |
-G -a | 在修改用户的附加组是,要想保留原来的附加组,还需要与-a并用,否则则会覆盖原来的附加组 | usermod -a -G gentoo,centos,linux ubantu |
-d -m | 修改家目录,若想同时保存原来家目录下的所有文件,则与-m一起使用 | usermod -d /tmp/linux -m gentoo |
-L,-U |
锁定和解锁用户 |
usermod -L redhat usermod -U redhat |
chown:改变文件的属主属组
常用参数 | 参数意义 | 示例 |
-R,-r | 改变该目录以及位于该目录下所有文件的属主属组 |
1、修改/tmp/mylinux文件的属主属组为gentoo chown gentoo:gentoo /tmp/mylinux 或者chown gentoo.gentoo /tmp/mylinux 2、修改/tmp/mylinux文件的属主为gentoo chown gentoo /tmp/mylinux 3、修改/tmp/mylinux文件的属组为gentoo chown .gentoo /tmp/mylinux 4、修改/tmp/test/目录下文件的属主属组为gentoo chown -R gentoo.gentoo /tmp/mytest |
pwcovn:同步用户从/etc/passwd 到/etc/shadow
pwck:pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整
pwunconv:是pwcov 的立逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件
finger:查看用户信息工具
[[email protected] ~]# finger centos Login: centos Name: Directory: /home/centos Shell: /bin/bash On since Sat Jul 5 11:21 (CST) on pts/2 from 172.16.9.17 8 hours 25 minutes idle No mail. No Plan.
id:查看用户的UID、GID及所归属的用户组
[[email protected] ~]# id centos uid=500(centos) gid=500(centos) groups=500(centos),600(magedu)
chfn:更改用户信息工具
su:用户切换工具
常用参数:
su -l USENAME 或 su - USERNAME 完全切换
su -c 以切换的用户身份执行命令 例如:
[[email protected] ~]# su - centos -c ‘whoami‘ centos
sudo:sudo 是通过另一个用户来执行命令(execute a command as another user),su 是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo 能后面直接执行命令,比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现
visudo:visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的
sudoedit:和sudo 功能差不多
2)组管理命令
groupadd:添加用户组
常用参数:
-g:指定组ID 例如:groupadd -g 1000 centos
-r:指定一个系统组
groupdel:删除用户组
groupmod:修改用户组信息
chgrp:改变用户的所属组
groups:显示用户所属的用户组
grpck:检查/etc/group文件和/etc/gshadow文件,检查数据是否正确存放
grpconv:通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建
grpunconv:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件
八、手动创建一个用户
1、手动在/etc/passwd中添加一行(当然用户名,UID不能使用已经存在的)
test1:x:2222:2222::/home/tes1t:/bin/bash
2、产生密码信息
echo ‘redhat‘ | sha512sum
20641bd9d93708c844f59bf5f5d5bfb16fd5c3cece84127f56072579f778e6aca04ca7985eb4a7f555bd9532115205884d11fc5323534618da7596c300b4666d
并在/etc/shadow添加这一行
test1:$6$bRFe2dsW$20641bd9d93708c844f59bf5f5d5bfb16fd5c3cece84127f56072579f778e6aca04ca7985eb4a7f555bd9532115205884d11fc5323534618da7596c300b4666d:16255:0:99999:7::::
3、手动在/etc/group中添加一行
test1:x:2222:
4、复制相关文件到家目录下
cp -r /etc/skel/ /home/test1
5、修改家目录权限
chown -R test1.test1 /home/test1/
此时就完成了一个用户的创建工作,下来就可以登陆了。