Linux文件权限

目录

一、Linux文件 安全性

1.1 /etc/passwd文件

1.2 /etc/shadow文件

1.3 添加新用户

1.4 删除用户

1.5 修改用户

1.5.1 usermod

 1.5.2 passwd和chpasswd

1.5.3 chsh、chfn 和 chage

二、Linux组

2.1 /etc/group文件

2.2 创建新组

2.3 修改组

三、文件权限

3.1 文件权限符号

3.2 默认文件权限

四、更改安全设置

4.1 修改权限

4.2 改变所属关系

4.3 共享文件

4.4 访问控制列表


一、Linux文件 安全性

1.1 /etc/passwd文件

Linux系统使用一个专门的文件 /etc/passwd 来匹配登录名与对应的 UID 值。该文件包含了一些与用户有关的信息。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
rootx00root/root/bin/bash
登录用户名用户密码用户账户的UID用户账户的组ID用户账户的文本描述用户$HOME位置用户的默认shell

/etc/passwd是一个标准的文本文件。你可以使用任何文本编辑器直接在其中进行用户管理,但这样做极其危险。选择标准的Linux用户管理工具来执行这些用户管理任务会安全许多。

1.2 /etc/shadow文件

/etc/shadow文件对Linux系统密码管理提供了更多的控制。只有root用户才能访问该文件。

1.3 添加新用户

用来向Linux系统添加新用户的主要工具是 useradd 。查看所使用的Linux发行版的系统默认值,可以使用加入了 -D 选项的 useradd 命令。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

useradd 默认值使用 /etc/default/useradd 文件设置。另外,进一步的安全设置在 /etc/login.defs 文件中定义。你可以调整这些文件,改变Linux系统默认的安全行为。

  • 新用户会被添加到 GID为100的公共组
  • 新用户的家目录
  • 新用户账户密码在过期后不会被禁用
  • 新用户不设置过期日期
  • 默认shell
  • 系统会将 /etc/skel 目录的内容复制到用户的 $HOME 目录
  • 系统会为该用户账户在 mail 目录下创建一个用于接收邮件的文件
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# useradd -m test

-m 选项会使其创建 $HOME 目录

1.4 删除用户

userdel 命令只删除 /etc/passwd 和 /etc/shadow 文件中的用户信息,属于该用户的文件会被保留。如果加入 -r 选项,则会删除用户的 $HOME 目录及邮件目录。

警告 在有大量用户的环境中使用 -r 选项要小心。你永远不知道用户是否在个人的 $HOME 目录中存放了其他用户或程序要用到的重要文件。在删除时一定要检查。

1.5 修改用户

 

用户账户修改工具
命令描述
usermod修改用户账户字段,还可以指定主要组和辅助组的所属关系
passwd修改已有用户的密码
chpasswd从文件中读取登录名及密码并更新密码
chage修改密码的过期日期
chfn修改用户账户的备注信息
chsh修改用户账户的默认登录shell

1.5.1 usermod

usermod 命令是用户账户修改工具中最强大的一个,提供了修改 /etc/passwd文件中大部分字段的相关选项,只需指定相应的选项即可。大部分选项与 useradd 命令选项一样(比如 -c 用于修改备注字段,-e 用户修改过期日期,-g 用户修改默认的登录组)。除此之外:

  • -l:修改用户的登录名  usermod -l newname oldname
  • -L:锁定账户,禁止用户登录  usermod -L username
  • -U:解除锁定
  • -L 选项尤为重要。该选项可以锁定账户,使用户无法登录,无须删除账户和用户数据,要恢复账户,使用-U 即可。
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/passwd | grep datou
datou:x:1001:1001::/home/datou:/bin/bash
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# usermod datou -l da
usermod: user datou is currently used by process 12406
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# usermod datou -l da
usermod: user datou is currently used by process 12434
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# kill -9 12434
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# usermod datou -l da
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/passwd | grep datou
da:x:1001:1001::/home/datou:/bin/bash
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

 1.5.2 passwd和chpasswd

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# passwd datou
Changing password for user datou.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

-e 选项可以强制用户下次登录时修改密码

WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user datou.
Changing password for datou.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.



