Linux学习之用户身份与文件权限

1 用户身份及能力

Linux系统的管理员之所以是root,并不是因为其名叫root,而是该用户身份号码数值(UID)为0.

  管理员UID为0:系统的管理员用户

  系统用户UID为1-999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整个服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。

  普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。

在Linux系统中创建每个用户时,将自动创建一个同名的基本用户组,且该用户组只有用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称为扩展用户组。一个用户只有一个基本用户组,但可以有多个扩展用户组。

  1.1 useradd命令

  用于创建新的用户,格式为“useradd [选项] 用户名”

  常用参数及作用

  -d  指定用户的家目录(默认为/home/username)

  -e  账户的到期时间,格式为“2018-10-01”

  -u  指定该用户的默认UID

  -g  指定一个初始的用户基本组(必须已存在)

  -G  指定一个或多个扩展用户组

  -N  不创建与用户同名的基本用户组

  -s  指定该用户的默认shell解释器

   % useradd -d /home/linux -u -s /sbin/nologin linuxprobe #一旦用户的解释器被设置为nologin,则代表该用户不能登录到系统中。

  1.2 groupadd命令

  用于创建用户组,格式为“groupadd [选项] 群组名”


Linux中没有直接根据组名查询GID的命令

可用如下方法

% grep eric /etc/group #群组文件放置在/etc/group中


  1.3 usermod 命令

  用于修改创建用户组,格式为“usermod [选项] 用户名”

  常用参数及作用:

  -c  填写用户账户的备注信息

  -d -m  参数-m与-d连用,可重新指定用户的家目录并自动把旧的数据转移过去

  -e  账户的到期时间,格式为“2018-10-01”

  -g  变更所属用户组

  -G  变更扩展用户组

  -L  锁定用户禁止其登录系统

  -U  解锁用户,允许其登录系统

  -s  变更默认终端

  -u  修改用户的UID

  1.4 passwd命令

  用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”

普通用户只能使用此命令修改自己的密码,而root则有权限修改其他所有人的密码

  常用参数及作用:

  -l  锁定用户,禁止其登录

  -u  解除锁定,允许用户登录

  --stdin  允许通过标准输入修改用户密码,如'echo "NewPassWord" | passwd --stdin Username'

  -d  使该用户可用空密码登录系统

  -e  强制用户在下次登录时修改密码

  -S  显示用户的密码是否被锁定,以及密码所采用的加密算法名称

  1.5 userdel 命令

  用于删除用户,格式为“userdel [选项] 用户名”

  常用参数及作用:

  -f  强制删除用户

  -r  同时删除用户及用户家目录

  2 文件权限及归属

  Linux文件类型:

  -   普通文件

  d  目录文件

  l   链接文件

  b  块设备文件

  c  字符设备文件

  p  管道文件

对于目录文件来说,“可读”表示能够读取目录内的文件列表,“可写”表示能够在目录内新增、删除、重命名文件,“可执行”则表示能够进入该目录。

  r—4   w—2    x—1

  权限:rwxrw-r--  764  #必须对应权限项,无权限位置用-

1          2                3      4          5            6                 7                                8

1:文件类型

2:文件访问权限

3:文件数

4:文件拥有者

5:文件所属组

6:文件大小

7:文件修改时间

8:文件名


输出第N列信息

例:上文中依据组名查询GID,只输出GID

原输出为: eric:x::

% grep eric /etc/group | awk -F: '{print $3}' #-F参数是用来分割原字符串,后加分割标识符,后面{print $3}必须加大括号

输出为10000


 3 文件的特殊权限

  3.1 SUID

  SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

  设置SUID:(u+s)

% chmod u+s filename

设置SUID后,执行位x替换为s,若无执行权限,则该位为S

  3.2 SGID

  主要实现两种功能:一是让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);二是在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置,如部门的共享目录)。SGID的第一种功能是参考SUID设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。

  设置SGID:(g+s)

% chmod -Rf g+s filename    # -R  递归处理    -f  不显示错误信息

  3.3 chmod命令

  用于设置文件或目录的权限,格式为“chmod [参数] 权限”

  3.4 chown命令

  用于设置文件或目录的所有者和所属组,格式为“chown [参数] 所有者:所属组 文件或目录名称”

% chown root:bin test

  3.5 SBIT(粘滞位或保护位)

  SBIT特殊权限可以确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,设置了SBIT,该目录中的文件就只能被其所有者执行删除操作了。设置了SBIT后,执行位x替换为t,若无执行权限则为T。

  设置SBIT(o+t)

   % chmod -R o+t /root

