Liunx 文件权限

[root@controller-0 ~]# ll -al heihei
-rw-r--r--. 1 root root 0 Mar 3 07:39 heihei

第一列 -rw-r--r-- 表示文件的权限及类型。其中,第一个字符代表文件是 “目录/文件或链接文件等”,d 则是目录, l 是链接文件,- 是文件。
接下来,3 个为一组的字符表示文件/目录的执行权限,第一组表示文件所属用户的执行权限,第二组表示文件所属用户所在组的执行权限,第三组表示不在文件所属用户所在组的其它用户的执行权限。
r 表示可读,w 表示可写,x 表示可执行。

第二列表示有多少文件名连接到这个 i-node 中,对于 heihei 文件来说就是 1 个文件名连接到 i-node 。
<关于 i-node 可看这里>

第三列表示当前文件的用户名。
第四列表示当前文件所属的用户组组名。
第五列表示文件大小。
第六列表示最新一次修改日期。
第七列表示文件名。

所以,文件 heihei 的所有者 root 对该文件具有可读可写权限,与 root 同属一个 用户组(root) 的用户对该文件具有可读权限,非 root 用户组的用户也具有可读权限。

Liunx 目录权限
r 读目录权限。
w 更改目录权限,包括在该目录下新建目录或文件,删除已经存在的文件与目录(不论该文件的权限),将已存在的文件或目录重命名,转移该文件的文件/目录位置等。
x 表示用户能否进入该目录成为工作目录。

[***@*** ~]$ cd /home/***/test/
-bash: cd: /home/***/test/: Permission denied
[***@*** ~]$ cd /home/***/
-bash: cd: /home/***/: Permission denied
[***@*** ~]$ ll /home/
drwx------. 13 *** *** 4096 Mar 3 08:37 ***
drwx------. 2 *** *** 78 Mar 3 08:38 ***
[root@*** ***]# chmod 705 /home/***
[root@*** ***]# ll /home/
drwx---r-x. 13 *** *** 4096 Mar 3 08:37 ***
drwx------. 2 *** *** 103 Mar 3 08:42 ***
[root@*** ***]# su - ***
Last login: Tue Mar 3 08:39:24 CST 2020 on pts/0
[***@*** ~]$ cd /home/***/
[***@*** ***]$ lstest
[***@*** ***]$ cd test/
[***@*** test]$ ls

原来 目录 *** 对于其它用户没有 r x 权限,所以 *** 进不去,显示 permission denied。修改为 r x 后可以进到该目录下。
注意即使有 r 权限,如果没有 x 权限也是不能进到该目录下的。

更改文件权限和属性
更改文件或目录所属用户组: chgrp
chgrp [-R] 组名 filename

更改文件或目录所属用户: chown
chown [-R] 账号名 filename

更改文件或目录权限: chmod

账号
两个重要概念:UID 和 GID。
每个用户都有 UID 和 GID,UID 是用户的 ID,GID 是用户所属的组 ID。

三个重要文件: /etc/passwd , /etc/shadow 和 /etc/group。
/etc/passwd 里存的是账号信息。
/etc/shadow 存的是账号的密码信息。
/etc/group 寸的是账号的群组信息。

以 test 用户为例,查看三个文件内容分别为:

[root@*** ***]# cat /etc/passwd | grep test
test:x:0:1007::/home/test:/bin/bash
[root@*** ***]# cat /etc/shadow | grep test
test:!!:18324:0:99999:7:::
[root@*** ***]# cat /etc/group | grep test
test:x:1007:

passwd 账号有 7 列。第一列表示账号名。第二列为该账号的密码,密码移到 shadow 文件中了,所以这里的密码是 * 表示。第三列为该用户的 UID , UID 为 0 表示该用户是系统管理员(可以看出系统管理员不止只有 root 一个),UID 为 1-499 表示该用户是系统账号,也就是保留给系统使用的 UID, 500及以上的 UID 留给一般用户使用。第四列 1007 为账号所属群组的 GID,GID 为 0 表示该用户所属的是系统管理员群组。第五列为用户信息说明列。第六列为该用户的主文件夹。第七列表示当该用户登陆的时候会取得 shell 和内核通信从而进行操作。

shadow 文件有 9 列,主要介绍第一列和第二列,第一列是账号名,第二列是该账号加密过的密码。

group 文件有 4 列,第一列为用户组,第二列为用户组的密码,类似于 /etc/shadow, 用户组的密码被存在 /etc/gshadow 文件中,一般这个密码是 *。第三列为用户组的 GID。第四列表示用户组支持的账号名称,如果用户的主用户组是这个用户组,则不需要指明,例如 test 用户的主用户组是 test,所以看到的 : 后是空的。

