Linux权限管理
Linux下一切都被抽象成了file,哪些进程可以访问哪些file,不可以访问哪些file,就是权限管理。
每个file都有权限属性,可以用
ls -l
查看file的权限属性。3对rwx分别代表,用户,组,其他人的rwx。
$ ls -l
drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a
file通过自己的权限属性来保护自己,让符合自己权限属性的进程访问,让不符合自己权限属性的进程不能够访问。
权限属性是由权限位构成的,权限位(drwxrwxr-x等)说明表:
文件类型位 用户的读权限位 用户的写权限位 用户的可执行权限位 主组的读权限位 主组的写权限位 主组的可执行权限位 其他用户的读权限位 其他用户的写权限位 其他用户的可执行权限位 user group d
r
w
x
r
w
x
r
-
x
ys
ys
3组rwxrwxrwx叫mode,使用
chmod
修改mode。user,group叫ownership,
文件:
- r:可以获取file的元数据和数据内容
- w:可以修改file的元数据和数据内容
- x:可以运行此文件
目录:
r:可以用
ls
命令获取目录里的内容列表,但不能使用ls -l
获取目录里的详细内容列表。w:可以在目录里,创建,删除文件。
x:可以cd到此目录,如果也有读权限,则可以使用
ls -l
获取目录里的详细内容列表。$ ll -d a
drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a
$ chmod u-x a
$ ll -d a
drw-rwxr-x. 2 ys ys 28 Nov 29 17:47 a
$ cd a
-bash: cd: a: Permission denied
$ ls -l a
ls: cannot access a/docker-ce.repo: Permission denied
total 0
-????????? ? ? ? ? ? docker-ce.repo
$ chmod u+x a
$ ls -l a
total 4
-rw-rw-r--. 1 ys ys 2880 Nov 29 17:47 docker-ce.repo
Linux的权限判断逻辑:
- 首先判断启动进程的用户是否和file的user相同?
- 相同:使用第一组rwx
- 不相同:判断启动进程的用户是否在file的group里面?
- 在group里面:使用第二组rwx
- 不在group里面:使用第三组rwx
- 首先判断启动进程的用户是否和file的user相同?
一,修改file的mode:chmod
file的mode信息,只能由file的属主修改。
用户分类:
- u:file是由谁创建的
- g:file的创建者的主组
- o:其他
- a:以上3种的总和
语法:
chmod [OPTION]... MODE[,MODE]... FILE...
只能操作某类用户的所有权限位,不能操作某类用户的单个权限位。没指定的权限位就被清除。
u=rw
g=w
o=x
a=rwx
# ll /tmp/t1
----------. 1 root root 0 Dec 17 21:57 /tmp/t1
# chmod ugo=rwx /tmp/t1
# ll /tmp/t1
-rwxrwxrwx. 1 root root 0 Dec 17 21:57 /tmp/t1
# chmod ugo=rw /tmp/t1
# ll /tmp/t1
-rw-rw-rw-. 1 root root 0 Dec 17 21:57 /tmp/t1
即能操作一类用户的单个权限位,也能操作多个权限位 。没指定的权限位,保持不变。
u+,u-
g+,g-
o+,o-
a+,a-
# ll /tmp/t1
-rwxr--r-x. 1 root root 0 Dec 17 21:57 /tmp/t1
# chmod ug+rx /tmp/t1
# ll /tmp/t1
-rwxr-xr-x. 1 root root 0 Dec 17 21:57 /tmp/t1
# chmod ugo-rwx /tmp/t1
# ll /tmp/t1
----------. 1 root root 0 Dec 17 21:57 /tmp/t1
chmod [OPTION]... OCTAL-MODE FILE...
一起操作3类用户的所有权限位
chmod [OPTION]... --reference=RFILE FILE...
把某个文件的mode,设置成自己的mode
# ll /tmp/t1
-rwxr--r--. 1 root root 0 Dec 17 21:57 /tmp/t1
# ll /etc/issue
-rw-r--r--. 1 root root 23 Nov 23 2018 /etc/issue
# chmod --reference=/etc/issue /tmp/t1
# ll /tmp/t1
-rw-r--r--. 1 root root 0 Dec 17 21:57 /tmp/t1
修改目录的mode只影响目录本身,那么也想影响目录里面的所有文件和子目录呢?
使用
-R
选项。使用-R时,最好使用+,-的方式,因为此方式不会影响没有指定的权限位。
# pwd
/tmp/test
# ll
-rw-rw-r--. 1 ys ys 0 Dec 15 21:24 1 A
-rw-rw-r--. 1 ys ys 0 Dec 15 21:23 1aA
-rw-rw-r--. 1 ys ys 0 Dec 15 21:23 1As
drwxr-xr-x. 2 root root 6 Dec 17 22:07 ss
# chmod -R g+wx /tmp/test/
# ll
-rw-rwxr--. 1 ys ys 0 Dec 15 21:24 1 A
-rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1aA
-rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1As
drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss
二,修改file的ownership:chown
chgrp
这2个命令只有,有管理员权限的用户才可以使用
chown:即可以修改file的user,也可以修改file的group
chgrp:只能修改file的group。
语法:即可以修改file的user,也可以修改file的group
chown [OPTION]... [OWNER][:[GROUP]] FILE...
里面的冒号换成点也可以。# ll -d /tmp/test
drwxrwxr-x. 3 ys ys 49 Dec 17 22:07 /tmp/test
# pwd
/tmp/test
# ll
-rw-rwxr--. 1 ys ys 0 Dec 15 21:24 1 A
-rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1aA
-rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1As
drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss
# chown -R :zg1 /tmp/test
# ll -d /tmp/test/
drwxrwxr-x. 3 ys zg1 49 Dec 17 22:07 /tmp/test/
# ll
-rw-rwxr--. 1 ys zg1 0 Dec 15 21:24 1 A
-rw-rwxr--. 1 ys zg1 0 Dec 15 21:23 1aA
-rw-rwxr--. 1 ys zg1 0 Dec 15 21:23 1As
drwxrwxr-x. 2 root zg1 6 Dec 17 22:07 ss
chown [OPTION]... --reference=RFILE FILE...
:用法同chmod修改目录的ownership只影响目录本身,那么也想影响目录里面的所有文件和子目录呢?
使用
-R
选项。
三,大型思考
用户za1对目录/tmp/fld/有写权限,但对文件/tmp/fld/t1没有写权限。
问题1:用户za1可以修改/tmp/fld/t1文件的内容吗
问题1答案:不可以
问题2:用户za1可以删除/tmp/fld/t1吗
问题2答案:可以
验证:
# ll -d /tmp/fld/drwxrwxr-x. 2 root zg1 16 Dec 17 22:34 /tmp/fld/
# ll /tmp/fld
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
# su - za1
Last login: Tue Dec 17 21:07:01 CST 2019 on pts/1
$ id za1
uid=1001(za1) gid=1001(za1) groups=1001(za1),1000(ys),1002(zg1)
$ pwd
/tmp/fld
$ ll
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
$ echo 111 >> ./t1
./t1: Permission denied.
$ rm -f t1
$ ll
total 0
四,创建文件或者目录后,文件和目录的mode是如何计算出来的。
由umask决定。假如umask是0022(----w--w-),则:
生成文件的mode:rw-rw-rw(666) - umask(----w--w-) = rw-r--r--
生成目录的mode:rwxrwxrwx(777) - umask(----w--w-) = rwxr-xr-x
umask
获取当前的umask值umask mode
设置umask,但只在当前shell中有效
参考:Linux umask详解:令新建文件和目录拥有默认权限
五,拷贝文件时,能否同时指定目标文件的mode和ownership?创建目录的同时,能否同时指定目录的mode和ownership?
cp
命令是做不到的,install
命令可以做到,但是install
不能拷贝目录。
mkdir
命令是做不到的,install
命令可以做到。
install后,目标文件或者目录的mode的默认值都是755
- 指定目标的mode:
-m mode
- 指定目标的user:
-o username
指定目标的group:
-g groupname
拷贝单个文件,到文件
# ll /etc/inittab
-rw-r--r--. 1 root root 511 Oct 31 2018 /etc/inittab
# install /etc/inittab f1
# ll f1
-rwxr-xr-x. 1 root root 511 Dec 18 14:37 f1
# install -m 640 -o za1 -g zg1 /etc/inittab f1
# ll f1
-rw-r-----. 1 za1 zg1 511 Dec 18 14:38 f1
拷贝多个文件,到目录
# mkdir d1
# ll d1
total 0
# install -m 754 -o gentoo -g zg1 /etc/inittab /etc/issue d1/
# ll d1
-rwxr-xr--. 1 gentoo zg1 511 Dec 18 14:43 inittab
-rwxr-xr--. 1 gentoo zg1 23 Dec 18 14:43 issue
创建目录
# install -m 711 -o za1 -g zg1 -d d3
# ll -d d3
drwx--x--x. 2 za1 zg1 6 Dec 18 14:27 d3
六,创建文件名或者目录名是,随机的临时文件,而且名称不重复:mktemp
语法:
mktemp [OPTION]... tmp.XXXXXXXXXX
创建名称是随机的文件:不使用任何选项
# mktemp file.XXX
file.fPA
# mktemp file.XXX
file.8Ir
创建名称是随机的目录:使用选项
-d
# mktemp -d dir.XXXX
dir.Cq5N
# mktemp -d dir.XXXX
dir.O9Bm
# ll -d dir.Cq5N/
drwx------. 2 root root 6 Dec 18 15:06 dir.Cq5N/
# ll -d dir.O9Bm/
drwx------. 2 root root 6 Dec 18 15:06 dir.O9Bm/
只产生随机的名称,而不创建文件或者目录:使用选项
-u
# mktemp -u 111.XXX
111.hrM
# ll 111.hrM
ls: cannot access 111.hrM: No such file or directory
# mktemp -ud 111.XXX
111.evP
# ll 111.evP
ls: cannot access 111.evP: No such file or directory
把创建的文件或目录放在/tmp目录:使用选项
-t
# pwd
/root
# mktemp -t 222.XXX.XXX
/tmp/222.XXX.rcm
# mktemp -t 222.XXX.XXX
/tmp/222.XXX.mA1
用变量保存生成的名称。
# echo $myfile
# myfile=$(mktemp -t abc.XXX)
# echo $myfile
/tmp/abc.YEx
ll /tmp/abc.YEx
-rw-------. 1 root root 0 Dec 18 15:14 /tmp/abc.YEx
使用
mktemp
生成的,文件的mode是600;目录的mode是700
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
以上是 Linux权限管理 的全部内容, 来源链接: utcz.com/z/511791.html