特殊权限更多内容:https://www.jianshu.com/p/b390688a7af8

  4 文件的隐藏属性

  4.1 chattr命令

  用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。添加隐藏功能,需“+参数”,移除隐藏功能,则为“-参数”。

  常用参数及作用:

  i  无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件。

  a  仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)

  S  文件内容在变更后立即同步到硬盘(sync)感觉类似于flush

    s  彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)

  A  不再修改这个文件或目录的最后访问时间(atime)

  b  不再修改文件或目录的存取时间

  D  检查压缩文件中的错误

  d  使用dump命令备份时忽略本文件/目录

  c  默认将文件或目录进行压缩

  u  当删除文件后依然保留其在硬盘中的数据,方便日后恢复

  t  让文件系统支持尾部合并(tail-merging)

  X  可以直接访问压缩文件中的内容

  4.2 lsattr命令

  用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”,Linux系统中隐藏权限必须用lsattr查看。

  5 文件访问控制列表(ACL)

  一般权限、特殊权限、隐藏权限共性:针对某一类用户

  文件访问控制列表:针对某一个用户

  若对某个目录设置了ACL,该目录内文件会继承其ACL;若对文件设置了ACL,则文件不再继承其所在目录的ACL。

  5.1 setfacl命令

  用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。文件的ACL提供的是在所有者、所属组、其他人的rwx权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行rwx权限的控制。

  常用参数及作用:

  -R  对目录进行递归设置ACL

  -m  对普通文件设置ACL

  -b  删除某个文件/目录的ACL  

   % setfacl -Rm u:linuxprobe:rwx /root   #u为user的简写,也可写user、g(group)、mask、other

ACL要素:

ACL_USER_OBJ:相当于Linux里file_owner的permission
ACL_USER:定义了额外的用户可以对此文件拥有的permission
ACL_GROUP_OBJ:相当于Linux里group的permission
ACL_GROUP:定义了额外的组可以对此文件拥有的permission
ACL_MASK:定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限
ACL_OTHER:相当于Linux里other的permission

  5.2 getfacl命令

  用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”,可加--omit-header省略掉前三行。

[root@localhost ~]# getfacl ./test.txt
# file: test.txt
# owner: root
# group: admin
user::rw-  #1
user:john:rw-  #2
group::rw-  #3
group:dev:r--  #4
mask::rw- other::r--  #5

1:文件拥有者权限,ACL_USER_OBJ

2:用户john权限,ACL_USER

3:文件所属组权限,ACL_GROUP_OBJ

4:用户组dev权限,ACL_GROUP

5:MASK权限(ACL中最大权限,其他用户/用户组权限均不得大于此,否则按此权限执行)

设置ACL后 ls查看文件权限的最后一位由“.”变成了“+”

见到设置了ACL的文件/目录,不能单单依靠ls查看所有者、所属组及其他人的权限,如设置ACL时定义了MASK,则MASK权限替代GROUP权限显示,需使用getfacl命令查看。

  6 su命令与sudo服务

  6.1 su命令

  用于切换用户身份,格式为“su - 用户名”,-表示完全切换到新用户,即把环境变量信息也变更为新用户。

  6.2 sudo命令

  用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务(指定提权),格式为“sudo [参数] 命令名称”。

  主要参数及作用:

  -h  列出帮助信息

  -l  列出当前用户可执行的命令

  -u用户名或UID值  以指定的用户身份执行命令

  -k  清空密码的有效时间,下次执行sudo时需要再次进行密码验证

  -b  在后台执行指定的命令

  -p  更改询问密码的提示语

  6.3 visudo命令

  类似于vim,用于配置用户权限,此命令执行时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。只有root管理员才可以用visudo命令编辑sudo服务的配置文件。

  填写规则:

  谁可以使用 允许使用的主机=(以谁的身份) 可执行命令列表(命令必须为绝对路径,用whereis查看)

  例 在99行加入:linuxprobe ALL=(ALL) ALL  #linuxprobe可执行root权限的所有命令

    在99行加入:linuxprobe    ALL=(root) /usr/bin/cat  #linuxprobe可查看/root(root管理员家目录)中的文件信息

   % sudo cat /etc/shadow

  linuxprobe ALL=NOPASSWD:  /usr/sbin/poweroff  #“NOPASSWD:”参数使得用户执行sudo命令时不需密码验证,不要忘了:否则报错

