引言

作为一个多用户、多服务的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份、文件权限两方面对资源的访问进行限制。本文将分别介绍Linux系统中用户和组账号的管理、文件权限和归属的管理、文件和目录的权限管理、文件和目录的归属管理。

一、用户账号

1、用户账号概述

(1)Linux基于用户身份对资源访问进行控制

  • 用户账号
    - 超级用户(root管理员,权限最高,ID为0)
    - 普通用户(以CentOS7为例,UID在1-999(保留),创建账号从1000开始)
    - 程序用户(伪用户,不能登录操作系统,只能正常运行服务,比如ftp和apache)

  • 组账号
    - 基本组(私有组)
    - 附加组(公有组)

  • UID和GID
    - UID(User IDentity,用户标识号)
    - GID(Group IDentify,组标识号)

(2)用户的分类

  • 超级用户:root用户是Linux操作系统中默认的超级用户账号,对本主机拥有至高无上的权限,类似于Windows操作系统中的Administrator用户。只有当进行系统管理、维护任务时,才建议使用root用户登录系统,日常事务处理建议只使用普通用户账号。 root 拥有对系统的最高的管理权限ID=0。

  • 普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限
    系统用户UID:1-999(centos7版本)1-499(centos6版本)
    UID:即每个用户的身份标示,类似于每个人的身份证号码。

  • 程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不介许登录到系统,而仅用于维持系统或某个程序的正常运行,如 bin、daemon、ftp、mail等
    伪用户一般不会用来登录系统的,它主要是用于维持某个服务的正常运行如:ftp,apache

  • UID:即每个用户的身份标示,类似于每个人的身份证号码。

  • 管理员组:root,0

  • 普通组:GID

    • 系统组:1-499(Cent0S6)1-999(CENTOS7)
    • 普通组:500+(CentoS6),1000+(CENTOS7)
      表示该账户需要密码才能登录,为空时,账户无须密码即可登录
  • 组账号:

    • 基本组:基于某种特定联系(如都需要访问FTP服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);
    • 附加组:若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。

简说:
用户和组的关系
用户是员工,组是职位,员工可以兼职多个岗位
总有一个最重要的身份,主要组和附加组
主要组:必须要一个,组有且唯一。
附加组:可有可无,可以有多个
默认行为当你创建一个新用户时会自动创建一个和之同名的主组

2、用户账号文件/etc/passwd

保存用户名称、宿主目录、登录Shell等基本信息

  • 文件位置:/etc/passwd
  • 每一行对应一个用户的账号记录
    在这里插入图片描述
    在这里插入图片描述

3、用户账号文件/etc/shadow

保持用户的密码、账号有效期等信息

  • 文件位置:/etc/shadow
  • 每一行对应一个用户的密码记录
    在这里插入图片描述
    在这里插入图片描述

4、chage命令

chage命令:用来修改帐号和密码的有效期限,针对目前系统已经存在的用户

chage [选项] 用户名

  • -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
  • -M:密码保持有效的最大天数。chage -M 60 root
  • -W:用户密码到期前,提前收到警告信息的天数。
  • -E:帐号到期的日期。过了这天,此帐号将不可用。
  • -d:上一次更改的日期。
  • -I(大写i):停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
  • -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

例:chage -E 2019-04-29 test
//其中,test为用户,用户将在2019年4月29日失效(不可登录)

chage -d 2019-06-30 test //设置test用户最后一次修改密码的日期为2019年6月30日
chage -d 0 test //则代表该test用户需立即修改密码

date -d “+45days” -u//如果不知道时间可以用date查看

  • -u:UTC时间

5、添加用户账号-useradd命令

useradd 选项 用户名

  • -d:指定用户的宿主目录位置(当与-M一起使用时,不生效)。
  • -e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
  • -g:指定用户的基本组名(或使用GID号)。
  • -G:指定用户的附加组名(或使用GID号)。
  • -s:指定用户的登录Shell。
  • -u:指定用户的UID号,要求该UID号码未被其他用户使用。
  • -M:不建立宿主目录,即使/etc/loqin.defs系统配置中已设定要建立宿主目录。

举例
1、创建新用户,设置密码
在这里插入图片描述
2、给用户指定宿主目录,设置基本组为wheel,附加组为root
在这里插入图片描述

在这里插入图片描述
3、给王五设置账号过期时间,并且不能登录账户(nologin)
在这里插入图片描述
4、赵六不建立宿主目录,在home里面找不到(useradd -M)
在这里插入图片描述
5、指定UID给用户李辰(useradd -u)
在这里插入图片描述

