Linux(五):文件权限
缺乏安全性的系统不是完整的系统,系统中必须有一套能够保护文件免遭非授权用户浏览和修改的机制。Linux沿用了Unix文件权限的方法,即允许用户和组根据每个文件和目录的安全性设置来访问文件。
一、用户和组
Linux安全系统的核心是用户账户,每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录系统时用的账户。
用户权限是通过创建用户时分配的用户ID(UserID,即UID)来跟踪的。UID是数值,每个用户都有唯一的UID,但在登录系统时使用的不是UID,而是登录名。登录名是用户用来登录系统的最长八个字符字符串(可以使数字或字母),同时会关联一个密码。
1.1 /etc/passwd
/etc/passwd文件保存了用户登录名和UID的匹配信息,以及一些与用户相关的信息。形式如下:
root:x:0:0:root:/root:/bin/bash sawyer:x:1000:1000:sawyer:/home/sawyer:/bin/bash
/etc/passwd中从左往右依次表示:
-
- 登录用户名
- 用户密码
- 用户账户的UID(数字形式)
- 用户账户的GID(数字形式)
- 用户账户的文本描述(称为备注字段)
- 用户HOME目录的位置
- 用户默认shell
值得注意的是:
-
- 在Linux中几乎所有的服务都是使用自己的账户登录的,目的是为了防止有非授权用户攻陷了这些服务中的一个,从而获得其他服务的权限。
- Linux为系统账户预留了500以下的UID指,有些服务甚至要用特定的UID才能正常工作。
1.2 /etc/shadow
/etc/shadow用于对用户密码进行管理,并且只有root用户才能够访问该文件,在该文件中为每个用户账户都保存了一条记录,形式如下:
root:$6$D.7koy72xXKHuUWz$6ihS3acnpUO8Hu4aKWzS64sgL13bQIyOmnjkEf3QGjFXKUQSXxJd4eWU5CE5CFd.Gk5BTMavpA0c5vTMSpz7W0::0:99999:7:::
/etc/shadow中每条记录都有9个字段,分别为:
-
- 与/etc/passwd文件中的登录名字段对应的登录名
- 加密后的密码
- 自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
- 多少天后才能更改密码
- 多少天后必须更改密码
- 密码过期前提前多少天提醒用户更改密码
- 密码过期后多少天禁用用户账户
- 用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
- 预留字段给将来使用
1.3 用户管理
1.3.1 添加用户
在Linux中可以使用useradd添加用户,具体参数如下:
示例:
[root@localhost ~]# useradd -c "flyand company administrator" -m -d /home/admin -g develop -u 1001 flyand --创建用户,指定组名为develop、UID为1001、账户名sawyer
[root@localhost ~]# passwd sawyer --为sawyer设置密码
[root@localhost ~]# gpasswd -a sawyer develop --显示地将sawyer加入develop组中
在使用useradd创建用户时,如果没有指定相关参数值,那么Linux就会使用指定的默认值。默认值可以通过,useradd -D进行查看
[root@ig0cSa9h07M ~]# /usr/sbin/useradd -D
GROUP=100 --新用户会被添加到GID为100的公共组
HOME=/home --新用户的HOME目录将会位于/home/loginname
INACTIVE=-1 --新用户账户密码在过期后不会被禁用
EXPIRE= --新用户账户未被设置过期日期
SHELL=/bin/bash --新用户账户将bash shell作为默认shell
SKEL=/etc/skel --系统会将/etc/skel目录下的内容复制到用户的HOME目录下
CREATE_MAIL_SPOOL=yes --系统为该用户账户在mail目录下创建一个用与接收邮件的文件
当需要修改默认值时,可以在-D后面 附加响应的参数,如下:
1.3.2 修改用户
Linux中修改用户信息有好几种工具包括:usermod、passwd、chpasswd、chage、chfn、chsh
=> usermod: | 能够修改/etc/passwd文件中的大部分字段,参数与useradd基本一致。usermod中有一组参数-L和-U分别用于锁定账户和解锁账户。 |
=> passwd: | 修改用户密码 |
=> chpasswd: | 批量修改。该命令可以从标准输入中自动读取登录名和密码对(冒号分隔,username:passwd)列表 |
=> chsh: | 修改用户的登录shell |
=> chfn: | 向用户的备注字段写入信息 |
=> chage: | 管理用户账户的有效期 |
1.3.3 删除用户
[root@localhost ~]# userdel -r sawyer
1.4 /etc/group
/etc/group文件中保存了Linux中用到的每个组的信息,与UID类似,系统账户用的组通常会分配低于500的GID,而用户组的GID则会从500开始分配。文件中包含了组名、组密码、GID和属于该组的用户列表,形式如下:
develop:x:1000:sawyer,root
组密码允许非组内成员通过它临时成为该组成员。
此外,值得注意的是,用户列表中没有列出成员时,不代表这些组就没有成员。当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中
示例:
[root@localhost ~]# groupadd -g 2000 develop2 -- 创建GID为2000,name为develop2的组
[root@localhost ~]# groupmod -g 1000 -n develop develop2 -- 将develop2的GID改为1000,name改为develop
[root@localhost ~]# gpasswd -a sawyer develop -- 将用户sawyer加入develop中
[root@localhost ~]# gpasswd -d sawyer develop -- 将用户sawyer从develop中移除
[root@localhost ~]# groupdel develop -- 删除组develop
二、文件权限
1.1 理解权限
使用 ls -l 命令查看文件可得:
-rwxr--r--. 1 root root 0 4月 8 15:21 test.sh
(1) 第一个字符代表对象类型:
- 代表文件
d 代表目录
l 代表链接
c 代表字符型设备
b 代表块设备
n 代表网络设备
(2) rwxr--r-- 代表文件权限,每三个字符代表一组权限,分别对应 对象的所有者、对象所在的组、其他用户
- 代表无权限,对应的八进制数值为 0
r 代表对象是可读的,对应的八进制数值为 4
w 代表对象是可写的,对应的八进制数值为 2
x 代表对象是可执行的,对应的八进制数值为 1
1.2 修改权限
可以使用 chmod options mode file 方式修改文件权限,示例:
[root@localhost example]# chmod u=rwx,g=r,o=r test.sh [root@localhost example]# chmod 744 test.sh
上述两种方式的效果是一样的。
mode:模式参数,可以使用八进制模式或符号模式,八进制模式如744,符号模式为[ugoa] [+-=] [rwxXstugo]
第一个方括号中的字符定义了权限作用的对象:
u 代表用户 ,g 代表组,o 代表其他用户,a 代表 上述所有
第二个方括号中的符号表示增加权限(+)、移除权限(-),赋值权限(=)
第三个方括号中的符号代表作用到设置上的权限,除了rwx外,还包括以下几项:
X:如果对象是目录或者它已有执行权限,那么赋予执行权限
s:运行时重新设置UID或GID
t:保留文件或目录
u:将权限设置为跟拥有者一样
g:将权限设置为跟属组一样
o:将权限设置为跟其他用户一样
options:附加参数,比如可以使用-R 选项 让权限的改变递归到文件和子目录中,也可以使用通配符指定多个文件。
1.3 改变属主
可以使用chown命令改变文件的属主,使用方式为:chown options owner[.group] file,示例
[root@localhost example]# chown sawyer test.sh --将test.sh的拥有者改为sawyer [root@localhost example]# chown .develop test.sh --将test.sh的所在组改为develop [root@localhost example]# chown root.root test.sh --将test.sh的拥有者改为root,所在组改为root组