Linux学习之用户身份与文件权限的更多相关文章

  1. 《Linux就该这么学》培训笔记_ch05_用户身份与文件权限

    <Linux就该这么学>培训笔记_ch05_用户身份与文件权限 文章最后会post上书本的笔记照片. 文章主要内容: 用户身份与能力 文件权限与归属 文件的特殊权限 文件的隐藏属性 文件访 ...

  2. Linux常用命令--用户管理,文件权限,打包命令等

    幕布链接 Linux常用命令--用户管理,文件权限,打包命令等

  3. 6Linux用户身份与文件权限

    3类用户身份: (1)管理员UID为0,root (2)系统用户UID为1-999:nologin不能登录系统,老版本5.6中是1-499 (3)普通用户UID为1000开始,老版本5.6中是1000 ...

  4. Linux用户身份与文件权限学习笔记

    用户身份 管理员UID为0:系统的管理员用户 系统用户UID为1~999:服务程序会有独立的系统用户负责运行:防止被黑客入侵进行提权,并有效控制被破坏的范围 普通用户UID从1000开始:是由管理员创 ...

  5. linux用户身份和文件权限

    1.用户身份与能力 root管理员是linux 的超级用户,他拥有系统的所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭服务进程,开启/禁用硬件设备…… "Linux系统中的管理 ...

  6. linux用户身份与文件权限

    用户 useradd [ 参数 ] 用户名 添加用户 sudo useradd -d /home/test -u 1001 -s /bin/bash name usermod [选项] 用户名 更改用 ...

  7. linux 学习7 用户管理相关文件 r

    7.1.用户配置文件 7.2.用户管理相关文件 7.3.用户管理命令 7.4.用户组管理命令 删除用户userdel [root@localhost ~]# userdel [-r] 用户名 //一定 ...

  8. Linux学习《第五章 用户身份与文件权限》

  9. Linux 用户身份与进程权限

    在学习 Linux 系统权限相关的主题时,我们首先关注的基本都是文件的 ugo 权限.ugo 权限信息是文件的属性,它指明了用户与文件之间的关系.但是真正操作文件的却是进程,也就是说用户所拥有的文件访 ...

随机推荐

  1. vmware 6 虚拟化 全系列 序列号

    vmware 6 虚拟化 全系列 序列号   vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8C ...

  2. 中国移动能力开放商店OneNET View数据可视化公测 10分钟轻便生成行业可视化界面

    随着云计算,5G技术,人工智能等底层技术的发展,万物互联时代已经到来,同时带来了海量数据,如何效果好.低成本.短时间的表现据,成为物联网行业从业者和公司的当务之急. OneNET View传统的数据展 ...

  3. Copula函数

    Copula函数 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. Copula介绍 Copula函数把边缘分布函数与联合分布函数联系起来,是研究变 ...

  4. HelloHibernate的创建过程

    文章提纲 安装与配置 开发小结 建立项目 配置项目 创建代码 执行项目 安装与配置 JDK的安装:建议使用JRE 1.8以上: SQL Server 2000的安装:建议SQL Server 2000 ...

  5. QPen

    Help on class QPen in module PyQt5.QtGui: class QPen(sip.simplewrapper) |  QPen() |  QPen(Qt.PenStyl ...

  6. Activiti开发案例之activiti-app工作流导出图片

    前言 自从 Activiti 和 JBPM4 分家以后,Activiti 目前已经发展到了版本7,本着稳定性原则我们最终选择了6,之前还有一个版本5. 问题 在开发使用的过程中发现 Activiti ...

  7. ABP之模块系统

    简介 ASP.NET Boilerplate提供了构建模块的基础结构,并将它们组合在一起以创建应用程序. 模块可以依赖于另一个模块. 通常,一个程序集被视为一个模块. 如果创建具有多个程序集的应用程序 ...

  8. java基础-03基本语法

    关键词 常用关键字53个(含2个保留字): 1.保留关键字(2个) const --常量 常数:用于修改字段或局部变量的声明. goto--转到 指定跳转到标签,找到标签后,程序将处理从下一行开始的命 ...

  9. MR 实例

    二次排序 点击复制代码:https://www.cnblogs.com/JBLi/p/10764535.html 将上面的代码改成两个 分区    展示的数据 相同的不在一个分区 怎么解决点击查看没有 ...

  10. Jupyter Notebook不能在系统命令行里全局启动

    Anaconda安装好Juypyter Notebook之后,只能在base环境里启动,在系统的命令行里要全局启动Jupyter NoteBook失败了 C:\Users\HP>jupyter ...