关于主用户组,一个用户可以同属多个用户组,新建一个用户 lianhua,将他加到用户组 test 中:

[root@*** ***]# usermod -G test lianhua
[root@*** ***]# ll /home/
drwx------. 2 lianhua lianhua 62 Mar 3 23:41 lianhua
drwx------. 2 root test 62 Mar 3 22:18 test
[root@*** ***]# cat /etc/passwd | grep lianhua
lianhua:x:1005:1008::/home/lianhua:/bin/bash
[root@*** ***]# cat /etc/group | grep test
test:x:1007:lianhua

可以看到 test group 的第四列多了一个用户 lianhua,而 test 是 lianhua 的从用户组,它的主用户组是 lianhua, GID 是 1008。

账号管理

用户账号管理
新增用户 useradd / adduser
useradd 和 adduser 都是创建用户,centos 下没有区别,Ubuntu 下有所不同:
1. useradd 创建用户不会在 /home 下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,用户是不能登录的,需要使用 passwd 命令修改密码。
2. adduser 创建用户会在 /home 下自动创建与用户名同名的用户目录,系统 shell 版本,会在创建时会提示输入密码,更加友好。

密码设置 passwd
修改密码,后接用户名,如果不加则表示修改当前用户的密码。

用户信息修改 usermod
修改用户信息,如 usermod -G test lianhua

删除用户 userdel
userdel 删除用户不会删除用户相关的目录文件, 需加 -r 选项删除。

实际操作 test 用户,看 test 用户的 shadow test:!!:18324:0:99999:7::: 知道此时还没有 test 还没设置密码,加密的密码是空的,此时是无法登陆该账号的。使用 passwd 给 test 设置密码:

[root@*** ***]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
[root@*** ***]# cat /etc/shadow | grep test
test:$1$dRPW9HDg$XryB6uQ/DSBxzkFNoI13P0:18324:0:99999:7:::

加密之后的 test 用户的密码是 $1$dRPW9HDg$XryB6uQ/DSBxzkFNoI13P0。
该密码以 $ 为符号分隔成三部分。
第一部分为数字,表示有哪中加密算法生成的密码,1 表示 MD5,5 表示 SHA-256,6 表示 SHA-512。
第二部分为 dRPW9HDg salt,是使用 hash 算法进行加密的干扰值。
第三部分为加密之后的密码。

现在加密好了,账号 test 可以用来登陆了。
从 root 切换账号到 test:

[root@*** ***]# su - test
Last login: Tue Mar 3 23:41:01 CST 2020 on pts/0
[root@*** ~]#

细心的朋友会发现 root@*** 一直没变,变化的是当前目录。之所以出现这样是因为 test 是管理员(UID 是 0)和 root 同一级别,这里不需要切换。
好了,test 的用途到此为止了,是时候给它删掉了,使用 userdel -r test 删除:

[root@*** ~]# userdel -r test
userdel: user test is currently used by process 1

显示进程正在被使用,退出登陆,重新连接,再执行 userdel -r test, 删除成功。

用户组账号管理

用户组账号管理主要有两个文件,/etc/group 和 /etc/gpasswd。
/etc/group 存的是 group 的信息。
/etc/gpasswd 存的是 group 的密码信息。

新增用户组 groupadd

[***@*** ~]$ groupadd testgroup
[***@*** ~]$ cat /etc/group | grep testgroup
testgroup:x:1008:

删除用户组 groupdel

修改用户组 groupmod

用户组管理员功能 gpasswd
gpasswd 可为用户组指定用户作为管理员,该管理员可以管理其它用户,如新建其它用户到该用户组,将该用户移出用户组等。

gpasswd option:
-a, --add USER add USER to GROUP
-d, --delete USER remove USER from GROUP
-h, --help display this help message and exit
-Q, --root CHROOT_DIR directory to chroot into
-r, --delete-password remove the GROUP's password
-R, --restrict restrict access to GROUP to its members
-M, --members USER,... set the list of members of GROUP
-A, --administrators ADMIN,...
set the list of administrators for GROUP [***@*** ~]$ gpasswd testgroup
testgroup:$1$NKee9/mB$JqiWJBNBP.6Wa8c11akqS1:
[root@*** ***]# useradd lianhua
[root@*** ***]# useradd huasheng
[root@*** ***]# gpasswd -A lianhua testgroup
[root@*** ***]# su - lianhua
[root@*** ***]# gpasswd -a huasheng testgroup
[root@*** ***]# su - huasheng
[root@*** ***]# gpasswd -a lianhuasheng testgroup
gpasswd: Permission denied.
[root@*** ***]# cat /etc/gshadow | grep testgroup
testgroup:$1$NKee9/mB$JqiWJBNBP.6Wa8c11akqS1:lianhua:huasheng