6、设置/更改用户命令-passwd

  • -d:清空指定用户的密码,仅使用用户名即可登录系统。
  • -l:锁定用户账户。
  • -S:查看用户账户的状态(是否被锁定)。
  • -u:解锁用户账户。

passwd命令扩充
#调用管道符,给zhangsan用户设置密码"123",为了方便系统管理,passwd命令提供了
–stdin选项,用于批量给用户设置初始密码。例如: echo “123456” | passwd --stdin zhuxuan

举例:
1、批量给用户设置密码(echo “123456” | passwd --stdin zhuxuan)
在这里插入图片描述
2、清除密码(passwd -d)
在这里插入图片描述
3、查看用户状态(passwd -S)
在这里插入图片描述
4、锁定用户(passwd -l)
在这里插入图片描述
5、解锁用户(passwd -u)
在这里插入图片描述

7、修改用户账号的属性-usermod

常用命令参数

  • -l:更改用户账号的登录名称(login Name)
  • -L:锁定用户账户
  • -U:解锁用户账户

以下选项与useradd命令中含义相同

  • -u:修改用户的ID号
  • -d:修改用户的宿主目录位置
  • -e:修改用户的账户失效时间,可使用 YYYY-MM-DD的日期格式
  • -g:修改用户的基本组名(或使用GID号)
  • -G:修改用户的附加组名(或使用GID号)
  • -s:指定用户的登录Shell

8、删除用户账号-userdel

userdel [-r] 用户名

  • 添加-r选项时,表示脸用户的宿主目录一并删除
  • 如果不加-r,删除之后在创建用户时会报错
    在这里插入图片描述
    举例:
    Userdel 直接删除用户不加参数,然后再重新创建出相同的用户
    在这里插入图片描述

9、用户账号的初始配置文件

  • 文件来源
    - 新建用户账号时,从**/etc/skel**目录中复制而来
  • 主要的用户初始配置文件
    - ~/.bash_profile
    - ~/.bashrc
    - ~/.bash_logout
    在这里插入图片描述
    注:ls -a才能查看,里面有隐藏文件

(1) .bash_profile

示例代码中为用户添加了2个环境变量(JAVAHOME和CLASSPATH),并修改了已有环境变量PATH的值.(PATH的查找是从前开始查找,找到就返回)
CLASSPATH环境变量的值是在JAVA运行时查找加载类的默认classpath.

(2).bashrc

例子中定义了路径,语言,命令别名(使用rm删除命令时总是加上-i参数需要用户确认,使用ls命令列出文件列表时加上颜色显示)。
每次修改.bashrc后,使用source/.bashrc(或者。/.bashrc)就可以立刻加载修改后的设置,使之生效。
一般会在bashprofile文件中显式调用bashrc。登陆linux启动bash时首先会去读取~/.bash profi le文件,这样~/bashrc也就得到执行了,你的个性化设置也就生效了。
关于环境变量的读取顺序:
用户登录->>加载~/bash profile --> bash profile中配置了首先是使~/.bashrc生效

(3).bash_logout

用途:用户登出时执行的命令

#~ /.bash_logout
#在当前用户登出时,打印出Logout 和当前时间
echo “Logout, ‘date’”

例子:
如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,
.bash_history文件都会被删除.
在这里插入图片描述
在这里插入图片描述

  • history -c 清除历史记录
  • history -r /root/history.txt,把命令读进来作为当前bash的历史记录
  • history -w /root/history.txt,把当前bash的历史记录写入history.txt

echo “history -c” >> ~/.bash_logout
echo “history -c” >> ~/.bash_profile

二、组账号

1、组账号文件

与用户账号文件相类似

  • etc/group:保存组账号基本信息
  • etc/gshadow:保存组账号的密码信息
    在这里插入图片描述

2、添加账号-groupadd

groupadd命令

  • groupadd [-g GID] 组账号名

示例:
在这里插入图片描述

2、添加删除组成员-gpasswd

gpasswd命令

  • 设置组账号密码(极少用)、添加/删除组成员
  • gpasswd [选项] 组账号名

常用选项
-a:添加用户到组
-d:从组删除用户
-A:指定管理员
-M:指定组成员和-A的用途差不多
-r:删除密码
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组

