第7章 理解Linux文件权限
用户、用户组、其他用户
用户权限是通过创建用户时分配的用户 ID(user ID,UID)来跟踪的。UID 是个数值,每个
用户都有一个唯一的 UID。但用户在登录系统时是使用登录名(login name)来代替 UID 登录的。
登录名是用户用来登录系统的最长 8 字符的字符串(字符可以是数字或字母),同时会关联一个对应的密码
添加新用户useradd
useradd默认值
默认值可以通过useradd -D
查看
某些linux环境useradd默认不创建home目录,使用useradd -m username
可以创建,同时会复制/etc/skel
目录下所有文件到新用户的$HOME目录下。
创建用户使用其他参数
如-m是创建用户$HOME目录,-g指定用户登录的GID或组名,-r创建系统账户,-p passwd
指定密码等等,看起来常用的都列举出来了
userdel删除用户
默认只删除etc/passwd
和/etc/shadow
中的用户信息,其他用户相关文件不删除。
加入-r
选项,会删除用户的
H
O
M
E
目录和邮件目录,注意使用
‘
−
r
‘
选项前,确认
HOME目录和邮件目录,注意使用`-r`选项前,确认
HOME目录和邮件目录,注意使用‘−r‘选项前,确认HOME目录下没有其他用户需要用到的文件
修改用户
usermod
-L
:锁定账户,禁止登录
-U
:解除锁定,恢复登录
passwd和chpasswd
passwd username
:不加username是修改自己密码,加是修改别人密码,只有root用户才能修改别人密码(sudo也可以)
chpasswd
可以为大量用户修改密码,直接从txt文件读取账户密码对,实际使用应该很少,用时再查就行,具体略
chsh/chfn/chage
chsh、chfn 和 chage 用于修改特定的账户信息。chsh 命令可以快速修改默认的用户登录shell,chfn 命令提供了在/etc/passwd 文件的备注字段中保存信息的标准方法,chage 命令可用于帮助管理用户账户的有效期。知道有这些功能就行了,具体使用时可以搜索
使用Linux组
组权限允许多个用户对系统对象(比如文件、目录或设备等)共享一组权限
/etc/group文件
对于系统账户组,为其分配的 GID 值低于 500,而普通用户组的 GID 则从 500 开始分配
添加组成员使用usermod命令
groupadd创建新组
创建完新组后无用户,使用usermod -G groupname username
groupmod修改组
groupmod可以修改组id或组名,修改组名命令:
groupmod -n newName oldName
理解文件权限
ls -l
列举文件权限,第一列形如drwxr-x---
,都知道-
代表文件,d代表目录(directory),l代表链接(link),c代表字符设备(code),b代表块设备(block),p代表具名管道,s代表网络套接字(socket)
r/w/x分别是read、write、exexutable
9个字符分为3组,分别代表属主权限(这个文件所属人的权限),数组权限(这个文件所属组的权限),系统其他用户
同样地,也可以用二进制表示权限,3位二进制分别代表r/w/x,如100,就是r有权限,w和x没有,010是没有r权限,有w权限,没有x权限等,将2进制转化为8进制,就可以直接设置权限了!
如chmod 777 filename
,7就是2进制的111,也就是4®+2(w)+1(x),即完整权限,这个命令给所属用户,用户组,其他用户都是所有权限
以下用drwxr-xr-x
举例说明:
d | r | w | x | r | - | x | r | - | x |
---|---|---|---|---|---|---|---|---|---|
文件类型,-代表文件,d代表目录,等等 | 文件所属用户有可读权限,权限加4 | 可写,+2 | 可执行,+1 |
默认文件权限
首先,要知道文件和目录,全权限值是不一样的,文件全权限值是666
,目录全权限值是777
,因为要能进目录,必须有可执行权限。
那么用户创建一个新文件,文件权限是多少呢?可以使用umask
看看掩码是多少
umask
:查看用户权限,是0022
touch newfile.txt
:发现新创建文件权限是-rw-r--r--
,是从666里,减去022(每位减),即剩下644
mkdir testMaskFile
:发现创建目录权限是drwxr-xr-x
,是从777里,减去022,即权限为755
umask还可以修改默认权限掩码,如umask 026
,再创建文件,权限就会变为-rw-r-----
,即666减026,变成640
更改安全设置
修改权限chmod
通常命令为chmod options mode file
八进制编码设置:chomod 666 text.txt
最常用就是直接按文件的标准 3 位八进制权限编码设置,如chmod 666 test.txt
符号模式设置:chmod o+r text.txt
o+r
:o定义权限作用对象,+
定义操作,r
定义操作权限,以下列举三种对象的值:
1.权限作用对象:
权限作用对象 | 含义 |
---|---|
u | 用户 |
g | 组 |
o | 其他用户 |
a | 上述所有用户 |
2.操作
操作 | 含义 |
---|---|
+ | 增加权限 |
- | 移除权限 |
= | 设置权限 |
3 要设置的权限
要设置的权限 | 含义 |
---|---|
r | 读 |
w | 写 |
x | 执行 |
X | 仅当对象是目录或者已有执行权限时才赋予执行权限 |
s | 在执行时设置 SUID 或 SGID |
t | 设置粘滞位(sticky bit) |
u | 设置属主权限 |
g | 设置属组权限 |
o | 设置其他用户权限 |
注意要设置的权限比想象中的rwx多了X/s/t/u/g/o这些,这些暂时不重要,知道有就行
选项-R
chmod几乎只需要记住-R选项即可,表示递归修改
改变所属关系:chown/chgrp
修改文件所属用户:chown
chown options owner[.group] file
:修改文件所属用户,也可以直接修改文件所属用户和用户组
1 直接修改文件所属用户chown username filename
2 修改文件所属用户和用户组:chown username.groupname filename
chgrp同理,直接修改文件所属用户组
共享文件
大概就是SUID,SGID,粘滞位(sticky bit),目的就是新创建的文件,可以通过设置SGID位,让目录下的所有文件都默认使用某个组而不是用户本身的组,感觉重要但是又没那么重要,知道有这个功能就行,需要用到再查
访问控制列表ACL
原文定义比较复杂,实际可以理解为:同样的文件,对于不同的用户/用户组,有自己不同的权限。
要想实现acl,实际的命令就是setfacl
和getfacl
。原书讲了很多这两个命令的参数,含义,但实际上最新版的linux基本都不内置这两个命令了,而且实际使用场景也不多,需要用到再查吧
第八章 管理文件系统
Linux文件系统类型
大概有ext文件系统(ext/ext2),日志文件系统(ext3/ext4/JFS/ReiserFS/XFS),卷管理文件系统(ZFS/Btrfs/Stratis),具体的定义都蛮复杂,可以理解为三种不同维度的文件系统,具体怎么个处理法现在不需要学习。
使用文件系统
文件系统实际上暂时不需要过多了解,先跳过,有时间再看