[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# passwd datou -e
Expiring password for user datou.
passwd: Success
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

 如果需要为系统中大量用户修改密码,使用chpasswd。chpasswd 命令能从标准输入自动读取一系列以冒号分隔的登录名和密码对偶,自动对密码加密,然后为用户设置密码。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chpasswd < user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

1.5.3 chsh、chfn 和 chage

chsh、chfn 和chage用于修改特定的账户信息。chsh命令可以修改默认的用户登录shell。使用时必须用shell的全路径作为参数,不能 只用shell名:

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chsh -s /bin/sh datou
Changing shell for datou.
Shell changed.



-sh-4.2$ whoami
datou
-sh-4.2$ echo $0
-sh
-sh-4.2$

chfn命令提供了在 /etc/passwd 文件的备注字段中保存信息的标准方法。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/passwd | grep datou
datou:x:1001:1001::/home/datou:/bin/sh
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chfn datou
Changing finger information for datou.
Name []: test_datou
Office []: datou1
Office Phone []: datou2
Home Phone []: datou3

Finger information changed.
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/passwd | grep datou
datou:x:1001:1001:test_datou,datou1,datou2,datou3:/home/datou:/bin/sh
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

最后,chage 命令可用于帮助管理用户账户的有效期,YYYY-MM-DD格式日期。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chage -E 2024-05-18 datou
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#


# 设置密码过期日期

二、Linux组

用户账户在控制单个用户安全性方面还不错,但涉及共享资源的一组用户时就捉襟见肘了。为解决这个问题,Linux系统采用了另一个安全概念----

组权限允许多个用户对系统对象(比如文件、目录和设备等)共享一组权限。

有些Linux发行版会创建一个组,将所有的用户作为改组的成员。有些发行版会为每个用户创建一个单独的组,这样会更安全一些。

2.1 /etc/group文件

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/group | grep dat
datou:x:1001:
datoux1001
组名组密码GID属于该组的用户列表

组密码允许非组内成员使用密码临时性的成为该组成员。

由于 /etc/group 文件是一个标准的文本文件,可以手动编辑该文件。但更全的做法是使用 usermod 命令向组内添加新用户。

注意  你会发现列表中的一些组没有任何用户,这并不是说这些组没有成员。当一个用户在 /etc/passwd 文件中指定某个组作为主要组时,该用户不会作为该组成员出现在 /etc/group 文件中。

2.2 创建新组

 

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# groupadd share

在创建新租时,默认不为其分配任何用户。groupadd 命令没有提供向组中添加新用户的选项,但可以使用 usermod 命令来解决。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# usermod -G share datou



[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/group
datou:x:1001:
share:x:1002:datou

警告  为用户分配组时要格外小心。如果使用了 -g 选项。则指定的组会替换掉在 /etc/passwd 文件中为该用户分配的主要组。 -G 选项则会将该组加入用户的数组列表,不会影响主要组。

2.3 修改组

groupmod 命令可以修改已有组的GID(使用-g选项)或组名(-n 选项)

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# groupmod -n share_new share


[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cat /etc/group
share_new:x:1002:datou

由于所有的安全权限均基于 GID ,因此可以随意修改组名,不会影响文件的安全性。

三、文件权限

3.1 文件权限符号

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

3.2 默认文件权限

umask 命令用于设置新建文件和目录的默认权限 。umask 命令可以显示和设置默认权限。

对于文件而言,全权限值是666(所有用户都有读取和写入的权限);对目录而言,全权限值是777(所有用户都有读取、写入和执行的权限)。

所以,文件一开始的权限值是666,减去 umask 值022 之后,剩下的文件权限就是644。

umask 值通常会被设置在 /etc/profile启动文件中。你可以使用umask 命令指定其他 umask 默认值。

四、更改安全设置

4.1 修改权限

chmod 命令可以修改文件和目录的安全设置,如:

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chmod 777 user.txt

或者使用符合模式的权限:

[ugoa...][[+-=][rwxXstugo...]
  • X:仅当对象是目录或者已有执行权限时才赋予执行权限
  • s:在执行时设置SUID 或 SGID
  • t:设置粘滞位
  • u:设置属主权限
  • g:设置属组权限
  • o:设置其他用户权限
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chmod u+x user.txt

4.2 改变所属关系

chown 和 chgrp ,前者可以修改文件的属主,后者可以修改 文件的默认属组。

可以使用登录名或UID 来指定文件的新属主

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll user.txt
-rw-r--r-- 1 root root 22 May 17 17:07 user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chown datou user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll user.txt
-rw-r--r-- 1 datou root 22 May 17 17:07 user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

chown 也可以同时修改文件属主和属组

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chown wahaha.share_new user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll user.txt
-rw-r--r-- 1 wahaha share_new 22 May 17 17:07 user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

如果你的Linux系统使用与用户登录名相同的组名,则可以同时修改二者

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chown datou. user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll user.txt
-rw-r--r-- 1 datou datou 22 May 17 17:07 user.txt
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]#

4.3 共享文件

创建新文件时,Linux会用默认的UID和GID来给文件分配权限,要想让其他用户也能访问文件,要么修改所有用户一级安全权限,要么给文件分配一个包含其他用户的新默认组。

如果想在大范围内创建并共享文件,这会很烦琐。

Linux为每个文件和目录存储了3个额外的信息位。

  • SUID(set user id):当用户执行该文件时,程序会以文件属主的权限运行
  • SGID(set group id):对文件而言,程序会以文件属主的权限运行;对目录而言,该目录中创建的新文件会以目录属组作为默认属组
  • 粘滞位(sticky bit):应用于目录时,只有文件属主可以删除或者重命名该目录的文件。SGID 位对文件共享非常重要。启用 SGID 位后,可以强制在共享目录中创建的新文件都属于该目录的数组,这个组也就成了每个用户的数组。

因此,要常见一个共享目录,使目录中所有新文件都沿用目录的数组,只需设置该目录的 SGID 位。

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# mkdir testdir
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll
drwxr-xr-x 2 root  root  4096 May 17 19:30 testdir

[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chgrp share_new testdir/
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# ll
drwxr-xr-x 2 root  share_new 4096 May 17 19:30 testdir
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# cd testdir/

# 未设置SGID位时创建文件
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# touch testfile
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# ll
total 0
-rw-r--r-- 1 root root 0 May 17 19:35 testfile

# 可以问价数组还是当前用户数组

# 设置SGID位之后再次创建新文件
[root@iZbp1ir1vzqwzkdy7mvjthZ ~]# chmod g+s testdir
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# touch testfile2
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# ll
total 0
-rw-r--r-- 1 root root      0 May 17 19:35 testfile
-rw-r--r-- 1 root share_new 0 May 17 19:38 testfile2
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]#

跟期望的一样,新文件都会沿用目录的默认属组,而不是用户账户的默认属组。

4.4 访问控制列表

Linux的基本权限方法有一个缺点:局限性。你只能将文件或目录的权限分配给单个组或者用户账户。在一个复杂的商业环境中,对于文件和目录,不同组需要不同权限,基于权限方法解决不了这个问题。

Linux开发者设计出了一种更先进的文件和目录安全方法:访问控制列表(access control list,ACL)。ACL允许指定包含多个用户或组的列表以及为其分配的权限。和基本安全方法一样,ACL权限使用相同的读取、写入和执行权限位,但现在可以分配多个用户和组。

可以使用 setfacl 命令和 getfacl 命令在Linux中实现ACL特性。

[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
group::r--
other::r--

setfacl 命令允许使用 -m 选项修改分配给文件或目录的权限,或使用 -x 选项删除特定权限。

[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# setfacl -m g:share_new:rw testfile
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
group::r--
group:share_new:rw-
mask::rw-
other::r--

[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]#

这个例子位testfile文件添加了 share_new 组的读写权限

[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]# ll
total 0
-rw-rw-r--+ 1 root root      0 May 17 19:35 testfile
-rw-r--r--  1 root share_new 0 May 17 19:38 testfile2
[root@iZbp1ir1vzqwzkdy7mvjthZ testdir]#

在权限位的末尾多了一个加号(+),指明该文件还应用了ACL。

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值