用户身份与文件权限
5.1 用户身份与能力
在Linux系统中有三种用户身份:管理、系统用户、普通用户
1、系统管理员拥有最高的系统所有权UID=0,常用是root。
2、用户的三种身份:
管理员UID=0:系统的管理员用户
系统用户UID=1~999:服务程序会有独立的系统用户负责运行
普通用户UDI=1000~:由管理员创建的用于日常工作的用户
3、用户组GID:
通过GID用户组号码将多个用户加入到同一个组中,方便为组中的用户统一规划权限或指定任务。
基本用户组:创建用户时自动创建同名用户组。基本用户组可以为空,最多为一个。
扩展用户组:用户被纳入其它用户组时,称为扩展用户组。可以有多个扩展用户组。
5.1.1 useradd
useradd [选项] 用户名
更多参数
默认的用户家目录:/home/用户名
默认的shell解释器:/bin/bash
默认创建同名用户组
|参数|作用|
—|---
-d|指定用户的家目录
-e|账户到期时间,YYYY-MM-DD
-g|指定一个初始的用户基本组(必须已存在)
-G|指定一个或多个扩展用户组
-N|不创建与用户同名的基本用户组
-s|指定该用户的默认Shell解释器
/sbin/nologin解释器,表示用户不允许登录
5.1.2 groupadd 创建用户组
group [选项] 群组名
更多参数
[root@linuxprobe Desktop]# id xiaoguo
uid=1001(xiaoguo) gid=1001(xiaoguo) groups=1001(xiaoguo)
[root@linuxprobe Desktop]# usermod -G xiaozhai xiaoguo
[root@linuxprobe Desktop]# id xiaoguo
uid=1001(xiaoguo) gid=1001(xiaoguo) groups=1001(xiaoguo),8891(xiaozhai)
[root@linuxprobe Desktop]#
5.1.3 usermod 修改用户的属性
usermod [选项] 用户名
更多参数
Linux中一切都是文件,所以修改/etc/passwd配置文件也可以修改用户的属性
[root@linuxprobe Desktop]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[root@linuxprobe Desktop]# usermod -u 666888 linuxprobe
[root@linuxprobe Desktop]# id linuxprobe
uid=666888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
5.1.4 passwd 修改用户密码、过期时间、认证信息等
passwd [选项] [用户名]
更多参数
普通用户只能使用passwd命令修改自身的系统密码
root管理员则有权限修改其他所有人的密码,root管理员修改密码时不需要验证旧密码。
–stdin 允许通过标准输入修改用户密码。
[root@linuxprobe Desktop]# passwd xiaoguo
Changing password for user xiaoguo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@linuxprobe Desktop]#
----密码设定的过于简单重复会被拒绝-----
[root@linuxprobe Desktop]# passwd -l xiaoguo
Locking password for user xiaoguo.
passwd: Success
5.1.5 usrdel 删除用户
userdel [选项] 用户名
默认删除后家目录会保留
-r 同时删除用户及用户家目录
[root@linuxprobe home]# userdel -r xiaoxiao
5.2 文件权限与归属
Linux系统中一切都是文件,但文件类型却不相同。
文件类型
文件类型 | 字符代码 | 文件实例 |
---|---|---|
常规文件 | - | 二进制文件、纯文本、XML、压缩文件等 |
目录文件 | d | 文件夹 |
字符设备 | c | character device,如串口、键盘、鼠标、EEPROM等,以char为单位进行随机访问 |
块设备 | b | block device,如硬盘、SD卡、eMMC等,以block为单位进行随机访问 |
命名管道 | p | pipe,存在于内存中,用于进程间通信,很少用到。 |
套接字 | s | socket文件,用于C/S网络通信 |
软链接 | l | symbolic link,类似Windows快捷方式 |
文件归属和权限
所有者,所有组,其他人
权限 | 数值 | 意义 | 目录文件意义 |
---|---|---|---|
r | 4 | 可读 | 可以浏览目录内文件列表 |
w | 2 | 可写 | 可以在目录内新增、删除、重命名文件 |
x | 1 | 可执行 | 能够进入该目录 |
权限 | 数值 | 权限 | 数值 |
---|---|---|---|
— | 0 | –x | 1 |
-w- | 2 | -wx | 3 |
r– | 4 | r-x | 5 |
rw- | 6 | rwx | 7 |
chmod 设置文件或目录的权限
chmod 权限 文件
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-r-xrwx. 1 root root 1207 Jan 22 07:41 anaconda-ks.cfg
chown 属性
chown [参数] 所有者:所属组 文件或目录
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-r-xrwx. 1 linuxprobe linuxprobe 1207 Jan 22 07:41 anaconda-ks.cfg
5.3 文件的特殊权限
rwx无法满足复杂多变的工作环境,引入特殊权限位SUID SGID SBIT
5.3.1 SUID-------Ss
让程序的执行者临时获取到属主的权限
chmod u+s 文件名
[linuxprobe@linuxprobe ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 30 2014 /usr/bin/passwd
[linuxprobe@linuxprobe ~]$
原本x的位置,显示为s(S)说明该文件被赋予了SUID权限。
rwx—>rws
rw-—>rwS
5.3.2 SGID-------Ss
chmod -R g+s 文件名
1、对可执行文件,让执行者临时拥有属组。等同于SUID
2、对目录文件,在目录中创建的所有的新文件都默认归属于这个组用户
[root@linuxprobe home]# mkdir xiaoyun
[root@linuxprobe home]# chmod -R 777 xiaoyun
[root@linuxprobe home]# ls -ld xiaoyun
drwxrwxrwx. 2 root root 6 Jan 28 20:09 xiaoyun
[root@linuxprobe home]# chmod -R g+s xiaoyun
[root@linuxprobe home]# ls -ld xiaoyun
drwxrwsrwx. 2 root root 6 Jan 28 20:09 xiaoyun
[root@linuxprobe home]#
---用户组的可执行权限x,变为了s---
在拥有SGID权限的目录中,无论谁创建新的文件,其所属组并不属于创建者,而是继承了该目录的所属组的属性。
简单来说,在这个特殊权限的文件夹中新建的文件与该文件夹的在一个组中。与创建者并无关联。
接上面实验
[linuxprobe@linuxprobe ~]$ cd /home/xiaoyun
[linuxprobe@linuxprobe xiaoyun]$ touch haha
[linuxprobe@linuxprobe xiaoyun]$ ls -l haha
-rw-rw-r--. 1 linuxprobe root 0 Jan 28 20:15 haha
---xiaoyn有SGID权限的目录。
linuxprobe在xiaoyun目录中新建的haha文件,其所属组为root组。继承了xiaoyun的所属组属性。
而不是通常默认的linuxprobe组
5.3.3 SBIT-------Tt
SBIT保护位权限,也叫粘滞位权限:确保非文件的所有者,不能删除该文件。
chmod -R o+t 目录名
rwx —>rwt
rw- —>rwT
实验
[lisi@linuxprobe tmp]$ touch aaa
[lisi@linuxprobe tmp]$ chmod 777 aaa
[lisi@linuxprobe tmp]$ ls -l aaa
-rwxrwxrwx. 1 lisi lisi 0 Jan 28 20:46 aaa
[lisi@linuxprobe tmp]$ chmod o+t aaa
[lisi@linuxprobe tmp]$ ls -ls aaa
0 -rwxrwxrwt. 1 lisi lisi 0 Jan 28 20:46 aaa
[lisi@linuxprobe tmp]$ exit
logout
[root@linuxprobe tmp]# su - zhangsan
Last login: Tue Jan 28 20:34:34 CST 2020 on pts/0
[zhangsan@linuxprobe ~]$ cd /tmp
[zhangsan@linuxprobe tmp]$ ls -l aaa
-rwxrwxrwt. 1 lisi lisi 0 Jan 28 20:46 aaa
[zhangsan@linuxprobe tmp]$ rm aaa
rm: cannot remove ‘aaa’: Operation not permitted
[zhangsan@linuxprobe tmp]$ rm -f aaa
rm: cannot remove ‘aaa’: Operation not permitted
[zhangsan@linuxprobe tmp]$
---lisi创建aaa文件,设置SBIT保护,zhangsan用户已经无法删除---
权限数值法的转换
SUID=4 SGID=2 SBIT=1
r=4 w=2 x=1
sst替换的是原有x权限
SST替换的是原无x权限
数值法表示时,特殊权限写在最前面。
例:
rwS r-s -wT=7652
6543=ss+r-xr—wx=r-sr-S-wx
7654=rwSr-sr–T
5.4 文件的隐藏属性
下图中文件名前带.的文件是隐藏文件
[root@linuxprobe tmp]# ls -al
total 16
drwxrwxrwt. 14 root root 4096 Jan 28 20:48 .
drwxr-xr-x. 17 root root 4096 Jan 28 18:39 ..
drwxrwxrwt. 2 root root 50 Jan 28 18:40 .ICE-unix
5.4.1 chattr 设置文件的隐藏权限
chattr [参数] 文件
更多参数
+添加权限 -取消权限
i:无法对文件进行修改,若为目录则无法新建或删除文件
a:只能追加内容,无法覆盖/删除内容。如:日志类文件
lsattr 查看文件的隐藏权限
lsattr [参数] 文件
更多参数
5.5 文件访问控制列表(ACL)
一般权限、特殊权限、隐藏权限有一个共性:是针对某一类用户设置的。
ACL是基于普通文件和目录针对指定的用户或用户组设置文件或目录的操作权限。
若对目录设置了ACL,目录中的文件会继承目录的ACL。
5.5.1 setfacl 管理文件的ACL规则
setfacl [参数] 文件名称
参数 | 作用 |
---|---|
-R | 设置目录文件时的递归参数 |
-m | 设置普通文件 |
-b | 删除ACL权限 |
u:用户名:权限 文件名 | 设置用户权限 |
g:组名:权限 文件名 | 设置用户组权限 |
实验:
[root@linuxprobe home]# mkdir xiaoqian
[root@linuxprobe home]# chmod -R 000 xiaoqian
[root@linuxprobe home]# ls -ld xiaoqian
d---------. 2 root root 6 Jan 28 22:23 xiaoqian
#设置zhangsan用户拥有xiaoqian目录的rwx权限
[root@linuxprobe home]# setfacl -Rm u:zhangsan:rwx xiaoqian
[root@linuxprobe home]# ls -ld xiaoqian
#<kbd>+</kbd>显示的ACL的控制权限
#系统默认用户的ACL权限显示在用户组权限位
d---rwx---+ 2 root root 6 Jan 28 22:23 xiaoqian
5.5.2 getfacl 显示文件上设置的ACL权限信息。
getfacl 文件名称
#使用getfacl查看xiaoqian的权限
[root@linuxprobe home]# getfacl xiaoqian
# file: xiaoqian
# owner: root
# group: root
user::---
user:zhangsan:rwx #显示出zhangsan拥有的权限
group::---
mask::rwx
other::---
5.6 su命令与sudo命令
su 切换用户
su 用户·
管理员切换用户不需要密码;普通用户切换需要密码
su - 用户
-号表示完全切换,环境变量信息也变更为新用户的相就信息
sudo 给普通用户提供额外的权限来完成原本root管理员才能完成的任务
sudo [参数] 命令名称
sudo功能
1、限制用户执行指定的命令
2、记录用户执行的每一条命令
3、配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数
4、验证密码后5分钟内(默认值)无须再让用户再次验证密码
visudo命令 配置放行root权限,只有root管理员才可以使用这个命令。
visudo 第99行
用户名 ALL=(ALL) ALL
第一个ALL:配置来源地址,本地、远程、iP等,ALL表示不限制来源地址。
第二个(ALL):获取最高权限
第三个ALL:放行所有命令,不建议使用。
推荐:完整路径+命令,多个命令用逗号间隔。