示例:
1、添加用户到组(gpasswd -a)
在这里插入图片描述
2、从组中删除用户(gpasswd -d)
在这里插入图片描述
3、批量添加组成员,-M添加用户时会把原有的用户全部删除(gpasswd -M)

在这里插入图片描述

3、删除组账号-groupdel

groupdel命令

  • groupdel 组账号名

示例:
在这里插入图片描述

4、查询账号信息

(1)groups命令

  • 查询用户所属的组
  • groups [用户名]

在这里插入图片描述

(2)id命令

  • 查询用户身份标识
  • id [用户名]
    在这里插入图片描述

(3)finger命令

  • 查询用户账号的详细信息
  • finger [用户名]
    在这里插入图片描述

(4)w、who、users命令

  • 查询已登录到主机的用户信息

(5)lastlog命令

  • 用于显示系统中所有用户最近一次登录信息
    lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示Never logged。注意需要以root身份运行该命令。

常用选项:

  • -b<天数>:显示指定天数前的登录信息
  • -t<天数>:显示指定天数以来的登录信息
  • -u<用户名>:显示指定用户的最近登录信息
  • -h:显示召集令的帮助信息

实例:
1、显示3天前的登录信息(lastlog -b)
在这里插入图片描述
2、显示5天以来的登录信息(lastlog -t)
在这里插入图片描述
3、显示用户最近的登录信息(lastlog -u)
在这里插入图片描述
4、显示帮助信息(lastlog -h)
在这里插入图片描述

三、文件/目录的权限和归属

访问权限

  • 读取r:允许查看文件内容、显示目录列表
  • 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
  • 可执行x:允许运行程序、切换目录

归属(所有权)

  • 属主:拥有该文件或目录的用户帐号
  • 属组:拥有该文件或目录的组帐号

在这里插入图片描述
在这里插入图片描述

1、rwx权限详解

(1)文件中的rwx

r:可读
w:可写[可写不代表可以删除,删除一个文件的前提是对文件所在的目录有写的权限]
x:可执行

(2)文件夹中的rwx

r:可读(可用ls查看目录内容)
w:可写[可在目录内创建+删除+重命名文件或目录]
x:可执行[可以进入目录]

(3)查看文件时候前缀

-rw-r--r--. 1 root root 1808 3月  22 08:39 initial-setup-ks.cfg

- 表示类型为文件
第一组rwx: 表示所有者 可读  可写 可执行
第二组rw-: 表示同组用户  可读 可写 但不能执行
第三组r--: 表示其他用户  只可读

可用数字表示:
r = 4
w = 2
x = 1
因此rwx = 4+2+1 = 7

2、设置文件和目录的权限chmod

chmod 权限变更格式 文件或目录路径

  • chmod [ugoa] [+ - =] [rwx] 文件或目录
  • chmod nnn 文件或目录
chomod  [ugoa]    [+ - =]          [rwx]      文件或目录

u:所有者(属主)  g:所有组(属组) o:其他人	 a:所有人
+:增加   -:去除   =:设置权限
r:读  w:写   x:运行权限

1. u=rwx,g=rx,o=x
2. o+w					其它用户增加w权限
3. a-x					所有人减去执行权限
chomd  nnn  文件或目录
nnn:表示3位8进制数

r = 4   w = 2  x = 1	rwx = 7	  rx = 5
chmod u=rwx,g=rx,o=x   可以写成		chmod 751

示例:
在这里插入图片描述
在这里插入图片描述

3、设置文件和目录的归属chown

chown命令

  • chown 属主 文件或目录
  • chown :属组 文件或目录
  • chown 属主:属组 文件或目录

常用选项

  • -R:递归修改指定目录下所有文件、子目录的归属

实例:
在这里插入图片描述
在这里插入图片描述

4、权限掩码umask

umask作用

  • 控制新建的文件或目录的权限
  • 默认权限去除umask的权限为新建的文件或者目录的权限

umask设置:umask 022
umask查看:umask

示例:
1、将umask设为022,查看权限(实际权限755)
在这里插入图片描述
2、将umask设为000,查看权限(实际权限777)
在这里插入图片描述

四、总结

  • 用户账号管理(useradd、passwd、usermod、userdel)
  • 组账号管理(groupadd、gpasswd、groupdel)
  • 用户账号文件与组账号文件
  • 查询账号相关信息的命令(groups、id、finger、w)
  • 设置目录与文件权限(chmod)
  • 设置目录与文件归属(chown)
  • 权限掩码(umask)
Logo

更多推荐