Linux用户和权限之二

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 文件和目录权限权限 对文件的影响 对目录的影响

文件和目录权限

权限 对文件的影响 对目录的影响

r(读取) 可读取文件内容 可列出目录内容

w(写入) 可修改文件内容 可在目录中创建删除内容

x(执行) 可作为命令执行 可访问目录内容


root@yaoyuan ~# ll -d /var/lib/
drwxr-xr-x. 62 root root 4096 Jun 21 17:20 /var/lib/
root@yaoyuan ~# ll -d /var/lib/mysql
drwxr-x--x. 7 mysql mysql 4096 Jul 19 14:30 /var/lib/mysql
root@yaoyuan hr# ll /var/lib|grep ^d|wc
     60     540    421
root@yaoyuan hr# ll /var/lib/mysql|grep ^d|wc
      5      45     285

d表示目录 62和7为该目录下子目录的数量


chmod

修改某个用户、组对文件夹的权限,用命令chmod实现,其中用户以augo代指,+、-、=代表加入、删除和等于对应权限,具体案例如下


取消用户对dir1目录的进入权限:chmod u-x dir1


授予同组用户对dir1目录的写权限:chmod g+w dir1


递归授予其他人对dir1目录的写权限:chmod -R o+w dir1


对所用户赋予文件的执行权限:chmod a+x testfile 常用于shell程序


Linux 系统还为每种权限(r、w 和 x)分配了对应的数字:


权限 数字

r 4

w 2

x 1

如果我们要合并这些权限,就需要做简单的加法了:将对应的数字相加。假如我们要分配读、写权限,那么我们就要用 4+2,就等于 6。数字 6 表示具有读和写权限。以下是可能的组合形式:


权限 数字 计算

- - - 0 0 + 0 + 0

r- - 4 4 + 0 + 0

-w- 2 0 + 2 + 0

- -x 1 0 + 0 + 1

-rw- 6 4 + 2 + 0

-wx 3 0 + 2 + 1

-r-x 5 4 + 0 + 1

-rwx 7 4 + 2 + 1

所以,对于访问权限的三组(所有者的权限、群组用户的权限、其他用户的权限),我们只要分别做加法就可以了,然后把三个和连起来。


例如,chmod 640 file1表示:


文件的所有者有读和写的权限;文件所在群组的其他用户具有读的权限;除此之外的其他用户没有任何权限。因此,我们可以给的最宽泛的权限就是 777:所有者,群组用户,其他用户都有读、写和运行的权限(chmod 777 filename)。这样,所有人就都可以对此文件“为所欲为”了。


注意:进入某个目录的前提是能进入它的上级的所有目录(这一点特别容易被忽略)


root@yaoyuan ~# chmod o-x /var/lib
root@yaoyuan ~# ls -ld /var/lib
drwxr-xr--. 62 root root 4096 Jun 21 17:20 /var/lib
root@yaoyuan ~# service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
root@yaoyuan ~# tail /var/log/mysqld.log 
...
2022-07-28T02:58:08.568048Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2022-07-28T02:58:08.568288Z 0 [ERROR] [MY-010119] [Server] Aborting
root@yaoyuan ~# chmod o+x /var/lib
root@yaoyuan ~# service mysqld start
Redirecting to /bin/systemctl start mysqld.service

umask

通过使用 umask 默认权限来给所有新建的文件和目录赋予初始权限的。文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限 umask的默认值是0022,第 1 个数代表的是文件所具有的特殊权限,后面3位分别对应 3 种用户身份用户、组、其它。


对文件来讲,其可拥有的最大默认权限是 666,即 rw-rw-rw-,减去0022是644。对目录来讲,其可拥有的最大默认权限是 777,即 rwxrwxrwx,减去0022是755。



