Linux运维之道(8)——用户和组管理
@(Linux)[用户和组管理]
1. 用户和组管理
1.1 资源分派三元组
- Authentication:认证
- Authorization:授权
- Accouting:审计
1.2 Linux用户-UID
管理员:root
, 0
普通用户:1-65535
- 系统用户:1-499, 1-999
对守护进程获取资源进行权限分配 - 登录用户:500+, 1000+
交互式登录
1.3 Linux组-GID
管理员组:root
, 0
普通组
- 系统组:1-499, 1-999
- 普通组:500+, 1000+
Linux组的类别:
- 用户的基本组(主组):
组名同用户名,且仅包含一个用户:私有组 - 用户的附加组(额外组):
通过后需添加获得
1.4 Linux安全上下文
进程所能够访问的所有资源的权限取决于进程的发起者的身份
- 比如说,当我以
escape
这个用户使用ls
命令时,首先系统会检测我这个用户是否是这个命令的所有者(rwx
),如果不是判断是否为这个命令的所属组(r-x
),如果都不是则会应用其他人(r-x
)权限。但是,也有一些命令例外,具体什么呢?下一篇文章将会涉及,请多关注。- 其实在我们执行命令的时候,系统会重新启动一个bash(假设你使用的是
bash
)来运行我们的命令,在运行完毕之后返回命令执行的结果。
[escape@localhost ~]$ ll /usr/bin/ls
-rwxr-xr-x. 1 root root 117616 2月 16 23:49 /usr/bin/ls
1.5 Linux用户和组相关的配置文件
配置文件包含:
/etc/passwd:用户及其属性信息(名称、UID、基本组ID等等);
/etc/group:组及其属性信息;
/etc/shadow:用户密码及其相关属性;
/etc/gshadow:组密码及其相关属性;
/etc/passwd
- name:password:UID:GID:GECOS:directory:shell
- 用户名:密码:UID:GID:GECOS:主目录:默认shell
/etc/group
- group_name:password:GID:user_list
- 组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)
/etc/shadow
- 用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段
/etc/gshadow
- 组名:口令:组管理者:组内用户列表
**密码的复杂性策略: **
1、使用数字、大写字母、小写字母及特殊字符中至少3种;
2、足够长;
3、使用随机密码;
4、定期更换;不要使用最近曾经使用过的密码;
2. 用户和组相关的管理类命令
2.1 用户创建:useradd
格式:useradd [options] LOGIN
参数选项:
-
-u UID
[UID_MIN, UID_MAX], 定义在/etc/login.defs
-
-g GID
指明用户所属基本组,可为组名,也可以GID -
-c "COMMENT"
用户的注释信息; -
-d /PATH/TO/HOME_DIR
以指定的路径为家目录 -
-s SHELL
指明用户的默认shell程序,可用列表在/etc/shells文件中 -
-G GROUP1[,GROUP2,...[,GROUPN]]]
为用户指明附加组;组必须事先存在 -
-r
创建系统用户
CentOS 6: ID<500
CentOS 7: ID<1000
默认值设定:
/etc/default/useradd
文件中
2.2 组创建:groupadd
格式:groupadd [OPTION]... group_name
参数选项:
-
-g GID
指明GID号;[GID_MIN, GID_MAX] -
-r
创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
2.3 查看用户相关的ID信息:id
格式:id [OPTION]... [USER]
参数选项:
-
-u
UID -
-g
GID -
-G
Groups -
-n
Name
2.4 切换用户或以其他用户身份执行命令:su
格式:su [options...] [-] [user [args...]]
切换用户的方式:
su UserName
- 非登录式切换,即不会读取目标用户的配置文件;
su - UserName
- 登录式切换,会读取目标用户的配置文件;完全切换;
换个身份执行命令:
su [-] UserName -c 'COMMAND'
参数选项:
-
-l
su -l UserName
相当于su - UserName
Note:root用户
su
至其他用户无须密码;非root用户切换时需要密码;
2.5 用户属性修改:usermod
格式:usermod [OPTION] login
参数选项:
-
-u UID
新UID -
-g GID
新基本组 -
-G GROUP1[,GROUP2,...[,GROUPN]]]
新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append -
-s SHELL
新的默认SHELL -
-c 'COMMENT'
新的注释信息 -
-d HOME
新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项 -
-l login_name
新的名字 -
-L
lock指定用户 -
-U
unlock指定用户 -
-e YYYY-MM-DD
指明用户账号过期日期 -
-f INACTIVE
设定非活动期限
2.6 给用户添加密码:passwd
格式:passwd [OPTIONS] UserName
- 修改指定用户的密码,仅root用户权限
-
passwd
: 修改自己的密码;
参数选项:
-
-l
锁定指定用户 -
-u
解锁指定用户 -
-n mindays
指定最短使用期限 -
-x maxdays
最大使用期限 -
-w warndays
提前多少天开始警告 -
-i inactivedays
非活动期限 -
--stdin
从标准输入接收用户密码
echo "PASSWORD" | passwd --stdin USERNAME
Note:
/dev/null
and/dev/zero
/dev/null
,它是空设备.看作黑洞,它非常等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,然而/dev/null对命令行和脚本都非常的有用。
/dev/zero
也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是 ASCII型的)。写入它的输出会丢失不见,而从/dev/zero读出一连串的null也比较困难,虽然这也能通过od或一个十六进制编辑器来做到。 /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。
2.7 删除用户:userdel
格式:userdel [OPTION]... login
参数选项:
-
-r
删除用户家目录
2.8 组属性修改:groupmod
格式:groupmod [OPTION]... group
-
-n group_name
新名字 -
-g GID
新的GID
Note:
userdel
不允许你移除正在线上的使用者帐 号
2.9 组删除:groupdel
格式:groupdel GROUP
Note: 如果有任何一个群组的使用者在线上的话就不能移除该群组,最好先移除使用者后再移除群组。
2.10 组密码:gpasswd
格式:gpasswd [OPTION] GROUP
参数选项:
-
-a user
将user添加至指定组中 -
-d user
删除用户user的以当前组为组名的附加组 -
-A user1,user2,...
设置有管理权限的用户列表 -
-r
删除密码
实战演示:
[root@localhost ~]# gpasswd -A peter test2 #将peter设为test2组管理员
[root@localhost ~]# gpasswd -a peter test2 #将用户peter加入到test2组
[root@localhost ~]# gpasswd -d peter test2 #将用户peter从test2组中移出
2.11 临时切换基本组:newgrp
格式:newgrp [-] [group]
如果用户本不属于此组,则需要组密码
实战演示:
[root@localhost ~]# newgrp www #登录到www群组
2.12 修改用户属性:chage
格式:chage [OPTION]... LOGIN
参数选项:
-d LAST_DAY
-
-E
, --expiredate EXPIRE_DATE -
-I
, --inactive INACTIVE -
-m
, --mindays MIN_DAYS -
-M
, --maxdays MAX_DAYS -
-W
, --warndays WARN_DAYS
其它命令:
chfn
,chsh
,finger
3. 权限管理
文件的权限主要针对三类对象进行定义:
- owner: 属主,
u
- group: 属组,
g
- other: 其他,
o
每个文件针对每类访问者都定义了三种权限:
-
r
: Readable -
w
: Writable -
x
: eXcutable
文件:
-
r
: 可使用文件查看类工具获取其内容; -
w
: 可修改其内容; -
x
: 可以把此文件提请内核启动为一个进程;
目录:
-
r
: 可以使用ls查看此目录中文件列表; -
w
: 可在此目录中创建文件,也可删除此目录中的文件; -
x
: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;
举例:
-
r
-->4 -
w
-->2 -
x
-->1
640: rw-r-----
rwxr-xr-x: 755
3.1 修改文件权限:chmod
格式:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
参数选项:
-
--reference=参考文件
使用指定参考文件的模式,而非自行指定权限模式 -
-R
以递归方式更改所有的文件及子目录 -
--help
显示此帮助信息并退出 -
--version
显示版本信息并退出
Note:每种 MODE 都应属于这类形式
[ugoa] [-+=] [rwxXst] [ugo]
操作对像
-
u
文件属主权限 -
g
同组用户权限 -
o
其它用户权限 -
a
所有用户(包括以上三种)
权限设定
-
+
增加权限 -
-
取消权限 -
=
唯一设定权限
权限类别
-
r
读权限 -
w
写权限 -
x
执行权限 -
X
表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 -
s
文件属主和组id -
l
给文件加锁,使其它用户无法访问
Note:仅root可以修改文件的属主和属组
实战演示:
[root@localhost ~]# chmod ugo+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod a+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod ug+w,o-w nginx_bak.conf #设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
[root@localhost ~]# chmod u+x nginx_bak.conf #创建者拥有执行权限
[root@localhost ~]# chmod -R a+r ./www/ #将www下的所有档案与子目录皆设为任何人可读取
[root@localhost ~]# chmod a-x nginx_bak.conf #收回所有用户的对nginx_bak.conf的执行权限
[root@localhost ~]# chmod 777 nginx_bak.conf #所有人可读,写,执行
[root@localhost ~# chmod a+s test.ppt #chmod g+s ,为某个文件设置替代组标识
[root@localhost ~# ls -al |grep test.ppt
-rwSr-Sr--. 1 tank tank 2320384 11月 18 19:29 test.ppt
# 第一个S指示用户替代标识(suid)已经被设置。
# 第二个S指示替代组标识(sgid)已经被设置。
# 这样,每一个运行该程序的用户将给予和程序拥有者同样有效的用户标识,和用户所属组同样有效的组标识。
3.2 修改文件的属主:chown
格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...
参数选项:
-
--reference=参考文件
使用参考文件的所属组,而非指定值 -
--help
显示此帮助信息并退出 -
--version
显示版本信息并退出 -
-R
,--recursive
递归处理所有的文件及子目录
以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。 -
-H
如果命令行参数是一个通到目录的符号链接,则遍历符号链接 -
-L
遍历每一个遇到的通到目录的符号链接 -
-P
不遍历任何符号链接(默认)
实战演示:
#将nginx.conf所属用户和组改为escape,escape
[root@localhost ~]# chown escape:escape nginx.conf
#将www目录,所属用户和组改为escape,escape
[root@localhost ~]# chown -R escape:escape www
[root@localhost ~]# chown root nginx.conf #只改变用户
[root@localhost ~]# chown :escape 1.html #只改变组
3.3 修改文件的属组:chgrp
格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
参数选项:
-
-c
,--changes
详细描述对每一个文件的动作:实际上改变了哪个组 -
-f
,--silent
,--quiet
不列出错误信息.(那些组不能被改变) -
-h
作用于符号链接本身代替它所指向的. 仅可用于 lchown 系统调用被提供时 -
-v
,--verbose
详细描述作用或没作用的所有文件 -
-R
递归的改变目录和它的内容的组所有权
实战演示:
[root@localhost www]# chgrp escape abc.txt #改变用户组
[root@localhost www]# chgrp -R escape myweb #改变myweb目录,以及目录下的所有文件所属组
3.4 文件或目录创建时的遮罩码:umask
格式:umask [-p] [-S] [mode]
- FILE: 666-umask
Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限+1 - DIR: 777-umask
参数选项:
-
-S
以字符的形势显示当前的掩码 -
-p
带umask
开头以数字的形势显示当前掩码
常用命令:
-
umask
查看 -
umask #
设定
实战演示:
[root@localhost ~]# umask #查看当前用户预设权限
0022
[root@localhost ~]# umask -S #以字母的形势显示权限
u=rwx,g=rx,o=rx
[root@localhost ~]# umask -p
umask 0022
[root@localhost ~]# umask 755 #设置预设权限
[root@localhost ~]# umask
0755