Linux基础-04-用户组+权限管理
Linux用户&组
基础知识
- Linux用户
- 管理员: root 0 (UID)
- 普通用户:1-65535
- 系统用户:1-499/1-999
- 登录用户: 500+ / 1000+
- Linux组
- 管理员组: root 0
- 普通组:1-65535
- 系统组:1-499/1-999
- 登录用户组:500+ / 1000+
- 组类型:
- 基本组–主组: 组名会和用户名相同,且仅包含一个用户的组–私有组
- 附加组–额外组:一个用户可以属于多个附加组
Linux安全上下文
- 运行中的程序: 进程
- 进程能够访问的所有资源的权限在于进程发起者的用户身份
用户和组相关的配置文件
/etc/passwd : 用户及其属性信息(用户名称,用户ID,基本组ID等等)
/etc/group: 组及其属性信息
/etc/shadow: 用户密码及其属性信息
/etc/gshadow: 组密码及其属性信息
配置文件/etc/passwd:
root:x:0:0:root:/root:/bin/bash
username:password:UID:GID:GECOS(用户注释信息):home directory:shell
配置文件/etc/group
root:x:0:gname:password:GID:user_list
配置文件/etc/shadow
root:xxxx::0:99999:7:::
登录名:加密密码:最近一次更改密码的日期:密码的最小使用期限:密码的最大使用期限:密码的警告时间段:密码的禁用日期:账户过期日期:保留字段
用户管理命令
useradd命令:创建用户
[root@test ~]# useradd --help
Usage: useradd [options] LOGIN常用选项:
-u: 指定uid
-g:指定gid
-c:指定用户注释信息
-d:指定家目录
-s:指定shell类型(默认是/bin/bash)
-G:指定附加组
-r:指定为系统用户
-M:不创建家目录
默认设置:
1
2[root@test ~]# useradd zhangsan
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash创建用户的默认配置:
1
2
3
4
5
6
7
8
9[root@test ~]# cat /etc/default/useradd
useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes1
2[root@test ~]# useradd -u 2000 -c "this is lisi" -d /home/ll lisi
lisi:x:2000:2000:this is lisi:/home/ll:/bin/bashuserdel命令:删除用户
常用选项:- -r:remove home directory and mail spool 删除用户家目录和邮件信息
usermod命令:编辑用户信息,
常用选项:- -G:将用户添加到附加组中
- -dm:移动用户新登录目录(默认情况会登录到自己的家目录下)
- -L: 锁定用户
- -U: 解锁用户
- 其他选项与useradd基本类似
passwd命令:编辑用户密码
常用选项:-n mindays: 指定最短使用期限
-x maxdays:指定最大使用期限
-w warndays:提前多少天开始警告
-i Inactivedays: 非活动期限
–stdin: 从标准输入接收用户密码
1
2
3[root@test ~]# echo "111111" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.案例1:创建用户gentoo、附加组为distro和linux,默认shell为/bin/csh,注释信息为“Gentoo Distribution”
[root@test ~]# useradd -G linux,distro -c "Gentoo Distribution" -s /bin/csh gentoo
组管理命令:
groupadd命令:创建组
常用选项:- -g: 指定gid
- -r: 指定为系统组
- -p, –password PASSWORD use this encrypted password for the new group
[root@test ~]# groupadd -g 2000 -r linux
groupdel命令:删除组
常用选项:- -r, –remove remove home directory and mail spool
- -f, –force force some actions that would fail otherwise
groupmod命令:编辑组信息
常用选项:- -g, –gid GID change the group ID to GID 指定GID
- -n, –new-name NEW_GROUP change the name to NEW_GROUP 修改组名称
- -p, –password PASSWORD change the password to this (encrypted) 修改组密码
gpasswd命令:编辑组密码
常用选项:- -a, –add USER add USER to GROUP 添加用户到某个组中
- -d, –delete USER remove USER from GROUP 移除用户从某个组
- -r, –delete-password remove the GROUP’s password 删除组密码
- -M, –members USER,… set the list of members of GROUP 设置组列表
- -A, –administrators ADMIN,… set the list of administrators for GROUP设置组中管理员
用户/组相关命令
id命令:
[root@test ~]# id --help
Usage: id [OPTION]… [USER]常用选项:
-Z, –context print only the security context of the current user 只输出当前用户的安全上下文
-g, –group print only the effective group ID 只输出主组ID
-G, –groups print all group IDs 输出所有组ID
-n, –name print a name instead of a number, for -ugG 输出是名字代替ID号
-r, –real print the real ID instead of the effective ID, with -ugG 输出真实ID号
-u, –user print only the effective user ID
1
2[root@test ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) groups=1000(zhangsan),0(root)su命令:切换用户或提权
常用的切换方式:su username
: 切换用户,不读取用户配置信息su - username
: 切换用户,读取用户配置信息(完全切换)su [-] username -c "Command"
: 切换用户执行命令[zhangsan@test ~]$ su root -c "cat /etc/shadow
login.defs
useradd参照文件
创建用户时对用户的一些限制,对root用户无效
1 | [root@test ~]# vim /etc/login.defs |
1 | [root@test ~]# chage -h |
1 | [root@test ~]# useradd user01 |
新建用户home 目录下的bash 开头的文件是从/etc/skel/
中复制过去的
Linux权限管理
-rw-r--r--. 1 root root 128 Feb 6 06:39 1.txt
- -: 文件类型;普通文件
- rw-: 属主拥有的权限 – 读写权限
- r–: 属组拥有的权限 – 只读权限
- r–: other 拥有的权限 – 只读权限
- 1: 链接引用数
- root: 文件属主
- root: 文件属组
- 128: 文件大小
文件的权限主要针对三类对象进行定义:
- owner : 属主 u
- group : 属组 g
- other :其他 o
每个文件针对每类访问者都定义了三种权限:
- r: readable 可读
- w:writeable 可写
- x:eXcutable 可执行
文件的权限建立在r权限之上,目录的权限建立在x权限之上
- 文件
- r:可以使用文件查看类工具获取其内容(4)
- w:可以修改其内容(2)
- x:可以把此文件提交给内核启动为一个进程(1)
- 目录:
- r: 可以使用ls查看目录中的文件列表
- w: 可以在此目录创建或删除文件
- x: 可以cd到此目录中
权限相关命令
chmod命令: 设置文件权限
[root@test ~]# chmod --help
Usage: chmod [OPTION]… MODE[,MODE]… FILE…常用选项:
-R: 递归修改
MODE
- u=[rwx] : 设置属主权限
- g=[rwx] : 设置属组权限
- o=[rwx] : 设置其他权限
a=[rwx] : 设置所有人的权限
方式1:
1
2
3[root@test ~]# chmod u=rwx,g=rw,o=rx hello
[root@test ~]# ll hello
-rwxrw-r-x. 1 root root 1 Feb 6 02:50 hello方式2:
chmod [1-7][1-7][1-7] filename
r:4 w:2 x:11
2[root@test ~]# chmod 644 hello
-rw-r--r--. 1 root root 1 Feb 6 02:50 hellochown命令:改变文件属主和属组
[root@test ~]# chown --help
Usage: chown [OPTION]… [OWNER][:[GROUP]] FILE…常用选项:
- -R: 递归修改
- [OWNER] 指定属主
- [GROUP] 指定属组
1
2
3[root@test ~]# chown wangwu:wangwu hello
[root@test ~]# ll hello
-rw-r--r--. 1 wangwu wangwu 1 Feb 6 02:50 hellochgrp命令:修改属组
[root@test ~]# chgrp --help
Usage: chgrp [OPTION]… GROUP FILE…
常用参数:- -R:递归处理
- GROUP 指定的是属组
- –reference=RFILE :以参考文件的属主数组来设定
umask:文件或者目录的遮掩码: 当用户创建文件或者目录的时候的默认权限
1
2[root@test ~]# umask
0022[root@test ~]# umask 0042
设定umask值FILE: 666-umask值(通常来说文件预设没有x权限)
DIR: 777 - umask值查看umask: umask
chattr
+i 不得任意改动文件或目录
[root@test ~]# lsattr file2 ---------------- file2 [root@test ~]# chattr +a file2 [root@test ~]# lsattr file2 -----a---------- file2 [root@test ~]# man chattr ---------- ATTRIBUTES(属性) 当修改设置了'A'属性的文件时,它的atime记录不会改变. 这可以在笔记本电脑系统中避免某些磁盘I/O处理. 设置了`a'属性的文件只能在添加模式下打开用于写入. 只有超级用户可以设置或清除该属性. 设置了`c'属性的文件在磁盘上由内核自动进行压缩处理. 从该文件读取时返回的是未压缩的数据. 对该文件的一次写入会在保存它们到磁盘之前进行数据压缩. 设置了`d'属性的文件不能对其运行 dump(8) 程序进行备份. 设置了`i'属性的文件不能进行修改:你既不能删除它,也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据.只有超级用户可以设置或清除该属性. 当删除设置了`s'属性的文件时,将对其数据块清零 并写回到磁盘上. 当修改设置了`S'属性的文件时, 修改会同步写入到磁盘上;这与 应用 到文件子系统上的`sync'挂载选项有相同的效果. 当删除设置了`u'属性的文件时, 将会保存其内容. 这使得用户可以请求恢复被删除的文件.
s:程序所有者有x权限1
2
3
4
5
6
7
8
9
10
11
12
# Linux特殊权限
文件的特殊权限:SUID SGID SBIT
## SUID
借出程序所有者的权限(4)
```sh
[root@test ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
S:程序所有者没有x权限
案例:
passwd命令:修改用户密码 ,需要修改/etc/shadow文件
1 | [root@test ~]# ll /etc/passwd |
根据权限可以得知同一用户或其他人都可以调用该命令
问题:
- /etc/passwd文件仅仅root用户拥有w权限,其他用户没有
- 其他用户虽然可以调用passwd命令,但是无法写入到/etc/passwd文件
SUID权限作用: 其他用户没有权限修改/etc/passwd文件,但是root用户可以将
w权限赋予给其他用户去修改/etc/passwd命令
注意:
- SUID权限仅仅对二进制程序有效
- 执行者必须有用x权限
- 仅在本程序中拥有修改权限
- 属主拥有s权限,即可将自己的权限暂时借由他人使用,前提是要拥有x权限
SGID
借出用户组的权限 (2)
案例:
1 | [root@localhost ~]# useradd zhangsan |
lisi用户在SGID目录创建文件的属主为zhangsan(该目录的所属组)
1 | 都是test2做的事情 |
这种权限特性可以在同一个用户组的多个用户拥有共同的目录,在创建文件时该用户组的所有用户具有相同的权限操作,同一个属组中的用户在拥有SGID权限的目录下创建文件,属组都是该目录的所属组
注意:
SGID对目录
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
- 使用者在此目录下的群组将会变成该目录的群组
- 若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
SGID对文件
- SGID 对二进制可执行文件有效
- 程式执行者对于该文件来说,需具备 x 的权限
- 执行者在执行的过程中将会获得该文件群组的支援(用于改文件群组的权限)
Sticky
对目录有效 (1)
1 | [root@test ~]# ll -d /tmp/ |
注意:
- 当用户对此目录具有w|x权限时,及拥有写入权限
- 用户在此目录创建文件,只有自己和root用户有权限删除
- 用户不允许对其他用户进行任何操作
设置特殊权限
1 | chmod u+s file |
Linux ACL权限
ACL 访问控制列表; 主要目的是在提供的传统的owner group w x r 权限之外的细部权限设定
ACL 可以针对某一个使用者,某一个文件或者目录来设定rwx权限,对于需要特殊权限的使用状态非常有帮助
setfacl 命令
设定权限
1 | [root@test tmp]# setfacl --help |
常用选项:
- -m : 更改acl设定参数
- -x :删除acl设定参数
- -b :移除所有的acl设定参数
- -R :递归添加acl设定参数
- -d : 添加默认acl设定参数
删除用户权限: setfacl -x u:username file
删除组权限: setfacl -x g:groupname file
删除整个acl权限: setfacl -b file
实例1 针对用户的设定方式:
设定规范:u:username:power
1.设定user对testfile有rwx权限setfacl -m u:user:rwx testfile
2.设定user对testdirectory目录下所有文件有rwx权限setfacl -R -m u:user:rwx testdirectory
3.去掉user对testdirectory的x权限setfacl -m u:user:rw- testdirectory
4.去掉所有acl权限setfacl -b
5.为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限setfacl -d -m u:user:rwx testdirectory
实例2: 针对用户组的设定方式
设定规范:g:groupname:power
给acl_test1文件添加mygropu1组rx权限设定
1 | [root@study ~]# setfacl -m g:mygroup1:rx acl_test1 |
getfacl命令
查看acl权限设定
1 | [root@test tmp]# getfacl testfile |
mask
用于临时降低用户或组(除属主和其他人)的权限
mask决定了他们的最高权限
建议:为了方便管理文件权限,其他人的权限置为空
1 | [root@test ~]# setfacl -m o::- file1 |
default
一般用于目录中,默认权限独立于该目录本身的权限,规定了在该目录中创建的文件的默认ACL权限。
要求:希望centos能够对/home 以及以后在/home 下新建的文件有读、写、执行权限
1 | [root@test ~]# setfacl -m u:centos:rwx /home |