禅道博客

分享专业技术知识,文章内容干货满满

读书笔记《Linux命令行与shell脚本编程大全》 之 理解Linux文件权限

2023-12-21 15:16:44
刘洪
原创 1031
摘要:本文是读者关于“Linux命令行与shell脚本编程大全”书籍第七章的阅读心得。

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值设置成文件对属组成员可写。

暂时没有记录
评论通过审核后显示。