理解Linux文件权限——第七章

7.1 Linux 的安全性

Linux 安全系统的核心是用户账号。每个能进入Linux系统的用户都会被分配唯一的用户账号,用户对系统中各种对象的访问权限取决于他们登录系统时使用的账号。

用户权限是通过创建用户时分配的用户ID 来跟踪的。UID是数值,每个用户都有唯一的UID

7.1.1 /etc/passwd文件

Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文件就是/etc/passwd文件,它包含了一些与用户有关的信息。下面是/etc/passwd文件的例子。

[root@16-11-120 work]# 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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
work:x:600:1000::/home/work:/bin/bash

root用户账户是Linux系统的管理员。固定分配给它的UID是0.Linux回味各种各样的功能创建不同的用户账户,这些账户并不是真的用户,这些账户叫作系统账户。 是系统上运行的各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。

Linux为系统账户预留了500以下的UID值。有些服务甚至要用特定的UID才能工作。普通用户创建账户时,大多Linux系统会从500开始,将第一个可用UID分配给这个账户(并非所有的Linux发行版都是这样的)。

/etc/passwd文件字段包含了如下信息:

  • 登录用户名
  • 用户密码
  • 用户账号ID
  • 用户账号组ID
  • 用户账号文本描述
  • 用户HOME目录位置
  • 用户的默认shell

/etc/passwd中密码字段都被设置成了x,现在大多数Linux系统都将用户密码保存在另一个单独的文件中/etc/shadow,只有特定程序(登录程序)才能访问这个文件。

7.1.2 /etc/shadow文件
[root@16-11-120 work]# cat /etc/shadow
root:$6$QgSJzr.D$zlolKAV65QvrnPip5LU8RMx/tYUrmlyBLGoaVWmePLCqrss7PVr0:17417:0:99999:7:::

在/etc/shadow文件的每条记录中都有9个字段:

  • 与/etc/passwd文件中登录名字段有对应的登录名
  • 加密后的密码
  • 自上次修改密码后过去的天数
  • 多少天后才能更改密码
  • 多少天后必须更改密码
  • 密码过期提前多少天提醒用户更改密码
  • 密码过期后多少天禁止用用户账户
  • 用户账户被禁用的日期
  • 预留字段给将来使用
7.1.3 添加新用户

用户向Linux系统添加新用户的主要工具是useradd , 可以一次性创建新用户账户及设置用户HOME目录结果。useradd 命令使用系统默认值及命令行参数来设置用户账户。系统默认值倍设置在/etc/default/useradd文件中。可以使用useradd -D 命令查看所用Linux系统中的这些值。

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

在创建新用户是,如果不在命令行总指定具体的值,useradd命令就会使用-D 选项锁显示的那些默认值,这个例子列出的默认值如下:

  • 新用户会被添加到GID为100的公共组;
  • 新用户的HOME目录将会位于/home/loginname;
  • 新用户账户密码在过期后不会被禁用;
  • 新用户账户未被设置过期日期;
  • 新用户账户将bash shell作为默认shell;
  • 系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
  • 系统为该用户账户在email目录下创建一个用于接收邮件的文件。

/etc/skel 文件夹中的内容如下: 

[root@16-11-120 work]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@16-11-120 work]# ls -al /etc/skel
total 28
drwxr-xr-x.  2 root root  4096 Aug 18 11:57 .
drwxr-xr-x. 87 root root 12288 Nov 15 11:59 ..
-rw-r--r--   1 root root    18 Dec  7  2016 .bash_logout
-rw-r--r--   1 root root   193 Dec  7  2016 .bash_profile
-rw-r--r--   1 root root   231 Dec  7  2016 .bashrc

如果箱子啊创建用户时改变默认值或默认行为,可以使用命令行参数。

