Linux User and Group、Mode Management
早期Linux系统设计为了能够实现多用户、多进程高效的利用服务器资源,在此种情况下,为了能够保证用户与用户之间的文件不被随意的访问及修改、删除等操作,用户、组的管理能在某种程序上实现管理用户或批量管理用户。由于Linux的设计哲学思想『一切皆文件』,用户对设备的访问就是对文件的访问。
此章节涉及到的命令汇总
useradd,usermod,userdel,groupadd,groupdel,groupmod,passwd,gpasswd,newgrp,su,id,chmod,chown,chgrp,setfacl,getfacl
==============
理论相关
User:
管理员
UID:0,GID:0
系统用户
UID:1-499 GID:1-499(Centos6)
UID:1-999 GID:1-999(Centos7)
普通用户
UID:500-60000 GID:500-6000(Centos6)
UID:1000-60000 GID:1000-60000(Centos7)
group:
分类一:
系统组
普通用户组
分类二:
基本组
附加组
分类三:
私有组
公有组
注:组的UID、GID跟用户的分配类似
File Mode:
Linux系统安全上下文:
当一个用户发起一个进程时,此进程将继承用户的属主、属组的权限,再以进程继承的权限来控制文件的访问权限。
Linux权限标识:
r: Readable 读
W: writable 写
x: executable 执行
rwx标识对文件及目录的意义:
对文件:
r : 可以读取文件中的内容
w : 可以修改及删除文件中的内容
x : 可以将其发起为一个进程
对目录:
r : 可以查看目录中的文件,可以使用ls命令, 但不能使用 -l选项
w : 可以创建、删除目录,但不能修改文件中的内容
x : 可以使用cd命令进入目录
文件及目录权限详细表示方面
文件:-rwxrwxrwx
从左边第二位开始,每三位代表一个权限类别:
u : owner
g : owner group
o : other
a : 代表以上三项
目录:drwxrwxrwx
u、g、o同文件权限位
Linux内核对文件权限的表示方法:
rwx: 4 2 1
Umask Mode Control
Linux对初始权限的控制来自于Umask的设定,其工作原理如下:
对新建立的文件:
666 - Umask值(由于Linux对文件的执行权限控制很严格,默认取消了文件的执行权限,所以这里是666)
对新建立的目录:
777 - Umask值
Umask对管理员ROOT的初始值:022
Umask对普通用户的初始值为:002
普通用户建立的文件及目录权限如下:
文件:
666-002=664 (如果减得的结果为奇数,就自动加1)对应的权限如下:
-rw-rw-r--
目录:
777-002=775 ,对应的权限如下:
drwxrwxr-x
对管理员root建立的文件及目录权限如下:
文件:
666-022=644,对应的权限如下:
-rw-r--r--
目录:
777-022=755,对应的权限如下:
drwx-r-xr-x
注:Umask的值可以使用umask命令来设置,但只对当前进程(即shell)有效,如要长期有效,需将此值设置到/etc/profile文件中,或者家目录下的.开头的文件中
===================
Configuration file for Linux system
User:
`/etc/passwd` (记录用户的详细信息)
`/etc/shadow` (记录用户的密码信息)
Group:
`/etc/group` (记录组的详细信息)
`/etc/gshadow` (记录组的密码信息)
定义创建用户时的默认配置信息:
`/etc/default/useradd`(记录创建用户所需设定的值)
useradd -D 可以设置对应的参数
`/etc/login.defs`(配置创建用户预设详细参数)
对应文档的格式说明
/etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码:UID:GID:用户注释信息:用户家目录:Shell定义
- 用户名: 用户的名称
- 密码: X表示占位符,也可以是密码
- UID: 用户识别代码
- GID: 用户所属组的GID(基本组)
- 用户注释信息:Comment,可以完善用户的基本信息
- 用户家目录: 系统登录用户后的工作目录
- shell: 定义用户登录系统所使用的shell,指定的shell需要在/etc/shells中出现
/etc/shadow
root:$6$YqkEsOcfKPptyhnS$YD0ym4BZ52pzcCnU....:16781:0:99999:7:::
用户名:密码:上一次修改密码的时间:密码最小使用期限:最长使用期限:警告时间:帐户过期时间:保留字段
- 用户名: 用户的名称,对应/etc/passwd文件中
- 密码: Centos6中使用MD5加密算法,Centos7中使用sha1的算法,第一个$后面加密算法类型,第二个$后面表示salt,第三个$后面表示密码的提取码(参照加密类型)
- 上一次修改密码的时间: 指用户上次修改密码的时间,计算方法:从Linux元年1970年01月01日0点0分到目录所经过的秒数
- 密码最小使用期限: 指用户修改密码后,需要到多少天后方可更改密码,0表示禁用
- 密码最长使用期限: 指用户的密码到多少天后需要修改密码
- 警告时间: 指用户密码到期前多少天提示用户修改密码,0和空字段表示禁用此功能
- 帐户过期时间: 批帐户在密码过期后多少天还未修改密码,将被停用
/etc/group
root:x:0:
组名:密码:GID:User_list
- 组名:组的名称,默认同名用户名
- 密码: 组的密码占位符,用于用户临时切换至需要的组以获取相应权限,可以使用
newgrp - GROUP_NAME
切换 - GID:组的全局识别号
- User_list:隶属此组的用户,多个用户使用","隔开
/etc/gshadow
root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.::
组名:密码:组管理者:User_list
- 组名:组的名称,同步/etc/group文件中
- 密码:第一个$后面表示加密算法,第二个$后面表示加密的密码
- 组管理者:可以对此组成员有操作权限,如果有多个,可以用逗号隔开
- User_list: 用户的列表,如果有多个,可以使用逗号隔开
=============
Linux管理用户的相关命令
添加用户:
`useradd` - create a new user or update default new user information
synopsis: useradd [options] LOGIN
useradd -D [options]
options:
-u : 指定用户的UID
-g : 指定GID
-c : 指定注释信息,如果有空格,需要使用" "包含
-d : 指定用户家目录,创建用户时,会自动将/etc/skel中的文件复制到用户家目录下,如果指定的文件存 在将不会复制文件,如果父目录不存在,创建也将会失败
-s : 指定用户shell
-r : 指定创建一个系统用户
-M :不创建用户家目录
-G : 指定附加组,多个使用逗号隔开
-D :修改创建用户的配置信息,文件位于/etc/default/useradd
注:创建用户时的诸多默认设定配置文件为/etc/login.defs
修改用户:
`usermod` - modify a user account
synopsis: usermod [options] LOGIN
options:
-u : 修改用户UID
-g : 修改用户GID
-c : 修改用户的注释信息
-d : 修改用户家目录,需要配合使用-m选项才会自动复制用户家目录下的文件到新的家目录
-m : move-home to new directory
-s : 修改用户的shell
-l : 修改用户的登陆名,即login名称
-G : 修改用户的附加组信息,需要配合-a(append)一起使用,如果不使用-a将删除原来的附加组
-a : --append,连接多个附加组的参数
-L : 锁定用户,即lock,在/etcpasswd文件中,密码前面加!(一个)
-U : 解锁用户,即unlock,在/etc/passwd文件中,取消密码前面的!号
删除用户
`userdel` - delete a user account and related files
synopsis: userdel [options] LOGIN
options:
-r : 删除用户的同时删除用户的家目录,即--remove参数
用户密码设置
`passwd` - passwd - update user's authentication tokens
synopsis:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
1、passwd (修改自己的密码)
2、passwd USERNAME(修改其他用户的密码,root权限 )
options:
-l : 锁定用户,在/etc/passwd的密码前面加!!,
-u : 解锁用户,在/etcpasswd的密码前!!取消
-d : --delete,删除用户密码
-e DATE : --expire,设定过期时间
-i DAYS : 非活动时间
-n days : 最短使用期限
-x days : 最长使用期限
-w days : 警告期限
--stdin : `echo "PASSWD" | passwd --stdin root`
Linux管理组的相关命令
添加组
`groupadd` - create a new group
synopsis: groupadd [options] group
options:
-g : 指定GID号
-r : 指定为一个系统组
修改组
`groupmod` - modify a group definition on the system
synopsis: groupmod [options] GROUP
options:
-g : 修改GID号码
-n : 修改组名称 (groupmod -n NEW_GROUP OLD_GROUP)
删除组
`groupdel` - delete a group
synopsis: groupdel GROUP_NAME
组密码设置
`gpasswd` - administer /etc/group and /etc/gshadow
synopsis: gpasswd [option] group
options:
-a USER_NAME GROUP_NAME: 向组内添加用户
-d USER_NAME GROUP_NAME: 把用户从组内删除
-r USER_NAMEG : 删除组的密码
临时切换到其他组,好能够获取相应权限
`newgrp` - log in to a new group
synopsis: newgrp [-] [group]
- : 模拟用户登陆, 以实现重新初始化环境变量
查看用户相关信息
`id` - print real and effective user and group IDs
synopsis: id [OPTION]... [USERNAME]
options:
-u : 查看UID号
-g : 查看GID号
-G : 查看附加组GID号,其他包含基本组ID号
-n : 将各ID转换为对应的名称
切换用户
`su` - switch user
sysnopsis: su [-] USER
options:
- : 以登陆方式切换用户,以完成用户环境变量、配置信息加载
-c : 不用登陆用户即可以以指定用户执行命令
`su - mariabd -c 'id -u'`
用户权限管理
`chmod` - change file mode bits
sysnopsis: chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
options:
-r --recursive : 递归修改
--reference : 参照某文件来修改
Usage:
1、赋权等值法
chmod u=rwx,g=rwx,0=rwx FILE
chmod a=rwx FILE
2、赋权加减法
chmod u-rwx,g-rwx,o-rwx FILE
chmod ugo-x FILE
chmod u+rwx,go+r FILE
chmod a+r FILE
3、十进制赋权法
chmod 777 FILE
4、参照赋值法
chmod --reference/var/log/file FILE
注意:1、在使用a+w的情况下,只有属主才会加w,go是不会加上W权限
2、目录有写权限操作,但对目录下的文件同有写权限时,用户是不能写文件、但有删除文件的能力
=============
chmod自己没有执行权限的解决方法:
1、使用ACL控制修复
- 1、setfacl -m u:root:rwx /bin/chmod
- 2、/bin/chmod 755 /bin/chmod
- 3、setfacl -b /bin/chmod (-b表示清除所有ACL访问规则 )
2、使用系统盘的emergency模式,使用光盘的chmod修改根文件系统中的chmod权限
=========
用户属主、属组修改(ownership)
`chown` - change file owner and group
synopsis: chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
options:
-R : --recursive 递归修改
--reference : 参照某文件来修改
Usage:
chown mariadb FILE : 只修改文件的属主为mariadb
chown mariadb:mariadb FILE :修改文件的属主、属组为mariadb
chown mariadb:mariadb FILE : 同上
chown --reference=/var/log/file FILE : 参照/var/log/file来修改FILE的属主、属组
`chgrp` - chgrp - change group ownership
synopsis: chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注:由于chgrp只能修改属组,故一般情况都使用chown代替
=============
Useradd、Usermod、Userdel、groupadd、groupdel、groupmod参数汇总
通用参数
用户管理类
useradd:
-u
-g
-c
-d
-s
-G
-r
-M
-D
usermod:
-u
-g
-c
-d
-s
-G
-a
-m
-l
-L
-U
userdel:
-r
id:
-u
-g
-G
-n
su
-c
说明:前四个命令中,命令使用的参数意义大体一样,只是useradd 和userdel的-r
参数意义不一样,前者表示为system,后者表示为remove,最后的su命令-c
表示为command的意义。
=========
passwd:
-d
-l
-u
-i
-e
-n
-x
-w
--stdin
说明:passwd与上者三个命令有重合的参数-l
,-u
与usermod -L
和-u
大小写不一样,userdel的-r
与passwd中的-d
表示不一样,同为删除,前者表示为remove,后者表示为delete.
=======
组管理类
groupadd:
-r
-g
groupmod:
-g
-n
groupdel:
无参数
说明:以上三个组管理命令 -g
-r
同管理用户的命令,groupmod中的-n
代表为new的意义
========
Linux系统特殊权限
Linux的安全上下文:
- 进程以某用户的身份运行,进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作
- 权限匹配模型:
- 判断进程的属主,是否为被访问文件的属主,如果是则应用屋主的权限,否则进入第二步;
- 判断进程的属主,是否属于被访问文件的属组,如果是则应用属组的权限,否则进入第三个步
- 应用Other权限
特殊权限位
一. SUID
SUID为什么需要?
默认情况下,用户发起的进程,其运行的进程属主是其发起者
SUID的作用
SUID模型就是为了改变上述情况的匹配模型,当用户运行某程序时,如果此程序拥有SUID权限,那么此程序运行为进程时,进程的属主不再是进程的发起者,而是程序文件自己的属主。
SUID实例应用:
如用户需要修改密码调用passwd程序时,需要将修改好的密码保存至/etc/shadow文件中,但如果以Linux安全上下文的模型应用,用户根本没有权限将新密码保存至/etc/shadow文件中,故passwd的程序就是一个拥有SUID权限的程序。当有新用户发起此程序时,进程的属主不再是进程发起者,而是/etc/passwd文件的属主,即root。
SUID权限的表示方法
-
-rws------
: 如果原本的U上有x
权限,设置SUID后,x
位变成小写的s
-
-rwS------
: 如果原本的U上没有x
权限,设置SUID后,x
位变成大写的s
SUID的设置文件
chmod u+s FILE
chmod 4000 FILE
二、SGID
SGID为什么需要?
通常用户于目录,将多个用户添加进一个附加组,在这个目录下建立的文件都属于这个附加组,附加组的成员都可以来修改属于这个附加组的文件,有修改,删除权限。
SGID的作用
当目录属主有写权限,且有SGID权限位时,所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不再是用户的基本组,而是此目录的属组,用户可以修改此附加组下的所有文件
SGID的应用实例
即SGID就是有效的解决了基本安全模型中,用户自能修改自己的文件。改进成了:在要在此目录下建立的文件,属组都属于目录的属主,只要是需要这个附加组的成员,都可以修改。类似团队协同工作的情况下,可以以此类模型工作。
SGID权限的表示方法
-
----rws---
:如果原本G上有x
权限,设置SGID后,x
位变成小写的s
. -
----rwS---
:如果原本G上有x
权限,设置SGID后,x
位变成大写的S
.
SGID的设置文件
chmod g+s FILE
chmod 2000 FILE
三、Sticky
sticky为什么需要?
应用于SGID这样协同办公的情况下, 用户能做到修改自己、其他用户的文件,却也能删除其他用户的文件,这种情况下非常的不安全,不能保证其他用户文件的安全存放问题。
sticky的作用
即为了解决以上情况,应用上层目录有写权限,属于此目录的组中的用户,只能修改文件,却不能删除别人的文件,能删除属于自己的文件
Sticky的表示方法
-
-------rwt
:如果原本o上有x
权限,设置Sticky后,x
位变成小写的t
. -
-------rwT
:如果原本o上有x
权限,设置Sticky后,x
位变成大写的T
.
四、facl(filesystem access control list)
为什么需要facl功能?
由于Linux安全模型中,当user1所拥有的文件想让user2来读取、写,只能通过如下方式实现:
- 将user2加入user1组中,即设置user2的附加组为user1;
- 在user1的文件中,在Other权限中加入rw操作
以上操作首先需要有管理员才能操作,另外,Other中应用r
或者w
权限安全隐患太大,故需要facl来解决。
facal的功能
- 实现用户自己管理权限;
- 对需要权限的用户设置单独的权限
facl应用后,权限访问模型发生的改变
- 当用户访问一个文件时,系统会先检查用户的属主是否等于文件的属主,否则,向下应用;
- 检查facl权限中应用的user权限位,有没有对应用户的授权权限,如果有则应用,否则,向下应用;
- 检查用户的属组是否跟文件的属组一致,或者检查此用户的附加组,有没有添加为文件的属组,有则应用,否则;
- 检查facl权限中应用的group权限位,有没有对应组的授权权限,如果有则应用,否则
- 检查Other的权限。
facl的设置
`facl` - filesystem access control list
sysnopsis: facl [options] [u|g]:[USER|GROUP][MODE][FILE]
options:
`-m` : 设置权限
`-x` : 清除权限
应用实例
-
facl -m u:mariadb:rw ./file
: 设置用户为mariadb对当前目录下的file有读写权限; -
facl -m g:mygrp:rw ./file
: 设置组为mygrp对当前目录下的file文件有读写权限 -
setfacl -x u:user5 dir/
:清除user5对dir目录的权限 -
setfacl -b ./file
: 清除file文件的所有用户和组的facl权限设置
facl权限的查看方法
getfacl FILE
: 查看file文件的facl的权限控制
有facl权限控制机制的文件,展示格式
----------+
: 在权限位后面多出来一个+
号,表示此文件有设置facl权限位
==========
转载请注明出处