Linux用户管理与文件权限管理

Linux管理用户与组;文件权限管理

linux安全模型

  • Authentication:认证,验证身份
  • Authorization:授权,不同权限
  • Accounting:审计

用户

  • 管理员:uid 0
  • 普通用户
    • 系统用户:uid 1-999,给后台程序使用如mysql,nginx
    • 登录用户:uid 1000+

用户组

  • 一个用户可以是一个或多个组
  • 用户组可以为空
  • primary group(主组):私有组,必须有且只有一个,创建时会创建同名的主组
  • 附加组:用户可以加入除主组外的其他组

安全上下文

用户,程序,进程,能访问的资源在权限上保持一致。

用户与组的配置相关文件

  • /etc/passwd: 用户及其属性uid,gid
  • /etc/shadow:用户密码及属性
  • /etc/group:组及其属性
  • /etc/gpasswd:组密码及其属性

getent:用于查询系统数据库

get entries

getent basename key

chsh:修改用户sh

-s shell路径

chsh -s /bin/sh root

shadow

禁用用户时可在密码字段前加上

usermod -L jose

usermod -U jose # 解锁

vipw & vigr

安全编辑passwd,group文件

pwck & grpck

检查passwd,group文件

管理用户与组

用户管理:

  • useradd
  • usermod
  • userdel

组管理:

  • groupadd
  • groupmod
  • groupdel

groupmod:组修改

-n 组改名

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 先创建用户组,这样创建用户时可指定
groupadd -g 111 -r loong		# -g 指定gid,-r系统组

useradd -u 111 -g loong -s /bin/bash -d /home/loong -M -r loong
# -u,指定uid;-g,指定组;-s,指定shell;-d指定家目录;-M,不创建家目录;-r,系统用户

# 创建用户
useradd looong
adduser -D 		#查看默认的参数


# /etc/skel/,是家目录模板

批量创建用户

1
2
3
4
5
cat user.txt 
u1:123456:1024:1024::/home/u1:/bin/bash
u2:123456:1025:1025::/home/u2:/bin/bash

newusers user.txt 

批量改口令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cat pwd.txt
u1:1234567
u2:1234567

chpasswd < pwd.txt

chpasswd <<EOF
> u1:1234567
> u2:1234567
> EOF

SHA512加密

openssl passwd -6 123456

-6 指定SHA512

su

1
2
3
su username
su - username		# 会读取配置文件
su -s /bin/bash mail	# nologin账户,可以指定shell,达到登录目的

不切换用户,使用它的权限执行

1
su - loong -c "touch jose-2.txt"

passwd:修改,设置密码

passwd -e jose

expired 到期

jose在下次登录后,会让它修改密码

gpasswd:更改组成员与密码

1
2
3
4
5
gpasswd -a loong group1		# 向组添加成员

gpasswd group1				# 设置组密码

gpasswd -d loong group1		# 移除组成员

groupmems:更改,查看组成员

1
groupmems -l group1		# 列出组成员

groups:列出自己的组列表

newgrp:临时切换组

1
newprp group2 # 切换之后创建的文件属组就是group2

文件权限管理

image-20241026165819685

文件所属人所属组操作

root 的权限不受文件的权限位

chown:设置所属人,所属组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 也可使用uid,gid修改

chown jose: a2.txt					# 人与组都修改了

chown :jose a2.txt					# 只改了组

chown jose:jose a2.txt 				# 都修改

chown --reference=f1.txt f2.txt		# 根据文件1修改文件2

chown -R jose.tom dir1/				# 修改文件夹下所有

chown mage --dereference a.link		# 修改连接指向的文件
chown mage --no-dereference a.link 	# 修改链接文件本身

chgrp

同上

文件权限

r和w权限对root 用户无效,对没有读写权限的文件,root用户也可读可写

只要所有者,所属组或other三者之一有x权限,root就可以执行

创建文件,初始权限是644

创建目录,初始权限是755

Linux中的目录和文件的权限区别?分别说明读,写和执行权限的区别

  • r 4

    • 文件:读其中内容
    • 目录:查看目录下内容,但不能看文件里内容
  • w 2

    • 文件:修改文件

    • 目录:在目录下创建删除重命名;

      写权限与执行权限的关系:要在目录中创建、删除、重命名文件,不仅需要写权限,还需要执行权限.

  • x 1

    • 文件:执行文件
    • 目录:允许进入目录

chmod:修改文件权限

–reference=FILE

-R|–recursive

1
2
3
4
5
chmod u=r,g=w,o=x f2
chmod u+w,g-x,o-r f3
chmod a=rwx f4

chmod 644 a1