从上可知,用户组管理员 lianhua 可添加用户 huasheng 到 testgroup ,但是一般用户 huasheng 不能添加 lianhuasheng 到 testgroup。

补充 MD5 算法
MD5 信息摘要算法,是一种加密算法,常用来确保文件传输是否完整。

Liunx 自带 MD5 算法工具 md5sum:

[root@*** ***]# md5sum --help
Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.
-b, --binary read in binary mode
-c, --check read MD5 sums from the FILEs and check them
--tag create a BSD-style checksum
-t, --text read in text mode (default)

使用 md5sum 检查文件是否完整:

[root@*** ***]# touch testMD5.sh
[root@*** ***]# ll testMD5.sh
-rw-r--r--. 1 root root 0 Mar 4 23:04 testMD5.sh
[root@*** ***]# md5sum testMD5.sh > testMD5.sh.password
[root@*** ***]# ll
-rw-r--r--. 1 root root 0 Mar 4 23:04 testMD5.sh
-rw-r--r--. 1 root root 45 Mar 4 23:06 testMD5.sh.password
[root@*** ***]# cp testMD5.sh testMD5.sh.password ../
[root@*** ***]# cd ..
[root@*** home]# ls ../
testMD5.sh testMD5.sh.password
[root@*** home]# md5sum -c testMD5.sh.password
testMD5.sh: OK
[root@*** home]# vi testMD5.sh
[root@*** home]# ll testMD5.sh
-rw-r--r--. 1 root root 9 Mar 4 23:07 testMD5.sh
[root@*** home]# md5sum -c testMD5.sh.password
testMD5.sh: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

(完)

每天学五分钟 Liunx 001 | 用户及用户组的更多相关文章

  1. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

  2. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  3. 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画

    原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...

  4. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  5. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

  6. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  7. GC算法精解(五分钟让你彻底明白标记/清除算法)

    GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底 ...

  8. zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》

    本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图   zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...

  9. zookeeper核心-zab协议-《每日五分钟搞定大数据》

    上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...

  10. JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)

    相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...

随机推荐

  1. 第一行代码 Android 第三版读后感

    <第一行代码Android 第三版>是一本非常好的Android开发入门书籍.本书结合作者的丰富经验和实际案例,通过一步一步的介绍,详细地讲解了Android开发的各个方面,包括Andro ...

  2. 衡兰芷若成绝响,人间不见周海媚(4k修复基于PaddleGan)

    一代人有一代人的经典回忆,1994年由周海媚.马景涛.叶童主演的<神雕侠侣>曾经风靡一时,周海媚所诠释的周芷若凝聚了汉水之钟灵,峨嵋之毓秀,遇雪尤清,经霜更艳,俘获万千观众,成为了一代人的 ...

  3. hdu4365 Palindrome graph

    Palindrome graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. NLP复习之朴素贝叶斯

    朴素贝叶斯分类器和加一平滑计算每个单词的似然值 贝叶斯规则:c表示类别,d表示数据 \[P(c|d) = \frac{P(d|c)P(c)}{P(d)} \] 例题1 假设句子"I alwa ...

  5. Centos7安装高版本BIND9.16.41(DNS服务器)

    安装高版本BIND9.16.41或9.18.15 双数版本为稳定版如9.16.9.18 使用手册:https://bind9.readthedocs.io/en/v9_16_19/reference. ...

  6. Next.js 开发指南 路由篇 | App Router

    前言 路由(routers)是应用的重要组成部分.所谓路由,有多种定义,对于应用层的单页应用程序而言,路由是一个决定 URL 如何呈现的库,在服务层实现 API 时,路由是解析请求并将请求定向到处理程 ...

  7. P4928 [MtOI2018]衣服?身外之物! 题解

    题意 gcd 共有 \(n\) 件衣服,编号为 \(A_1,A_2,\cdots A_n\). 每一件衣服分别拥有颜色值和清洗时间,他在每一件衣服穿完以后都会将其送去清洗,而这件衣服当天所拥有的舒适感 ...

  8. 华为云构建云原生DevSecOps平台,保障软件供应链全流程安全可信

    摘要:面临网络安全挑战的大环境下,华为云构筑的云原生DevSecOps平台,打造了创新可控的安全服务,助力企业软件供应链全生命周期安全. 2022年8月13日,"2022中国DevOps社区 ...

  9. ​iOS上架审核宝典:如何避免被拒一次提交成功

    Xcode 摘要:本文整理了iOS上架需要注意的事项,以帮助从事iOS开发和App运营的朋友们避免审核被拒的困扰.通过遵循这些指南,我们可以在一次提交中成功地将应用上架,并节省宝贵的时间和精力. 引言 ...

  10. 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火 ...