oracle@yaoyuan tmp$ umask
0022
oracle@yaoyuan tmp$ mkdir p
oracle@yaoyuan tmp$ touch a
oracle@yaoyuan tmp$ ll -ld a p
-rw-r--r--. 1 oracle oinstall 0 Jul 28 15:08 a
drwxr-xr-x. 2 oracle oinstall 6 Jul 28 15:08 p
oracle@yaoyuan tmp$ umask -S 0002
u=rwx,g=rwx,o=rx
oracle@yaoyuan tmp$ touch b
oracle@yaoyuan tmp$ ll b
-rw-rw-r--. 1 oracle oinstall 0 Jul 28 15:10 b


文件和目录的三种特殊权限

三个特殊的权限是:setuid、setgid和粘滞位


setuid的作用是让执行该命令的用户以该命令拥有者的权限去执行,比如普通用户执行passwd时(修改自己的密码)会拥有root的权限,这样就可以修改/etc/passwd这个文件了。它的标志为:s,会出现在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一样的,即让执行文件的用户以该文件所属组的权限去执行。


oracle@yaoyuan ~$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Nov 22  2019 /usr/bin/passwd


另外一个例子是oracle执行程序



oracle@yaoyuan ~$ ll $ORACLE_HOME/bin/oracle -h
-rwsr-s--x. 1 oracle oinstall 421M Mar 20 11:11 /u01/app/oracle/product/19.3.0/db_1/bin/oracle


因此运行oracle程序都是oracle用户和oinstall组。

这三种特殊权限的设置方法

chmod u+s xxx # 设置setuid权限

chmod g+s xxx # 设置setgid权限

chmod o+t xxx # 设置stick bit权限,针对目录

chmod 4775 xxx # 设置setuid权限

chmod 2775 xxx # 设置setgid权限

chmod 1775 xxx # 设置stick bit权限,针对目录

粘滞位最常用是应用于路径。当路径被设置粘滞位后,路径下的文件只有文件的owner,路径的owner, 或者root 才能够重命名、删除文件。如果没有粘滞位,任何用户,不管是不是owner, 只要有路径的写/执行权限就可以重命名、删除文件。典型的应用就是/tmp路径,粘滞位可以阻止一般用户删除/重命名其他用户的文件


“o+t”、 “o-t”权限模式可分别用于添加、移除粘滞位权限。


设置了粘滞位权限的目录,使用ls命令查看其属性时,其他用户权限处的“x”将变为“t”。

oracle@yaoyuan tmp$ mkdir dir1
oracle@yaoyuan tmp$ touch dir1/file1
oracle@yaoyuan tmp$ chmod o+w dir1
# 对目录有写的权限删除可以成功
[zhangsan@yuan tmp]$ rm dir1/file1 
rm: remove write-protected regular empty file ‘dir1/file1’? y
# 对dir1目录加上粘滞位
oracle@yaoyuan tmp$ chmod o+t dir1
oracle@yaoyuan tmp$ touch dir1/file1
# 有粘滞位后删除不能成功
[zhangsan@yuan dir1]$ rm file1
rm: remove write-protected regular empty file ‘file1’? y
rm: cannot remove ‘file1’: Operation not permitted
[zhangsan@yuan dir1]$ whoami
zhangsan


切换用户

su

su 命令可以用来切换用户身份,除 root 外,其他用户切换身份时,需输入密码该命令的使用方式如下:


su [选项] user


su --help

没有user项默认为root。


-, -l, --login 像登录一样启动shell,配置环境变量。


sudo

sudo 命令用来以root的身份执行指令,该命令的使用方式如下:


sudo [选项] 命令


sudo用户的配置在/etc/sudoers文件中:



oracle ALL=(ALL) NOPASSWD:ALL


这一行的意思是oracle用户可以运行任何超级用户的命令,而且不需要输入密码。

以mysql用户运行这个命令。


oracle@yaoyuan ~$ sudo -u mysql ls
ls: cannot open directory .: Permission denied
oracle@yaoyuan ~$ sudo -u mysql ls /var/lib/mysql

sudo -i 切换到root,在Ubuntu和Debian上很有用。


登录信息

who查询当前谁登录。


whoami查询当前登录的信息,类似id。