删除权限的特殊性:在 Linux 中,删除文件或目录的权限取决于该文件所在目录的写权限,而不取决于文件本身的权限。这意味着即使文件只读,如果用户对目录有写权限,仍然可以删除文件。

1
2
3
4
5
[loong@loong t]$ chmod u-rwx 1.log 
[loong@loong t]$ cat 1.log 
cat: 1.log: Permission denied
[loong@loong t]$ rm -f 1.log 
[loong@loong t]$ ls					# 删除成功

image-20241026203611014

umask:权限掩码

掩码是用默认权限减去掩码

文件的默认权限是644

目录的默认权限是755,因为目录需要执行权限来允许进入目录、查看和操作目录内容。

默认umask-022

1
2
3
4
5
6
7
8
9
umask -p
umask 0022
# 第一位 0:特殊权限位,不常用,一般设为 0。
# 第二位 0:影响文件所有者的权限(不做任何限制)。
# 第三位 2:影响组的权限,禁止写权限。
# 第四位 2:影响其他用户的权限,禁止写权限。

umask -S
u=rwx,g=rx,o=rx

特殊权限

SUID:

设置SUID位的主要作用是使普通用户在执行这个文件时,临时获得文件所有者(通常是root)的权限。

  • 二进制文件:二进制文件执行后,进程属于文件的所属人,而不是执行的人(无SUID,进程属于执行人)
  • 目录:无意义
1
2
3
4
# 只有文件的所有者或者root用户可以更改文件的SUID(Set User ID)权限位。
chmod u+s FILE
chmod 4xxx FILE
chmod u-s FILE

SGID:

  • 二进制文件:执行该文件的用户将以文件所属组的权限来运行它,而不是以用户本身的组权限来运行。
  • 目录:使目录下创建的文件的所属组为目录的所属组(而不是创建者的默认组)。

大写的S 表示SGID位已设置,但组用户没有执行权限。这种设置会使SGID没有实际效果,因为没有执行权限。

小写的s 才是设置成功。

1
2
3
chmod g+s FILE
chmod 2xxx FILE
chmod g-s FILE

STICKY:

具有目录写权限的通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权。

删除文件不仅需要目录的写权限,还需要执行权限,因为删除操作需要“进入”目录并修改其内容。

  • 文件:无意义
  • 目录:使只有目录下的文件的所属人,目录所有者root才能删除文件。
1
2
3
chmod o+t DIR
chmod 1xxx DIR
chmod o-t DIR

目录所有者仍然拥有删除任何文件的权限,就算设置了STICKY,即便文件由其他用户创建。

chatrr:设置文件的特殊属性

Change Attributes

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
+attribute      
-attribute      
=attribute

a			# 文件只能追加内容,无法修改或删除已有内容。对于日志文件,这个属性非常有用。可复制,可查看
A			# 禁止访问时间更新。访问文件时不更新访问时间。
			# 适合减少频繁访问时间更新的文件的I/O负载。
				
i			# 文件无法被修改、删除、重命名,甚至无法创建硬链接。可复制,可查看
			# 即使是root用户也不能更改此文件,适合保护关键系统文件。
				
s			# 安全删除属性。当文件被删除时,其数据会被覆盖,防止恢复。
			# 这个属性对数据敏感性高的文件较为适用。
				
u			# 可恢复删除属性。删除文件时,系统保留其数据,方便恢复。

lsattr		# 显示文件的特殊属性

ACL:访问控制列表

ACL生效顺序:

​ 所有者,自定义用户,所属组,自定义组,其他人

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
setfacl FILE|DIR	# 可设置ACL权限
getfacl FILE|DIR	# 可查看设置的ACL权限
-rw-r--r--+ 1 root root 10 Jun 26 20:19 f1		#有+号

setfacl -m u:noob:- f1.log		# noob权限全无
setfacl -m u:noob:rw f1.log		# noob:rw
setfacl -m u:noob:r f1.log		# noob:r

setfacl -m g:noob:- f1.log		# noob组权限全无

setacl f1.log f2.log			# f1的acl给f2

getfacl f1 | setfacl --set-file=-  f2		# 通过管道

setfacl -x u:noob f1	# 移除某用户acl

setfacl -b f1			# 移除所有acl,恢复为标准的Linux权限
setfacl -k f1			# 清除默认ACL

-rw-r--r--. 1 root root 10 Jun 26 20:19 f1		#无+号

setfacl --set u::rw,u:jerry:-,g::-,o::- f2		# 用新规则替换原有

mask

mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

  • 脚本程序,要有读权限,才能执行。

    顺序是

    1. 读脚本文件
    2. bash执行,读取代码
  • 编译过后二进制文件,没有读权限,也能执行。