-c comment 给新用户添加备注 
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话) 
-e expire_date 用YYYYY-MM-DD格式指定一个账户过期的日期 
-f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁 
用,-1表示禁用这个功能 
-g initial_group 指定用户登录组的GID或组名 
-G group ... 指定用户除登录组之外所属的一个或多个附加组 
-k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录 
-m 创建用户的HOME目录 
-M 不创建用户的HOME目录(当默认设置里指定创建时,才用到) 
-n 创建一个同用户登录名同名的新组 
-r 创建系统账户 
-p passwd 为用户账户指定默认密码 
-s shell 指定默认登录shell 
-u uid 为账户指定一个唯一的UID 

 

如果需要修改系统默认的新用户设置可以在 -D 选项后跟上一个指定值来修改

-b default_home 更改默认的创建用户HOME目录的位置 
-e expiration_date 更改默认的新账户的过期日期 
-f inactive_days 更改默认的新用户从密码过期到账户被禁用的天数 
-g group 更改默认的组名称或GID 
-s shell 更改默认的登录shell

useradd -D -s /bin/tsch

现在useradd 命令会将tash shell 最为所有新建用户的默认登录shell.

7.1.4 删除用户

userdel 可以从系统中删除用户。userdel命令只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。

如果加上-r 参数,userdel 会删除用户的HOME 目录及邮件目录。然而,系统上让可能存在已删除用户的其他文件,这在有些环境中会造成问题。

7.1.5 修改用户
  • usermod 修改用户账户字段,还可以指定主要组及副附加组的所属关系
  • passwd   修改已有用户的密码
  • chpasswd 从文件中读取登录名密码对,并更新密码
  • chage  修改密码的过期日期
  • chfn  修改用户账户的备注信息
  • chsh  修改用户账户的默认登录shell

7.2  使用Linux组

7.2.1 /etc/group文件
7.2.2 groupadd 命令
7.2.3 修改组

7.3 理解文件权限

 

输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:

  1. - 代表文件
  2. d 代表目录
  3. l 代表链接
  4. c 代表字符型设备
  5. b 代表块设备
  6. n 代表网络设备

之后有3组 三字符的编码,每一组定义了3中访问权限:

  1. r 代表对象是可读的
  2. w 代表对象是可写的
  3. x 是代表可执行的

若没有某种权限,在该权限位会出现单破折线。这3组权限对应对象的三个安全级别:

  1. 对象的宿主
  2. 对象的属组
  3. 系统的其他用户
7.3.2 默认文件权限

你可能会问这些文件权限从何而来,答案是umask 。umask命令是用来设置文件或目录的默认权限。

[root@localhost ~]# touch newfile
[root@localhost ~]# ls -al newfile 
-rw-r--r--. 1 root root 0 Sep 25 02:17 newfile

touch命令用分配给我的用户账户的默认权限创建了这个文件。umask 命令可以显示这个默认权限。

[root@localhost ~]# umask
0022

umask命令设置没那么简单明了,第一位代表了一项特别的安全特性,叫做粘着位(sticky bit)。这部分内容在7.5章详述。

后面三维代表文件或目录对应的umask 八进制值。

八进制模式的安全性设置先获取这3 个rwx 权限的值,然后将其转换成3为二进制值,用一个八进制值来表示。在这个二进表示中,每个位置代表一个二进制位。

八进制模式先取得权限的八进制值,然后再把这三组安全级别(属主,属组,其他用户)的八进制值顺序列出。因此,八进制模式的值664 代表属主和属组成员都有读取和写入权限,而其他用户都只有读取权限。

umask 值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。

要把umask 值从对象的全权限值中减掉。对文件来说,全权限的值是666(所有用户都有读和写权限); 而对于目录来说,则是777,(所有用户都有读写可执行权限)。

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

大多数Linux发行版中,umask 值 通常会设置在/etc/profile 启动文件中,Ubuntu设置在/etc/login.defs文件中。 可以用umask命令为默认umask 设置指定一个新值。

7.4 改变安全性设置

7.4.1 改变权限设置 chmod
7.4.2 改变所属关系 chown chgrp

7.5 共享文件

 

 

 

转载于:https://my.oschina.net/LucasZhu/blog/1579952

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值