oracle@yaoyuan ~$ who
oracle   pts/0        2022-07-28 15:22 (yao)
oracle   pts/1        2022-07-28 15:25 (yao)
oracle@yaoyuan ~$ whoami
oracle


last查询过去登录过的用户,信息保存在/var/log/wtmp :


oracle@yaoyuan ~$ last oracle
oracle   pts/1        yao              Thu Jul 28 15:25   still logged in   
oracle   pts/0        yao              Thu Jul 28 15:22   still logged in   
oracle   pts/2        yao              Thu Jul 28 11:30 - 13:57  (02:26)    
oracle   pts/0        yao              Wed Jul 27 11:48 - 17:48  (06:00)    
oracle   pts/2        yao              Mon Jul 25 14:22 - 19:57  (05:34)    
oracle   pts/0        yao              Mon Jul 25 14:07 - 19:57  (05:49)    
oracle   pts/2        ubuntu-route     Sun Jul 24 09:32 - 13:31  (03:59)    
oracle   pts/0        ubuntu-route     Sun Jul 24 09:29 - 13:31  (04:01)


不接用户显示所有用户的登录信息,reboot是个伪用户,显示系统启动的动作。

作者介绍


姚远:Oracle ACE(Oracle和MySQL数据库方向),华为云MVP。拥有包括 Oracle 10g和12c OCM在内的20+数据库相关认证。曾任IBM公司数据库部门经理,现在一家第三方公司任首席数据库专家,服务2万+客户,《MySQL 8.0运维与优化》的作者。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
机器学习/深度学习 人工智能 搜索推荐
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
|
12月前
|
运维 监控 Cloud Native
运维之道:从基础到进阶的实战指南
【10月更文挑战第20天】 在数字化时代,运维作为保障系统稳定运行的重要环节,其重要性不言而喻。本文将带你深入探索运维的核心领域,从基础概念解析到进阶技能提升,通过一系列实用的技巧和策略,帮助你构建高效、可靠的运维体系,确保业务连续性和数据安全。
615 6
|
机器学习/深度学习 人工智能 搜索推荐
人工智能:重塑未来,驱动效率革命
人工智能(AI)是模拟人类智能的技术,让计算机执行需智能才能完成的任务,如理解语言、学习和推理。通过复杂算法,AI能分析大量数据并作出决策。例如,使用`scikit-learn`库训练分类器识别鸢尾花种类。AI未来发展将涉及技术创新如深度与强化学习、应用拓展至医疗健康、智能制造等领域、以及社会影响如就业结构变化和教育变革。AI的优势包括自动化流程、高效数据分析、智能决策、个性化服务及跨领域融合,这些均显著提升了工作效率和社会发展。
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible进行批量服务器配置
【8月更文挑战第31天】 在现代IT基础设施中,高效、一致且可靠的服务器管理是至关重要的。本文将引导你通过Ansible这个强大的自动化工具来简化你的日常运维任务,从而让你能够更加专注于业务的核心价值。我们将从Ansible的基础讲起,逐步展示如何利用它来执行批量服务器配置,包括安装软件、更新系统以及部署应用。准备好让你的运维工作变得更加轻松和高效吧!
|
自然语言处理 安全 开发者
在构建知识库时,如何有效管理领域术语和同义词信息
在构建知识库时,如何有效管理领域术语和同义词信息
489 0
|
存储 Java Linux
Linux环境变量配置及常见问题解决方案
Linux环境变量配置及常见问题解决方案
|
消息中间件 关系型数据库 MySQL
2021年最新Flink读写Kafka数据——Flink数据写入Kafka+从Kafka存入Mysql(二)
2021年最新Flink读写Kafka数据——Flink数据写入Kafka+从Kafka存入Mysql(二)
299 0
|
Linux 虚拟化 Windows
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
2999 1
|
传感器 数据处理 Android开发
Camera基本代码架构
Camera基本代码架构
|
运维 应用服务中间件 nginx
【运维杂谈】Nginx部署项目,上传文件报错413,如何解决?
【运维杂谈】Nginx部署项目,上传文件报错413,如何解决?
908 0