读书笔记《Linux命令行与shell脚本编程大全》 之 理解Linux文件权限
原创- 2023-12-21 15:16:44
- 1334
本篇目录
Linux沿用了Unix文件权限的办法,允许用户和组根据每个文件和目录的安全性设置访问文件
7.1. Linux的安全性
- Linux系统会为各种各样的功能创建不同系统账户,用户账户被分配唯一的用户ID(UserID=UID);
- Linux系统中root账户的UID通常是0;
- Linux为系统预留了500以下的UID值,普通用户创建账户时,大多数Linux会将500起始的第一个可用UID分配给这个账户(未必适用所有Linux发行版)。
1. /etc/passwd文件
1)登录用户名;
2)用户密码(密码都被设置为x形式)【一般保存在/etc/shadow文件中】;
3)用户账户的UID(数字形式);
4)用户账户的GID(数字形式);
5)用户账户的文本描述(称为备注字段);
6)用户HOME目录的位置;
7)用户的默认shell。
2. /etc/shadow文件
/etc/shadow每条记录有9个字段,包括
1)与/etc/passwd文件中登录名对应的登录名;
2)加密后的密码;
3)自1970年1月1日(上次修改密码的日期)到当天的天数;
4)多少天后才能更改密码;
5)多少天后必须更改密码;
6)密码过期前提前多少天提醒用户更改密码;
7)密码过期后多少天禁用用户账户;
8)用户账户被禁用的日期,用自1970年1月1日到当天的天数表示;
9)预留字段,给将来使用。
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。
4. 删除用户
语法:userdel
默认只会删除/etc/passwd文件中的用户信息,而不会删除用户的任何文件。
-r:删除用户的HOME目录及mail目录。
5. 修改用户
用户账户修改工具
1)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你会悲催的发现无法登录。
2)passwd、chpasswd
passwd用来修改密码,-e用来强制用户下次登录的时候再次修改密码;chpasswd可以批量导入用户密码,从标准输入读取数据。
3)chsh、chfn、chage
chsh用来修改默认的用户登录shell,使用时必须是全路径,不能使用shell名;chfn用来修改/etc/passwd备注字段,会将Unix的finger命令用到的信息存入备注字段;chfn不加参数时,会询问你要存进备注字段的值(出于安全性考虑,很多Linux管理员禁用finger);chage用来帮助管理用户账户的有效期。
参数描述:
-
-d 设置上次修改密码到现在的天数;
-
-E 设置密码过期的日期(可用来创建临时账户,但是过期之后账户信息还在,类似锁定);
-
-I 设置密码过期到锁定账户的天数;
-
-m 设置修改密码之间最少要多少天;
-
-W 设置密码过期前多久开始出现提醒信息。
3)chage命令设置日期的格式
1.YYYY-MM-DD;
2.从1970年1月1日起到该日期天数的数值。
7.2. 使用Linux组
有些Linux发行版会创建一个组,把所有用户都当成这个组的成员(这种情况要小心),有些发行版会为每个用户创建一个单独的组,这样更安全(例如Ubuntu),每个组都有一个唯一的GID和组名。
1. /etc/group格式
组名、组密码、GID、属于改组的用户列表,千万不能直接修改/etc/group来添加用户到一个组,应使用usermod。列表中有些组并没有列出用户,这并不意味着这些组没有成员。
当一个用户在/etc/passwd中指定某个组作为默认组时,用户账户不会作为该组成员出现在/etc/group中
2. 创建新组
- groupadd
- group shared
默认没有属于该组成员,groupadd命令没有提供将用户添加到组的选项。
- usermod
- usermod -G shared rich
添加rich用户到shared组中。
-G:只是添加组到用户中,不影响默认组;
-g:添加组到用户中,并且替换默认组;(如果更改了以登录的用户所属的组,用户重新登录后才会生效。)
3. 修改组
groupmod:可以修改已有组的GID或组名。
-n:修改组名;(可以随意更改,而不会影响安全性。)
-g:修改已有组的GID。
7.3. 理解文件权限
文件类型:-文件/d目录/l链接/c字符型设备/b代表块设备/n代表网络设备;
访问权限:r可读/w可写/x可执行;
组权限顺序:属主/属组/用户。
1. 默认文件权限
umask:用于设置创建文件和目录的默认权限。
sticky bit(黏着位):八进制模式
umask值只是一个掩码,需要将umask值从对象全权限值中减掉,对文件来说该值是:666,目录是:777。
7.4. 改变安全性设置
1. 改变权限
chmod
符号模式权限[ugoa][+-=][rwxXstugo...],第一个选项定义了权限作用的对象
-
u:代表用户;
-
g:代表组;
-
o:代表其他;
-
a:代码上述所有。
最后的选项代表作用到设置上的权限
-
X:如果对象是目录或者它已有执行权限,赋予执行权限;
-
s:运行时重新设置UID或者GID;
-
t:保留文件或目录;
-
u:将权限设置为跟属主一样;
-
g:将权限设置为跟属组一样;
-
o:将权限设置为跟其他用户一样。
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值设置成文件对属组成员可写。