07 理解Linux文件权限

7.1 Linux的安全性

/etc/passwd文件

linux使用这个文件来讲用户的登录名匹配到对应的UID值。

系统账户

是系统上运行各种服务进程访问资源的特殊账户。所有在后台的服务都需要用一个系统账户登录到linux系统上。在早起直接用root来启动这些服务,但是如果一个服务被攻陷,则入侵者可能会作为root用户进入系统。用系统账户,则避免了这种情况。大多数linux系统会从500开始分配UID给真实用户。

文件中字段的含义

root:x:0:0:root:/root:/bin/sh

用冒号分隔的7个字段,分别是代表

  • 用户名

  • 密码

  • UID

  • GID

  • 备注信息

  • 家目录

  • 默认shell

我们看到密码是x,这是因为passwd是一个文本文件,可以直接手写来更改用户信息。但是这样做是非常危险的,标准做法使用linux用户管理工具去做用户管理。密码则存放在shadow文件中

/etc/shadow文件

按冒号分隔,每行有9个字段。前两个字段分别代表用户名和加密后的密码

添加新用户useradd

可以加-D选项来查看创建用户时的一些默认值

$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

含义如下:

  • 默认添加到的组的组ID

  • 家目录的父目录

  • 新用户账户密码在过期后不会被禁用

  • 未设置过期时间

  • 默认shell

  • /etc/skel目录下的内容会被复制到新用户的家目录下,相当于一个模板

  • 为该用户在mail目录下创建一个用于接收邮件的文件

-m选项会在创建用户时,也为其创建家目录

删除用户userdel

不加参数直接使用时,userdel只会删除/etc/passwd文件中的用户信息。如果加上-r参数,则还会删除HOME目录及邮件目录。

修改用户

修改用户的工具

命令

描述

usermod

修改用户账户字段

passwd

修改用户密码

chpasswd

从文件中读数据,批量修改用户密码

chage

修改密码的过期日期

chfn

修改备注信息

chsh

修改登录shell

usermod能根据参数修改/etc/passwd中的字段。passwd会修改自己的密码,只有root用户能修改其他用户的密码。若需要批量修改密码可以用chpasswd,将含有userid:passwd对的文件重定向给该命令。

$ chpasswd < users.txt

7.2 使用linux用户组

一些发行版会把所有新创建的用户都放在一个公共组中,这样要小心文件权限的设置。ubuntu则是为每个新建用户单独创建一个与其用户名相同的组,这样更安全一些。

/etc/group文件

类似用户的/etc/passwd文件,这个文件保存组的信息

wheel:x:0:root
daemon:x:1:root
kmem:x:2:root
sys:x:3:root
tty:x:4:root

四个字段分别别表

  • 组名

  • 组密码

  • GID

  • 用户列表

注意当一个用户在/etc/passwd文件中指定某个组为默认组时,该用户不会出现在/etc/group的组列表中

创建新组groupadd

不加参数只会创建一个新组,没有用户。使用-G参数可以在创建新组时把用户添加到组中

$ groupadd -G new_group leo

修改组groupmod

-g选项修改GID,-n则修改组名。所有的安全权限都是基于GID的,所以改组名一般不影响

$ groupmod -n new_name old_name

7.3 理解文件权限

第一个字段代表的含义

  • -:文件

  • d:目录

  • l:链接

  • c:字符型设备

  • b:块设备

  • n:网络设备

默认的权限从umask来,umask默认是0022。第一位是sticky bit,后三位则是八进制掩码。文件的全权限制是666,目录则是777,所以创建新文件的默认权限是644,目录则是755。

7.4 改变安全性设置

改变权限chmod

可以直接用3位八进制权限码,也可以用选项

$ chmod o+r newfilw
  • u:用户

  • g:组

  • o:其他

  • a:上面所有

  • +:在现有权限上增加

  • -:在现有权限上减少

  • =:直接设置

改变所属关系

chown用来改变文件或目录的属主,如果后面加了组名,则也会同时改变属组。

chown options owner[.group] file

chgrp则可以改变文件或目录的属组

$ chgrp group_shared file

注意只有root能改变文件的属主。普通用户如果要改变文件的属组,必须同时是改变前后两个组的成员。

7.5 共享文件

linux中用户之间共享文件是通过组来实现的。