第7章:理解Linux文件权限
Linux沿用了Unix文件权限的办法,允许用户和组根据每个文件和目录的安全性设置访问文件
7.1Linux的安全性
Linux系统会为各种各样的功能创建不同系统账户,用户账户被分配唯一的用户ID(UserID=UID)
Linux系统中root账户的UID通常是0
Linux为系统预留了500以下的UID值,普通用户创建账户时,大多数Linux会将500起始的第一个可用UID分配给这个账户(未必适用所有Linux发行版)
7.1.1/etc/passwd文件
1)登录用户名
2)用户密码(密码都被设置为x形式)【一般保存在/etc/shadow文件中】
3)用户账户的UID(数字形式)
4)用户账户的GID(数字形式)
5)用户账户的文本描述(称为备注字段)
6)用户HOME目录的位置
7)用户的默认shell
7.1.2/etc/shadow文件
/etc/shadow每条记录有9个字段,包括
1)与/etc/passwd文件中登录名对应的登录名
2)加密后的密码
3)自1970年1月1日(上次修改密码的日期)到当天的天数
4)多少天后才能更改密码
5)多少天后必须更改密码
6)密码过期前提前多少天提醒用户更改密码
7)密码过期后多少天禁用用户账户
8)用户账户被禁用的日期,用自1970年1月1日到当天的天数表示
9)预留字段,给将来使用
7.1.3添加新用户
语法:
useradd
常使用命令:
useradd username -m -s /bin/bash -d /home/username -g groupname
参数 描述
-c cmoment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录)
-D 创建新用户时的默认值(系统默认值被设置在/etc/default/useradd文件中【useradd -D或/usr/sbin/useradd -D查看】)
新用户会默认添加到GID为100的公共组
其中的SKEL说明:
userad允许用户创建一个默认的HOME目录配置,以SKEL指定的目录下文件作为模板,自动在每个新用户HOME中放置
-e expire_date 用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即禁用,-1表示禁止这个功能
-g initial_group 指定用户登录组的GID或组名
-G group 指定用户除登录之外所属的一个或多个附加组
-k 必须和-m一起使用,将/etc/skel目录内容复制到用户的HOME目录
-m 创建用户的HOME目录(默认创建新用户时不创建HOME目录)
-M 不创建用户的HOME目录(当默认设置里指定创建时,才用到)
-n 创建一个同用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认的登录shell
-u uid 为账户指定一个唯一的UID
修改系统默认值:
useradd -D加如下参数可以修改默认的系统新用户值
参数 描述
-b default_home 更改默认的创建用户HOME目录的位置
-e expiration_date 更改默认的新账户过期的日期
-f inactive 更改默认的新用户从密码过期到账户被禁用的天数
-g group 更改默认的组名称或GID
-s shell 更改默认的登录shell
7.1.4 删除用户
语法:
userdel:默认只会删除/etc/passwd文件中的用户信息,而不会删除用户的任何文件
-r:删除用户的HOME目录及mail目录
7.1.5 修改用户
用户账户修改工具:
usermod
-c:修改备注字段
-e:修改过期日期
-g:修改默认的登录组
-l:修改用户账户的登录名
-L:锁定账户,用户无法登录
-p:用来修改账户密码
-U:解除锁定
usermod参数众多,非常强大,下面给出一些最常用的实例:
usermod -g group user1 #将user1添加到组group中
usermod -l user2 user1 #修改user1的用户名为user2
usermod -L user1 #锁定账号
usermod -U user1 #解除锁定
usermod -s /sbin/nologin user1 #设置账户不能进行登录使用
usermod -s /bin/bash user1 #账户恢复登录使用
值得注意的是usermod -p用来修改密码,千万谨慎,使用usermod -p 后面的接的并不是明文,而是密文,
比如:usermod -p 123 user1,你以为是将user1密码改为123,但登录输入123你会悲催的发现无法登录。
- passwd、chpasswd
passwd用来修改密码,-e用来强制用户下次登录的时候再次修改密码
chpasswd可以批量导入用户密码,从标准输入读取数据
- chsh、chfn、chage
chsh用来修改默认的用户登录shell,使用时必须是全路径,不能使用shell名
chfn用来修改/etc/passwd备注字段,会将Unix的finger命令用到的信息存入备注字段
chfn不加参数时,会询问你要存进备注字段的值(出于安全性考虑,很多Linux管理员禁用finger)
chage用来帮助管理用户账户的有效期
参数 描述
-d 设置上次修改密码到现在的天数
-E 设置密码过期的日期(可用来创建临时账户,但是过期之后账户信息还在,类似锁定)
-I 设置密码过期到锁定账户的天数
-m 设置修改密码之间最少要多少天
-W 设置密码过期前多久开始出现提醒信息
chage命令设置日期的格式
1.YYYY-MM-DD
2.从1970年1月1日起到该日期天数的数值
7.2使用Linux组
有些Linux发行版会创建一个组,把所有用户都当成这个组的成员(这种情况要小心)
有些发行版会为每个用户创建一个单独的组,这样更安全(例如Ubuntu)
每个组都有一个唯一的GID和组名
7.2.1/etc/group格式
组名、组密码、GID、属于改组的用户列表
千万不能直接修改/etc/group来添加用户到一个组,应使用usermod
列表中有些组并没有列出用户,这并不意味着这些组没有成员。
当一个用户在/etc/passwd中指定某个组作为默认组时,用户账户不会作为该组成员出现在/etc/group中
7.2.2创建新组
groupadd
group shared
默认没有属于该组成员,groupadd命令没有提供将用户添加到组的选项
usermod
usermod -G shared rich
添加rich用户到shared组中
-G:只是添加组到用户中,不影响默认组
-g:添加组到用户中,并且替换默认组
(如果更改了以登录的用户所属的组,用户重新登录后才会生效)
7.2.3修改组
groupmod:可以修改已有组的GID或组名
-n:修改组名(可以随意更改,而不会影响安全性)
-g:修改已有组的GID
7.3理解文件权限
文件类型:-文件/d目录/l链接/c字符型设备/b代表块设备/n代表网络设备
访问权限:r可读/w可写/x可执行
组权限顺序:属主/属组/用户
7.3.1默认文件权限
umask:用于设置创建文件和目录的默认权限
umask值只是一个掩码,需要将umask值从对象全权限值中减掉,对文件来说该值是:666,目录是:777
sticky bit(黏着位):八进制模式
7.4改变安全性设置
7.4.1改变权限
chmod
符号模式权限[ugoa][±=][rwxXstugo…]
第一个选项定义了权限作用的对象
u:代表用户
g:代表组
o:代表其他
a:代码上述所有
最后的选项代表作用到设置上的权限
X:如果对象是目录或者它已有执行权限,赋予执行权限
s:运行时重新设置UID或者GID
t:保留文件或目录
u:将权限设置为跟属主一样
g:将权限设置为跟属组一样
o:将权限设置为跟其他用户一样
7.4.2改变所属关系
chown
用来改变文件的默认属组
可用登录名或UID来指定属组
语法:chown options owner[.group] file
可同时改变文件的属主和属组
7.5共享文件
Linux为每个文件和目录存储了3个额外的信息位
设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行
设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组
粘着位:进程结束后文件还会在内存中
SGID可通过chmod设置,加到标准3位八进制值之前,或者在符号模式下用符号s
八进制值 描述
000 -0所有位都清零
001 -1粘着位置位
010 -2SGID位置位
011 -3 SGID位和粘着位都置位
100 -4 SUID位置位
101 -5 SUID位和粘着位都置位
110 -6 SUID位和SGID位都置位
111 -7 所有位都置位
共享目录步骤:
mkdir创建目录>chgrp改变目录的默认属组>设置SGID
注意:所有组成员都需要把他们的umask值设置成文件对属组成员可写