inux权限管理(1)
1、linux系统文件普通权限
2、文件所属主的设置,组的指定
3、特殊权限
4、acl权限
5、su命令及其注意事项和sudo权限
6、权限管理的注意点
0、首先,在linux下用户账户是分角色的,由于角色的不同,每个角色,每个用户的的权限和所能完成的任务也不同。而在实际管理中,用户的角色是通过UID(用户id号)来标识的,每个用户的UID都是不同的。
(1)root用户:系统的的最高权限,UID为0,也被称为超级用户,在shell界面上用#标识,在linux上他就是皇帝,无所不能。
(2)系统用户:这类用户也称为虚拟用户、伪用户或假用户,这类用户不具有登录linux系统的能力,但是确实是系统运行不可缺少的用户,比如bin、mail、adm等等,这些是系统自身拥有的,或者我们配置某些服务软件是也会创建虚拟用户,如配置apache我们也会添加虚拟用户,以防止软件拥有过高的权限。系统用户的UID为1-499
(3)这类用户能登录系统,在linux系统上进行普通操作,能操作自己目录下的内容,使用系统的权限受限,这些用户是root创建的,其UID为500—60000
0.1、查看用户信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@desperadochn ~] # cat /etc/passwd #/etc/passwd 用户配置文件 root:x: 0 : 0 :root: / root: / bin / bash #root 用户 UID为0 bin :x: 1 : 1 : bin : / bin : / sbin / nologin #系统用户,不许登录 daemon:x: 2 : 2 :daemon: / sbin: / sbin / nologin adm:x: 3 : 4 :adm: / var / adm: / sbin / nologin lp:x: 4 : 7 :lp: / var / spool / lpd: / sbin / nologin sync:x: 5 : 0 :sync: / sbin: / bin / sync shutdown:x: 6 : 0 :shutdown: / sbin: / sbin / shutdown halt:x: 7 : 0 :halt: / sbin: / sbin / halt mail:x: 8 : 12 :mail: / var / spool / mail: / sbin / nologin operator:x: 11 : 0 :operator: / root: / sbin / nologin games:x: 12 : 100 :games: / usr / games: / sbin / nologin ftp:x: 14 : 50 :FTP User: / var / ftp: / sbin / nologin nobody:x: 99 : 99 :Nobody: / : / sbin / nologin avahi - autoipd:x: 170 : 170 :Avahi IPv4LL Stack: / var / lib / avahi - autoipd: / sbin / nologin systemd - bus - proxy:x: 999 : 997 :systemd Bus Proxy: / : / sbin / nologin systemd - network:x: 998 : 996 :systemd Network Management: / : / sbin / nologin dbus:x: 81 : 81 :System message bus: / : / sbin / nologin polkitd:x: 997 : 995 :User for polkitd: / : / sbin / nologin tss:x: 59 : 59 :Account used by the trousers package to sandbox the tcsd daemon: / dev / null: / sbin / nologin postfix:x: 89 : 89 :: / var / spool / postfix: / sbin / nologin sshd:x: 74 : 74 :Privilege - separated SSH: / var / empty / sshd: / sbin / nologin desperadochn:x: 1000 : 1000 :desperadochn: / home / desperadochn: / bin / bash #普通用户 hadoop:x: 1001 : 1001 :: / home / hadoop: / bin / bash ntp:x: 38 : 38 :: / etc / ntp: / sbin / nologin apahce:x: 996 : 994 :: / home / apahce: / bin / bash desperado:x: 1002 : 1002 :: / home / desperado: / bin / bash |
1、linux系统文件的普通权限:
linux系统将文件普通权限分成了读、写、执行。需要风别赋予其权限,这样权限管理就非常灵活了
1.1.1 文件权限的查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@desperadochn ~] # ls -l-rw-r--r--. 1 root root 66441 3月 19 12:13 1.txt - rw - r - - r - - . 1 root root 0 3 月 19 13 : 10 2.txt - rw - r - - r - - . 1 root root 0 3 月 16 23 : 30 a,b,c,d,e,f - rw - - - - - - - . 1 root root 1146 2 月 21 22 : 22 anaconda - ks.cfg drwxrwxrwx. 4 500 500 4096 3 月 10 15 : 23 cmatrix - 1.2a - rw - r - - r - - . 1 root root 74376 4 月 1 2002 cmatrix - 1.2a .tar.gz drwxr - xr - x. 12 501 games 4096 4 月 11 00 : 00 httpd - 2.4 . 20 - rw - r - - r - - . 1 root root 8299011 4 月 8 23 : 39 httpd - 2.4 . 20.tar .gz - rw - r - - r - - . 1 root root 1114 2 月 28 12 : 17 index.html drwxrwxrwx. 5 desperadochn desperadochn 4096 2 月 28 12 : 31 manpages - zh - 1.5 . 1 - rw - r - - r - - . 1 root root 1965336 4 月 4 2008 manpages - zh - 1.5 . 1.tar .gz - rw - r - - r - - . 1 root root 512 3 月 26 19 : 52 mbr drwxr - xr - x. 3 root root 41 4 月 10 23 : 51 tmp - rw - r - - r - - . 1 root root 49903 2 月 21 22 : 52 yum.txt |
其中以“drwxrwxrwx. 5 desperadochn desperadochn 4096 2月 28 12:31 manpages-zh-1.5.1”举例:rwxrwxrwx 代表权限位
r:读权限
w:写权限
x:执行权限
在linux中权限针对不同的用户对文件的读、写、执行权限划分了3种情况:所属主(u),所属组(g),其他人(o),每种情况拥有不同的权限。
u :在上面例子的权限“rwxrwxrwx”,其中前三位表示所属主的权限,即该文件所属主的权限为读、写、执行。
g:在上面例子的权限“rwxrwxrwx”,中间三位表示所属组的权限,即该文件所属组的权限为读、写、执行。
o: 在上面例子的权限“rwxrwxrwx”,最后三位表示其他人的权限,即该文件其他人的权限为读、写、执行。
这些权限可以用数值表示:
r:4
w:2
x:1
因此“rwxrwxrwx” 可以用777表示。
1.1.2、读、写、执行权限的意义:
(1)文件:
r: 可使用文件查看类工具获取其内容;
w: 可修改其内容;
x: 可以把此文件提请内核启动为一个进程;
(2)目录:
r: 可以使用ls查看此目录中文件列表;
w: 可在此目录中创建文件,也可删除此目录中的文件;
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;
1.1.3、文件权限的设置
文件的权限设置用chmod。
命令格式:chmod [OPTION]… OCTAL-MODE FILE… 或 chmod [OPTION]… MODE[,MODE]… FILE…
-R: 递归修改权限
其中:
(1)、设置一类用户的权限:
u= #后面跟上权限(rwx)表示赋予所属主所赋予的权限
g= #后面跟上权限(rwx)表示赋予所属组所赋予的权限
o= #后面跟上权限(rwx)表示赋予其他人所赋予的权限
ug= #后面跟上权限(rwx)表示赋予所属主和所属组所赋予的权限
a= #后面跟上权限(rwx)表示赋予所有用户所赋予的权限
u=,g= #后面跟上权限(rwx)表示赋予所属主和所属组分别赋予所输入的权限
例子:
1、a=
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod a=rwx 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - rwxrwxrwx. 1 root root 0 4 月 25 19 : 33 1111111 |
2、ug=
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod ug=rwx 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - rwxrwx - - - . 1 root root 0 4 月 25 19 : 33 1111111 |
3、u=,g=
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod u=rwx,g=rwx 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - rwxrwx - - - . 1 root root 0 4 月 25 19 : 33 1111111 |
4、u=
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod u=rwx 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - rwx - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 |
(2)、为某些用户加上某些权限权限
u+:表示所属主加上xxx权限(xxx是rwx权限)
u-:表示所属主减去xxx权限(xxx是rwx权限)
o+:表示其他人加上xxx权限(xxx是rwx权限)
o-:表示其他人减去xxx权限(xxx是rwx权限)
g+:表示所属组加上xxx权限(xxx是rwx权限)
g- : 表示所属组减去xxx权限(xxx是rwx权限)
例子:
1、u+:
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod u+x 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - x - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 |
2、g+:
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # chmod 000 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - - - - - . 1 root root 0 4 月 25 19 : 33 1111111 [root@desperadochn ~] # chmod g+x 1111111 [root@desperadochn ~] # ls -l 总用量 10264 - - - - - - x - - - . 1 root root 0 4 月 25 19 : 33 1111111 |
1.1.4权限掩码——umask (1)、umask :权限掩码 在shell中键入此命令可以查看默认默认权限掩码 其决定了文件的缺省权限。可以手工进行设置 格式为:umask xxx xxx代表3个数字 。含义:
-
若用户建立普通文件 这预设没有执行权限 最大值为666
-
若用户建立为目录,则预设所有权限开放,即777
-
其含义即为以上两条规则中的默认值减去需要减掉的权限(umask)
-
目录的权限为 “rwxrwxrwx – —-w–w- =rwxr-xr-x”(减去umask后即为生效权限)
-
普通文件文件的权限为 “rw-rw-rw- —-w–w- =rw-r—r— 减去umask后即为生效权限)
-
Umask可以在/etc/bashrc里面更改 默认情况下centos系统下root用户umask值为022(—-r–r-) 普通用户值为002(——-r-)不同的linux发行版值不同
(2)、umask查看
对于root用户:
1
2
|
[root@desperadochn ~] # umask 0022 |
对于普通用户:
1
2
3
4
|
[root@desperadochn ~] # su - desperadochn 上一次登录:日 4 月 10 22 : 26 : 37 CST 2016tty1 上 [desperadochn@desperadochn ~]$ umask 0002 |
(3)、umask设置
1、临时生效
1
2
3
4
5
6
|
[root@desperadochn ~] # umask 0000 [root@desperadochn ~] # mkdir 1 [root@desperadochn ~] # ls -l 总用量 10264 drwxrwxrwx. 2 root root 6 4 月 25 21 : 52 1 |
2、在/etc/bashrc里面更改永久生效:
1
2
3
4
5
6
|
[root@desperadochn ~] # vim /etc/bashrc 找到如下字段: if [ $UID - gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 #普通用户umask else umask 022 #rootumask |
2、文件所属主的设置,组的指定
2.1文件所属主的设置(仅root可用)
chown:修改文件的属主
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
Note: 命令中的冒号可用.替换;
-R: 递归
例子:
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # touch 1111 [root@desperadochn ~] # ls -l 总用量 10264 - rw - r - - r - - . 1 root root 0 4 月 25 22 : 10 1111 [root@desperadochn ~] # chown desperadochn 1111 [root@desperadochn ~] # ls -l 总用量 10264 - rw - r - - r - - . 1 desperadochn root 0 4 月 25 22 : 10 1111 #属主已改变 |
3、特殊权限:
3.1 setUid权限:
(1)只有可执行的二进制程序才能设定seUid权限
(2)命令执行者要对该程序拥有x权限(执行)
(3)命令的作用是执行者在执行程序的时候获得该文件属主的身份
(4)setUid权限只在该文件执行过程中有效,也就是说身份改变只在程序执行过程中有效
(5)设置成功后在文件权限位上能看到s权限
(6) setuid设置方法:①chmod 4xxx 文件名 4 代表文件setUid 权限②chmod u+s 文件名
危险的setUid:
①关键目录应严格控制写权限 如“/”,”/usr”等
②用户密码设置应遵循密码三原则
③对系统中应该具有setuid权限的文件做一列表,定期检查是否有多余的setuid权限文件
做一个实验:
1
2
3
4
5
6
7
|
[root@desperadochn ~] # whereis vim vim: / usr / bin / vim / usr / share / vim / usr / share / man / man1 / vim. 1.gz [root@desperadochn ~] # ls -l /usr/bin/vim - rwxr - xr - x. 1 root root 2289656 6 月 10 2014 / usr / bin / vim [root@desperadochn ~] # chmod 4755 /usr/bin/vim [root@desperadochn ~] # ls -l /usr/bin/vim - rwsr - xr - x. 1 root root 2289656 6 月 10 2014 / usr / bin / vim #看到权限位上的s表示设置成功了 |
这是我们的shell会用红色标识该文件(这表明该文件很危险或者错误)
让我们看看它到底有何危害呢?
[root@desperadochn ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1227 4月 10 23:26 /etc/passwd #该权限表明该文件只有root有读写权限,其他人只有读权限
[root@desperadochn ~]# su - desperadochn
上一次登录:一 4月 25 21:48:50 CST 2016pts/0 上
[desperadochn@desperadochn ~]$ echo "111" >> /etc/passwd
-bash: /etc/passwd: 权限不够
那我们用vim试试看:
1
|
[desperadochn@desperadochn ~]$ vim / etc / passwd |
试试改desperadochn权限为root:
试试改desperadochn权限为root:
1
2
3
4
|
[desperadochn@desperadochn ~]$ su - desperadochn 密码: 上一次登录:一 4 月 25 22 : 34 : 19 CST 2016pts / 0 上 [root@desperadochn ~] # #成功篡位成root了 |
因此编辑器或者能对如何文件中的任何内容进行读写操作的,都十分危险
默认拥有setUid权限的命令是passwd:
1
2
3
4
|
[root@desperadochn ~] # whereis passwd passwd: / usr / bin / passwd / etc / passwd / usr / share / man / man1 / passwd. 1.gz [root@desperadochn ~] # ls -l /usr/bin/passwd - rwsr - xr - x. 1 root root 27832 6 月 10 2014 / usr / bin / passwd |
因为普通用户对/etc/passwd和/etc/shadow文件没有写权限,因此在用户改密码的一瞬间,他需要root权限:
1
2
3
4
|
[root@desperadochn ~] # ls -l /etc/passwd - rw - r - - r - - . 1 root root 1228 4 月 25 22 : 47 / etc / passwd [root@desperadochn ~] # ls -l /etc/shadow - - - - - - - - - - . 1 root root 848 4 月 10 23 : 26 / etc / shadow |
用chmod u+s 设置setUid权限:
1
2
3
4
5
|
root@desperadochn ~] # whereis vim vim: / usr / bin / vim / usr / share / vim / usr / share / man / man1 / vim. 1.gz [root@desperadochn ~] # chmod u+s /usr/bin/vim [root@desperadochn ~] # ls -l /usr/bin/vim - rwsr - xr - x. 1 root root 2289656 6 月 10 2014 / usr / bin / vim |
3.2 setGid:
(1) 只有可执行的二进制程序才能设定setGid权限
(2)命令执行者要对该程序拥有x权限(执行)
(3)命令的作用是执行者在执行程序的时候,组身份升级为所属组。
(4)组身份的改变只在程序执行过程中有效。
(5)设置方法:chmod 2xxx 文件名 或chmod g+s
(6)可以给文件或者目录分配该权限
例子:
chmod 2xxx 设置setGid:
1
2
|
[root@desperadochn ~] # ls -l /usr/bin/vim - rwxr - sr - x. 1 root root 2289656 6 月 10 2014 / usr / bin / vim #rwxr-sr-x 组权限中的r权限为前的s表示设置成功了 |
3.3 stickyBit
(1)stickyBit 又叫粘着位
(2)粘着位权限只对目录起效
(3)普通用户对该目录存在w和x权限
(4)若没有该权限,则普通用户拥有 w权限,所以可以删除该目录下所有文件,若赋予了该权限,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,不能删除其他用户建立的文件。
(5)设置方法:chmod 1xxx 文件名 或chmod o+t
chmod 1xxx 设置:
1
2
3
4
5
6
7
8
9
|
[root@desperadochn ~] # mkdir /tmp/test11 [root@desperadochn ~] # cd /tmp/ [root@desperadochn tmp] # ls -ld test11/ drwxr - xr - x. 2 root root 6 4 月 25 23 : 15 test11 / [root@desperadochn tmp] # chmod 777 /tmp/test11/ #普通用户对该目录存在w和x权限[root@desperadochn tmp]# ls -ld /tmp/test11/ drwxrwxrwx. 2 root root 6 4 月 25 23 : 15 / tmp / test11 / [root@desperadochn tmp] # chmod 1777 /tmp/test11/ [root@desperadochn tmp] # ls -ld /tmp/test11/ drwxrwxrwt. 2 root root 6 4 月 25 23 : 15 / tmp / test11 / |
chmod o+t:
1
2
3
4
5
6
7
8
9
10
|
[root@desperadochn ~] # mkdir /tmp/test11 [root@desperadochn ~] # cd /tmp/ [root@desperadochn tmp] # ls -ld test11/ drwxr - xr - x. 2 root root 6 4 月 25 23 : 15 test11 / [root@desperadochn tmp] # chmod 777 /tmp/test11/ #普通用户对该目录存在w和x权限 [root@desperadochn tmp] # ls -ld /tmp/test11/ drwxrwxrwx. 2 root root 6 4 月 25 23 : 15 / tmp / test11 / [root@desperadochn tmp] # chmod o+t /tmp/test11/ [root@desperadochn tmp] # ls -ld /tmp/test11/ drwxrwxrwt. 2 root root 6 4 月 25 23 : 15 / tmp / test11 / |
做个试验:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
[root@desperadochn test11] # ls-l [root@desperadochn test11] # su - desperado [desperado@desperadochn ~]$ cd / tmp / test11 / [desperado@desperadochn test11]$ touch 123 [desperado@desperadochn test11]$ su - desperadochn 密码: 上一次登录:一 4 月 25 22 : 34 : 36 CST 2016pts / 0 上 [desperadochn@desperadochn ~]$ cd / tmp / test11 / [desperadochn@desperadochn test11]$ touch 112 [desperadochn@desperadochn test11]$ su - root 密码: 上一次登录:一 4 月 25 22 : 44 : 49 CST 2016pts / 0 上 [root@desperadochn ~] # cd /tmp/test11/ [root@desperadochn test11] # chmod 777 111 [root@desperadochn test11] # chmod 777 112 [root@desperadochn test11] # chmod 777 123 [root@desperadochn test11] # su - desperadochn 上一次登录:一 4 月 25 23 : 31 : 00 CST 2016pts / 0 上 [desperadochn@desperadochn ~]$ cd / tmp / test11 / [desperadochn@desperadochn test11]$ ls - l 总用量 0 - rwxrwxrwx. 1 root root 0 4 月 25 23 : 27 111 - rwxrwxrwx. 1 desperadochn desperadochn 0 4 月 25 23 : 31 112 - rwxrwxrwx. 1 desperado desperado 0 4 月 25 23 : 30 123 [desperadochn@desperadochn test11]$ rm 123 rm: 无法删除 "123" : 不允许的操作 [desperadochn@desperadochn test11]$ rm 112 [desperadochn@desperadochn test11]$ su - root 密码: 上一次登录:一 4 月 25 23 : 32 : 32 CST 2016pts / 0 上 [root@desperadochn ~] # cd /tmp/test11/ [root@desperadochn test11] # rm 123 rm:是否删除普通空文件 "123" ?y |
实验结果可见:若赋予了该权限,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,不能删除其他用户建立的文件。
因此权限的数字表示方法其实是4位:
(1)第一位表示特殊权限 4表示 setUid权限,2表示setGid权限,1表示 stickyBit权限
(2)第二、三、四位分别表示所属主、所属组、其他人这些不同的角色的权限,4表示r权限(读),2表示w权限(写),1表示x权限(写)
3.4 chattr权限 :
格式:chattr [+-=] [选项] 文件或目录名
+:增加权限 -:删除权限=:等于某权限
选项:
i:若对文件赋予了i属性,那么不允许对文件进行删除、改名,也不能添加和删除数据;若对目录赋予了i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能增加也不能修改数据;如果对目录设置a属性,那么只允许在目录中修改和 建立文件,但不允许删除
查看文件系统属性命令:lsattr 选项 文件名
选项:
-a:显示所有文件和目录
–d:若目标是目录,则列出目录本身的属性,而非子文件属性
例子:
对文件赋予i属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@desperadochn ~] # mkdir /tmp/test2 [root@desperadochn ~] # cd /tmp/test2/ [root@desperadochn test2] # touch 1111 [root@desperadochn test2] # ls -l 总用量 0 - rw - r - - r - - . 1 root root 0 4 月 26 00 : 20 1111 [root@desperadochn test2] # chattr +i 1111 [root@desperadochn test2] # lsattr 1111 - - - - i - - - - - - - - - - - 1111 #成功 [root@desperadochn test2] # ls -l 总用量 0 - rw - r - - r - - . 1 root root 0 4 月 26 00 : 20 1111 #文件属主拥有读写权限 [root@desperadochn test2] # echo "1111" >> 1111 - bash: 1111 : 权限不够 #不能添加数据 [root@desperadochn test2] # echo "1111" > 1111 - bash: 1111 : 权限不够 #不能删除数据 [root@desperadochn test2] # rm -f 1111 rm: 无法删除 "1111" : 不允许的操作 #不允许删除文件 [root@desperadochn test2] # mv 1111 2222 mv: 无法将 "1111" 移动至 "2222" : 不允许的操作 |
对文件取消i属性:
1
2
3
4
5
6
|
[root@desperadochn test2] # lsattr 1111 - - - - i - - - - - - - - - - - 1111 # [root@desperadochn test2] # chattr -i 1111 [root@desperadochn test2] # lsattr 1111 - - - - - - - - - - - - - - - - 1111 [root@desperadochn test2] # echo "1111" > 1111 |
对目录赋予i属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@desperadochn test2] # cd .. [root@desperadochn tmp] # chattr +i test2/ [root@desperadochn tmp] # lsattr -d test2/ - - - - i - - - - - - - - - - - test2 / [root@desperadochn tmp] # cd test2 [root@desperadochn test2] # ls -l 总用量 4 - rw - r - - r - - . 1 root root 5 4 月 26 00 : 36 1111 - rw - r - - r - - . 1 root root 0 4 月 26 00 : 56 2222 [root@desperadochn test2] # echo "111111" >> 2222 #可以修改数据 [root@desperadochn test2] # touch 33 touch: 无法创建 "33" : 权限不够 #不能创建文件 [root@desperadochn test2] # rm -f 2222 rm: 无法删除 "2222" : 权限不够 #不能删除文件 |
对文件赋予a属性:
1
2
3
4
5
|
[root@desperadochn test2] # chattr =a 1111 [root@desperadochn test2] # lsattr 1111 - - - - - a - - - - - - - - - - 1111 [root@desperadochn test2] # echo "1111" > 1111 - bash: 1111 : 不允许的操作 |
对目录赋予a属性:
1
2
3
4
5
6
7
8
9
10
|
[root@desperadochn tmp] # mkdir /tmp/test3 [root@desperadochn tmp] # chattr +a /tmp/test3/ [root@desperadochn tmp] # lsattr -d /tmp/test3 - - - - - a - - - - - - - - - - / tmp / test3 [root@desperadochn tmp] # cd /tmp/test3 [root@desperadochn test3] # ls [root@desperadochn test3] # touch 111 #可以创建文件 [root@desperadochn test3] # echo "11111" >>111 #可以修改文件内容 [root@desperadochn test3] # rm -f 111 rm: 无法删除 "111" : 不允许的操作 #不允许删除 |
4、acl权限
当传统的linux文件系统的权限控制谁着应用的发展,已经不能适应现在复杂的控制需求,ACL(Access Control Lists,访问控制列表)应运而生:
(1)acl权限是独立于所属主、用户组、其他人的一种权限,可以给单独用户已某种权限,而不用考虑 所属主、用户组、其他人。
(2)查询分区是否支持acl权限:用命令dumpe2fs –h /dev/sda3(所需查询的盘符)
-h 仅显示超级快信息,而不显示磁盘块组的详细信息。
查看default mount options 是否开启acl(user_xattr acl)
若分区不支持acl则有如下方法:
①mount -o remount,acl/ #重新挂载根分区,并挂载加入acl权限(临时开启acl权限)
②修改 /etc/fstab 命令:vim /etc/fstab
(3)查找根分区 挂载设置是否为defaults 若是一般支持(若不支持 后面添加,acl)重启或重新挂载
设置acl权限:
setfacl
-m 设定acl权限
–x 删除指定的acl权限
–b 删除所有acl权限
–d 设定默认的acl权限
–k 删除默认的acl权限
–R 递归设定acl权限
setfacl –m u:user:rwx /file u 用户标识符 同理 可用g设定给用户组:用户名:所分配的权限 /对应的目录
若设置成功则在文件权限最后面有一个+号
getfacl :
查看具体的acl权限
格式:
getfacl /文件名或目录名/
若成功会显示单独对于该用户的权限 与所属主、用户组、其他人权限无关。
直接设定的acl权限并非用户真正能得到的权限 必须与acl mask值相与后才能得到真正权限
setfacl –m m:rx 所给的最大权限 /文件名/ 若设定成功 查看时会出现effective:xxx 权限值表示实际起作用的权限。
删除acl权限 setfacl –x u:user /filename/ 或setfacl –b /filename/ 删除该文件所有acl权限
递归acl权限:指父目录在设定acl权限之时 子文件和子目录也遵循父目录acl权限
设定方法:setfacl –m u:用户名:权限 –R /文件名/
默认acl权限:作用是如果给父目录设定了默认acl权限,那么所有新创建的子文件都会继承父文件的acl权限
设定默认acl权限方法:setfacl –m d:u:用户名:权限 文件名 可以和-R同时使用 递归修改
递归acl和默认acl权限只能给目录
实现:
1、查看是否有acl软件包
1
2
|
[root@desperadochn ~] # rpm -q acl acl - 2.2 . 51 - 12.el7 .x86_64 |
2、设置支持acl功能:
1
|
root@desperadochn ~] # mount -o remount,acl / |
要想永久启用该功能请修改/etc/fstab文件。
3、搭建实验环境:
1
2
3
4
5
6
7
8
|
[root@desperadochn ~] # mkdir /tmp/acltest [root@desperadochn ~] # cd /tmp/acltest/ [root@desperadochn acltest] # touch acltest [root@desperadochn acltest] # ls -al 总用量 4 drwxr - xr - x. 2 root root 20 4 月 29 22 : 51 . drwxrwxrwt. 12 root root 4096 4 月 29 22 : 51 .. - rw - r - - r - - . 1 root root 0 4 月 29 22 : 51 acltest |
4、设置acl权限:
1
2
3
4
5
6
7
8
9
10
11
|
[root@desperadochn acltest] # setfacl -m u:desperadochn:rwx /tmp/acltest/acltest [root@desperadochn acltest] # getfacl /tmp/acltest/acltest getfacl: Removing leading '/' from absolute path names # file: tmp/acltest/acltest # owner: root # group: root user::rw - user:desperadochn:rwx group::r - - mask::rwx other::r - - |
试试是否对tmp/acltest/acltest有rwx权限:
[root@desperadochn acltest]# su - desperadochn
上一次登录:五 4月 29 22:43:05 CST 2016pts/1 上
[desperadochn@desperadochn ~]$ ls -al /tmp/acltest/
总用量 8
drwxr-xr-x. 2 root root 20 4月 29 22:51 .
drwxrwxrwt. 12 root root 4096 4月 29 22:51 ..
-rw-rwxr--+ 1 root root 0 4月 29 22:51 acltest
[desperadochn@desperadochn ~]$ cd /tmp/acltest/
[desperadochn@desperadochn acltest]$ id desperadochn
uid=1000(desperadochn) gid=1000(desperadochn) 组=1000(desperadochn)
[desperadochn@desperadochn acltest]$ echo 11111"" >> /tmp/acltest/acltest
[desperadochn@desperadochn acltest]$ cat /tmp/acltest/acltest
11111
看,本来作为其他人的得desperadochn是没有权限对/tmp/acltest/acltest进行写入操作的但是通过ACL权限独立给他读写执行权限。
5、su和sudo
5.1 su
作用:切换到其他用户账户进行登录。
注意事项:
(1)root用户切换到普通用户是不需要输入密码确认。普通用户切换至root需要输入root密码确认,普通用户相互切换需要对方的密码
(2)如果su不带任何选项及参数,默认切换到root账户且不改变shell环境
(3)使用su时一定要带- 即su – 要不然对于一个运维来说是非常low的表现
实验 :su和 su -的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@desperadochn ~] # echo $PATH / usr / local / sbin: / usr / local / bin : / sbin: / bin : / usr / sbin: / usr / bin : / root / bin [root@desperadochn ~] # pwd / root [root@desperadochn ~] # su desperadochn [desperadochn@desperadochn root]$ pwd / root #还是root的家目录 [desperadochn@desperadochn root]$ echo $PATH / usr / local / sbin: / usr / local / bin : / sbin: / bin : / usr / sbin: / usr / bin : / root / bin #还是root的环境变量 [desperadochn@desperadochn root]$ su - desperadochn 密码: 上一次登录:五 4 月 29 23 : 28 : 37 CST 2016pts / 1 上 [desperadochn@desperadochn ~]$ pwd / home / desperadochn #这时家目录对了 [desperadochn@desperadochn ~]$ echo $PATH / usr / local / bin : / bin : / usr / bin : / usr / local / sbin: / usr / sbin: / home / desperadochn / .local / bin : / home / desperadochn / bin #这才是desperadochn的环境变量 |
因此我们可以得出结论:
(1)su不带- 只切换用户不会切换环境变量及家目录等用户独有的设置。这可能会产生问题
(2)一定要用su –
5.2、sudo
当我们需要在执行一些不得不执行的命令但是这些命令只有root才能执行时,又不想或者不能切换成root(root权限太高,要慎用)这时我们就需要sudo
首先sudo需要由root授权,root将那个用户可以使用哪种命令进行授权,即对/etc/sudoers文件进行修改。
当普通用户需要使用获得授权的只有用root才能使用的命令时,在前面带上sudo,之后输入自己用户的密码,之后就能以root权限使用该命令了,密码有效期5分钟,在5分钟内再次使用sudo将不需要密码。
许多发行版甚至默认不允许root用户直接登录,但是可以用sudo操作只有root才能完成的操作。
特点:
(1)sudo能限制用户只能在某一台主机上执行指定命令。
(2)sudo提供了丰富的日志
(3)sudo的配置文件是 /etc/sudoers
实现:
1、查看sudo软件是否安装
1
2
|
[desperadochn@desperadochn ~]$ rpm - q sudo sudo - 1.8 . 6p7 - 16.el7 .x86_64 |
2、/etc/sudoers 文件详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
## Host Aliases 定义主机别名 ## Groups of machines. You may prefer to use hostnames (perhaps using ## wildcards for entire domains) or IP addresses instead. # Host_Alias FILESERVERS = fs1, fs2 #格式类型 # Host_Alias MAILSERVERS = smtp, smtp2 #格式类型 ## User Aliases #用户别名 ## These aren't often necessary, as you can use regular groups ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname ## rather than USERALIAS # User_Alias ADMINS = jsmith, mikem 格式类型 ## Command Aliases 定义命令别名 ## ## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL = ( ALL ) ALL #设置sudo部分,这一条表示root用户可以在任何主机运行任意命令 ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 这一条表示sys组成员可以在任何主机运行网络、软件方面的命令 ## Allows people in group wheel to run all commands % wheel ALL = ( ALL ) ALL #%wheel组成员可以在任何主机上运行任何命令 ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL #%wheel组成员可以在任何主机上运行任何命令,且不需要密码 ## Allows members of the users group to mount and unmount the ## cdrom as root # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 允许%user组用户运行sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom命令 ## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now 允许%user组成员可以在本机运行/sbin/shutdown -h now 命令 ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) #includedir /etc/sudoers.d |
虽然我们可以通过vim等工具修改/etc/sudoers文件,有专门的命令设置sudo权限——visudo他的优点是带语法检查。
命令格式:
visudo [选项]
-c:启用check—only 模式,sudoers文件将被检查语法错误、所有者和模式
-q:不进行语法检查
-s:启用严格检查sudoers文件
使用visudo编辑/etc/sudoers文件
1
|
[root@desperadochn ~] # visudo |
检查:
1
2
|
[root@desperadochn ~] # visudo -c / etc / sudoers:解析正确 |
sudo命令 命令格式: sudo [选项] [命令]
-l:列出用户能执行的命令
实验:
1
2
3
4
5
6
7
8
9
10
11
12
|
## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems). ## Syntax: ## ## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL = ( ALL ) ALL desperadochn ALL = (root) / usr / sbin / useradd |
试一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@desperadochn ~] # su - desperadochn 上一次登录:六 4 月 30 03 : 30 : 43 CST 2016pts / 1 上 [desperadochn@desperadochn ~]$ sudo - l 匹配此主机上 desperadochn 的默认条目: requiretty, !visiblepw, always_set_home, env_reset, env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" , env_keep + = "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" , env_keep + = "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" , env_keep + = "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" , env_keep + = "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" , secure_path = / sbin\: / bin \: / usr / sbin\: / usr / bin 用户 desperadochn 可以在该主机上运行以下命令: (root) / usr / sbin / useradd [desperadochn@desperadochn ~]$ useradd xxx - bash: / usr / sbin / useradd: 权限不够 [desperadochn@desperadochn ~]$ sudo / usr / sbin / useradd baibudonghei [desperadochn@desperadochn ~]$ id baibudonghei uid = 1003 (baibudonghei) gid = 1003 (baibudonghei) 组 = 1003 (baibudonghei) |
-
绝对在任何时候不要将sudo、setUid、setGid权限赋予工具型命令如vim或vi
-
sudu权限设置时最好带上命令详细参数
-