19 Star 185 Fork 90

baoke / Linux学完就忘系列

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
11.用户权限管理.md 6.64 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-07-09 08:43 . 更新 11.用户权限管理.md

权限管理

mode:rwx

ls -l
rwxrwxrwx:
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限

进程安全上下文

进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同,如果相同,则应用属主权限;
否则,则检查进程的属主是否属于文件的属组:如果是,则应用属组权限;
否则,就只能应用other的权限;

权限

r:readable,读
w:writable,写
x:excutable,执行

文件:
r:可获取文件的数据;
w:可修改文件的数据;
x:可将此文件运行为进程;

目录:
r:可使用ls命令获取其下的所有文件列表;但不能用ls -l;
w:可修改此目录下的文件列表;即创建或删除文件;
x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

mode:rwxrwxrwx
ownership:user group

权限组合机制:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

权限管理命令:

chmod命令

三类用户:
u:属主
g:属组
o:其它
a:所有

(1) chmod [OPTION]... MODE[,MODE]... FILE...

MODE表示法:

赋权表示法:直接操作一类用户的所有权限位rwx;

u=
g=
o=
a=

cp /etc/fstab ./
pwd
ll fstab

#设置属组读写权限
chmod g=rw fstab
#设置属主,属组读权限
chmod ug=r fstab
#设置属主读写执行,属组读写,其它没有权限
chmod u=rwx,g=rw,o= fstab

授权表示法:直接操作一类用户的一个权限位r,w,x

u+,u-
g+,g-
o+,o-
a+,a-

#去除属组的执行权限
chmod u-x fstab
ll fstab
#给其它加上读权限
chmod o+r fstab 
#给属主,属组加上执行权限
chmod ug+x fstab
#给所有加上执行权限
chmod +x fstab
#给所有去除执行权限
chmod -x fstab
#给属主执行权限,属组写权限
chmod u+x,g+w fstab

(2) chmod [OPTION]... OCTAL-MODE FILE...

#属主和属组读写,其他无权限
chmod 660 fstab

(3) chmod [OPTION]... --reference=RFILE FILE...

#查看fstab权限
ll fstab
#查看参考文件权限
ll /var/log/messages
#指明参考文件来修改指定文件权限
chmod --reference=/var/log/messages fstab
#再次查看fstab权限
ll fstab

选项:
-R,--recursive 递归修改;如果不加-R选项,修改的是目录权限时,则表示仅修改目录自身的权限;加上-R则表示修改目录自身和目录下的所有子目录和子文件的权限;递归修改建议赋权和授权表示法,其他不建议使用;

#设置/temp/abc/属主和属组为无权限,递归执行
chmod -R ug= /temp/abc/

注意:用户仅能修改属主为自己的那些文件的权限;

从属关系管理命令:chown,chgrp

chown命令

chown [OPTION]...[OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R:递归修改

#copy文件和使用ll查看
cp -r /etc/skel /tmp/
cd /tmp
ll -ad /etc/skel
ll /etc/skel -a
#递归修改/etc/skel/的属组为docker
chown -R docker /tmp/skel/
ll -d /tmp/skel
ll -a /tmp/skel
#递归修改设置属主:属组
chown -R archlinux:mygrp /tmp/skel/
ll -d /tmp/skel/
ll -a /tmp/skel/

#也可以用.号来隔开,如root.root
chown -R root.root /tmp/skel/

#:递归修改设置属主不变,属组为mygrp
chown -R :mygrp /tmp/skel/
#引用修改
chown -R --reference=/tmp/ssh-ZcL8QoJiIFGk/ /tmp/skel
ll -d /tmp/skel/
ll -a /tmp/skel/

chgrp命令:

chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

注意:仅管理员可修改文件的属主和属组;

思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件的内容?能否删除此文件?
答:不能修改此文件内容,但是能删除此文件;同时可以在这个目录下创建文件

umask:文件的权限反向掩码,遮罩码:

文件:666-umask
目录:777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1
umask:022
666-022=644
777-022=755

umask命令:
umask:查看当前umask
umask:MASK:设置umask;默认只对当前shell进程有效

练习:
1、新建系统组mariadb,新建系统用户mariadb,属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;
2、新建GID为5000的组geedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;

3、新建用户fedora,其家目录为/users/fedora,密码同用户名;

4、新建用户www,其家目录为/users/www;删除www用户,但保留其家目录;

5、为用户gentoo和fedora新增附加组geedu;

6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为geedu,并让属组对目录本身拥有写权限;

install命令:复制文件且设置文件属性

单源复制:
install [option]... source dest
多源复制:
install [option]... source... directory
install [option]... -t directory source
创建目录:
install [option] [-d,--directory] directory...

常用选项:
-m,--mode=MODE:设定目标文件权限,默认为755;
-o,--owner=OWNER:设定目标文件属主;
-g,--group=GROUP:设定目标文件属组;
-d,--directory:用于创建目录

#什么选项也不加复制文件会被赋予755权限,而/etc/inittab权限为644
install /etc/inittab /root
#先删除文件
rm -rf inittab

#复制文件设置权限为640
install -m 640 /etc/inittab /root
ll inittab

#复制文件并设置权限、属主、属组
install -m 640 -o archlinux -g mygrp /etc/inittab /tmp/inittab
ll /tmp/inittab

#-d创建目录
install -d -m 640 hello 
ll -d hello

mktemp:create a temporary directory or file

mktemp [OPTION]... [TEMPLATE]
常用选项:
-d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来;

myfile=$(mktemp /tmp/abc.XXXXX)
echo $myfile

一般临时文件路径放在/tmp/下,一个月后会自动删除,其他目录不确定会自动删除

#创建临时文件后面至少跟三个大写的X,表示随机值
mktemp /tmp/abc.XXX
mktemp /tmp/abc.XXXX
mktemp /tmp/abc.XXXXX
Shell
1
https://gitee.com/abcd1234567_1/linux.git
git@gitee.com:abcd1234567_1/linux.git
abcd1234567_1
linux
Linux学完就忘系列
master

搜索帮助