Linux用户身份与文件权限

用户身份与文件权限

  • 用户

1.管理员 root UID: 0
2. 系统用户 5/6 UID: 1-499
红帽7 UID 1-999 /sbin/nologin
3.普通用户 5/6 500-65535 7 1000-

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
id xps   # 查看用户信息
useradd
useradd -u 555 xps   # 新建用户并指定uid
useradd -u ssbin/nologin xps   # 指定终端
adduser

groupadd hhh   # 新建用户组

usermod -G hhh xps   # 基本组/扩展组
usermod -u 666 xps   # 修改uid

groupdel hhh    # 删除用户组
passwd xps   # 重置密码


userdel xps   # 删除用户(不删除home等)
userdel -r xps   # 删除用户(信息全删除)
deluser

#修改name的话可以直接去 /etc/passwd修改
  • 文件权限
1
2
3
4
5
6
7
文件类型
➢ -:普通文件。
➢ d:目录文件。
➢ l:链接文件。
➢ b:块设备文件。
➢ c:字符设备文件。
➢ p:管道文件。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
r读4
w写2
x执行1

===============
chmod  # 权限   格式为“chown [参数] 所有者:所属组 文件或目录名称”     chown root:bin test
chown   # 所有者,属性

-Rf    # 强制的意思

chmod -Rf 777 test/
chmod -Rf g+s test/           # 并为该目录设置了 SGID 特殊权限位

chmod -R o+t linux/          # 设置sbit权限 保护位
  • 文件的特殊权限
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1.**SUID**    # 让程序执行者,临时获取程序所有者的身份(仅对拥有执行权限的二进制程序有效)
u+s   4

2.**SGID**    # 让程序执行者,临时获取程序所有组的身份
            让目录内的新建文件,集成目录所有组的名称
 g+s  2         
          
3.**SBIT**    #让目录内的文件,**只能自己删除自己**的
RHEL 7 系统中的/tmp 作为一个共享文件的目录,默认已经设置了 SBIT 特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件;
当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T
o+t   1


suid:  
x 改变成 s 就意味着该文件被赋予了 SUID 权限。如果原本的权限是 rw-呢?如果原先权
限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S
s 证明原先有x
S  证明原先没有x

sgid:  
s 证明原先有x
S  证明原先没有x

sbit:  
对其他目录来设置 SBIT 特殊权限位,用 chmod 命令就可以了。对应的参数 o+t 代表设置 SBIT 粘滞位权限:
t 证明原先有
T  证明原先没有x

例如: 
转换7654    # 7是特殊权限位, 654是一一般权限位
    420 401 400
    rw- r-x r--
    7: = 4+2+1 三个都涉及了,所以要都加上    # S->之前没有x权限,s->之前有x权限,T->之前没有...
      rwSrwsr-T
======
rwsr--rwT

rwxr--rw-   746
s=4,T=4
5746

======
r-Srws--T

5470
  • 文件的隐藏属性
1
2
3
4
1.chattr          设置文件的隐藏权限,格式为“chattr [参数] 文件”
            chattr +a /var/log/message
2. lsattr          显示文件的隐藏权限,格式为“lsattr [参数] 文件”
            lsattr -d Desktop/   $ 查看目录的...

表 5-6 chattr 命令中用于隐藏权限的参数及其作用

参数 含义
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用 dump 命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
X 可以直接访问压缩文件中的内容
  • 文件访问控制列表 ACL
1
2
对某个指定的用户进行单独的权限控制  
如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL
1
2
3
4
5
6
7
8
9
1.setfacl 命令
(针对目录文件需要使用-R 递归参数;
针对普通文件则使用-m 参数;
如果想要删除某个文件的 ACL,则可以使用-b 参数)  
 setfacl -Rm u:xps:rwx /root      # -m 修改
 setfacl -Rm g:xpsg:r-x /tmp
看到文件的权限最后一个点(.)变成了加号(+) ,这就意味着该文件已经设置了 ACL 了。

2.getfacl
  • su 与sudo
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
su - xps
su 命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)


使用 sudo 命令把特定命令的执行权限赋予给指定用户(避免泄露 root 管理员密码)

**sudo 服务中的可用参数以及作用**   
-h 列出帮助信息
-l 列出当前用户可执行的命
-u 用户名或 UID 值 以指定的用户身份执行命
-k 清空密码的有效时间,下
-b 在后台执行指定的命令
-p 更改询问密码的提示语


**sudo 命令具有如下功能:**
➢ 限制用户执行指定的命令:
➢ 记录用户执行的每一条命令;
➢ 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
➢ 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。


使用 sudo 命令提供的 visudo 命令
来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改 sudoers 配置文件,还
可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。
(只有root才能使用visudo编辑所服务的配置文件)


在 sudo 命令的配置文件中,按照下
面的格式将第 99 行(大约)填写上指定的信息:
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
xps ALL=(ALL) ALL



如果需要让某个用户只能使用 root 管理员的身份执行指定的命令,切记一定要给
出该命令的绝对路径,否则系统会识别不出来。
先使用 whereis 命令找出命令所对应
的保存路径,然后把配置文件第 99 行的用户权限参数修改成对应的路径即可
xps ALL=(ALL) /usr/bin/cat


加 NOPASSWD 参数,使得用户执行 sudo 命令时不再需要密码验证:
 xps ALL=NOPASSWD: /usr/sbin/poweroff
0%