Linux权限管理之基本权限
编辑Linux权限管理之基本权限
在Linux中一切皆文件
文件基本权限
-
-rw-r--r--
-
文件类型 (-文件,d目录, l软连接)- rw-(u所有者) r--(g所属组) r--(o其他人)
- r读权限 w写权限 x执行权限(execute)
chmod 命令
-
chmod [选项] 模式 文件名
-
-R
递归 -
模式
[ugoa][+-=][rwx]
[mode=421]
-
-
修改权限的方式
- chmod u+x test.log 赋予文件拥有者对某个文件的执行权限
- chmod g+w,o+w test.log 赋予文件所属组和其他用户文件写入权限,多个操作用
,
隔开 - chmod a=rwx test.log 赋予全部用户读写和执行权限,
=
直接赋值即可,不用在意原来的权限
以上操作易用性不高,命令代码量略大,当操作的内容有差别的时候,不方便
-
权限的数字表示
- r --- 4
- w --- 2
- x --- 1
-
示例 (常用)
* `chmod 777 test.log` 赋予文件读写执行权限给全部用户
chmod 644 test.log
赋予拥有者读写权限,所属组和其他用户只读权限chmod 755 test.log
赋予拥有者读写执行权限,所有者和所属组读权限和可执行权限chmod 467 test.log
这种权限赋予方式不合理,也不应该出现
权限对文件的作用
-
r:读取文件内容(cat more head tail)
-
w:编辑,新增,修改文件内容(vi echo)
-
但是不包含删除文件权限,对文件有写权限,对其上一级目录没有写权限,不能删除
-
x:可执行
权限对目录的作用
- r:可以查询目录下的文件名(ls)
- w:具有修改目录结构的权限,如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
- x:可以进入目录(cd)
对文件来讲最高权限是x,对目录来讲最高权限是w ,所以对文件少赋予x权限,目录少赋予w权限;
对目录只能赋予 0(没有权限) 5(rx) 7(rwx) ,其他权限4,1,6没有任何意义
- 添加用户进行测试
useradd user1
passwd 123456
#### 修改文件的所有者
-
chown 用户名 文件名
* `chown misty test.log` >在实际操作过程中,超级用户如果要让一个用户拥有7权限,最合理的方式是直接将当前文件的拥有者修改成这个指定用户,防止为了让这个用户拥有7权限,而不得不赋予其他用户7权限的情况
修改文件的所属组
-
chgrp 组名 文件名
* `chgrp group1 test.log`
-
第二种方式
chown 所有者:所属组 文件名
* `chown root:root test.log`
-
让用户对文件拥有一定的权限
要求:拥有一个test目录
让misty拥有所有权限
让所有学员拥有查看权限
其他人不许查看这个目录
mkdir test #创建test目录
useradd misty # 添加一个用户
passwd 123456 # 设置密码
groupadd student #添加一个学生组
gpasswd -a user1 student #向学生组添加一个用户,用户之前已创建
useradd user2 # 添加一个用户 不设置密码
gpasswd -a user2 student # 向学生组添加第二个用户
chown misty:student test # 修改文件夹的所有者和所属组
chmod 750 test # 修改文件夹的权限,赋予拥有者最高权限,用户组读权限和执行权限(可查看可进入),其他用户不给权限
> 分配文件基本权限时,核心原则:`在最小权限情况下能够实现要求即可`,直接赋予777是极其不负责任和不安全的行为
### 文件默认权限
-
创建文件之后直接赋予的权限就是默认权限
-
umask
查看默认权限(umask值) -
0022 默认umask值
0022
-
第一位0:文件特殊权限
-
022 :文件默认权限
-
修改umask值
umask umask值
,临时生效,重启电脑丧失作用 -
umask 033
-
永久修改umask值
vi /etc/profile
在环境变量配置文件里面修改umask值 -
文件的默认权限
- 文件的默认权限不能建立为执行文件,必须手工赋予执行权限,防止直接的执行权限所带来的安群隐患
- 所以文件默认权限最大为666
- 默认权限需要换算成字再相减(不是直接相减)
- 建立文件之后的默认权限 ,为
666
减去umask
值
目录的默认权限
-
目录的默认权限最大为777
-
默认权限需要换算成字母再相减
-
建立目录之后的默认权限,为777减去umask值
-
修改umask值为0000
- 此时创建文件默认权限是666
- 此时创建目录额默认权限是777
-
普通用户的默认umask为0002,对应的权限是664
- root用户的UID为0,普通用户的UID大于500,小于500为管理员
ACL权限
文件特殊权限
不可改变位权限
sudo权限
以上都是操作文件的权限,只有sudo是操作命令的权限(严格意义命令也是文件)
- root把本来只能超级用户执行的命令赋予普通用户执行
- sudo的操作对象是系统命令
sudo的使用
-
visudo
实际修改的是/etc/sudoers
文件 -
root ALL=[(ALL)] ALL
#用户名 被管理主机的地址 = (可使用的身份) 授权命令(绝对路径) -
#%wheel ALL=[(ALL)] ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径) -
whereis [命令]
查看命令的路径 -
例子1:
-
授权普通用户可以重启服务器
visudo
#这里也可以不指定身份
- user1 All=(ALL) /sbin/shutdown -r now # 这里写的越详细,用户的权限越小,越粗略,用户的权限越高因为命令以及命令的参数可以指定
:wq
# 切换成普通用户执行如下命令
su - user1 #切换成普通用户
sudo -l #查看可用的sudo命令
sudo /sbin/shutdown -r now #普通用户执行sudo赋予的命令
> 命令赋予的时候需要写绝对路径,普通用户执行的时候也需要写绝对路径;centos 6之后可以不用写绝对路径,做了相关的优化,但是在其他的发行版仍然需要
-
例子2 :
-
授权普通用户可以添加其他用户
visudo - user1 ALL=/usr/sbin/useradd #授权添加用户的权限 - user1 ALL=/usr/bin/passwd #授权用户设定密码的权限 ,因为没有密码是无法登陆的 #查看用户是否添加成功 cat /etc/passwd sudo /usr/sbin/useradd misty #添加用户 sudo /usr/bin/passwd misty #修改密码 #重复输入两次密码,设置完成 ### 非常重要,在这里有一个巨大的隐患,因为权限设置太过于简单,导致权限过大,以至于可以修改root用户的密码 #补齐下面这句话,不允许设置root用户的密码,三句代码的顺序不能颠倒 - user1 ALL=/usr/bin/passwd[A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root # 用户密码要包含字母,不能为""(不能直接passwd ,以sudo的话是以root身份修改密码),不能为root用户设置密码 ### 重要:当以sudo执行命令的时候身份是root,如果passwd后面不带用户,代表可以修改当前用户身份的密码(sudo 为root身份)
* 例子三
* 不可以将sudo权限赋值给`vi`命令
```shell
### 查看保存密码的文件
/bin/vi /etc/shadow # 编辑shadow
ll /etc/shadow #普通用户这个文件根本没有权限
#但是一旦vi被赋予sudo权限,编辑shadow将加密的密码直接替换原来的,就可以修改密码,
- 超级管理员打开shadow 文件
- 0
- 0
-
分享