一、ACL权限管理
1.给所有者,所属组,其他人进行授权操作
#所有者、所属组、其他人,普通文件或目录授权
[root@wenhaijin /]# mkdir /project
[root@wenhaijin /]# useradd user1
[root@wenhaijin /]# useradd user2
[root@wenhaijin /]# groupadd tgroup
[root@wenhaijin /]# gpasswd -a user1 tgroup
Adding user user1 to group tgroup
[root@wenhaijin /]# gpasswd -a user2 tgroup
Adding user user2 to group tgroup
[root@wenhaijin /]# chown root:tgroup /project/
[root@wenhaijin /]# chmod 770 /project/
#查看/project目录的详细信息
[root@wenhaijin /]# ll -d /project/
drwxrwx--- 2 root tgroup 4096 Mar 21 00:10 /project/
2.在所有者,所属组,其他人这三个组不能满足授权条件时,通过acl对用户或用户组进行授权
###添加一个用户user3并设置密码
[root@wenhaijin /]# useradd user3
[root@wenhaijin /]# passwd user3
Changing password for user user3.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
###对用户进行acl授权,让user3对目录/project/具有可读和可执行的权限
[root@wenhaijin /]# setfacl -m u:user3:rx /project/
###查看目录详情发现权限列多了一个+号,说明具有acl权限
[root@wenhaijin /]# ll -d /project/
drwxrwx---+ 2 root tgroup 4096 Mar 21 00:10 /project/
###查看acl权限,得到以下信息
[root@wenhaijin /]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:user3:r-x
group::rwx
mask::rwx
other::---
###对用户组进行acl授权
[root@wenhaijin /]# setfacl -m g:tgroup:rx /project/
[root@wenhaijin /]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:user3:r-x
group::rwx
group:tgroup:r-x
mask::rwx
other::---
3.最大有效权限(mask权限)
在acl权限中,出文件或者目录的所有者之外,其他所有角色的权限都是他们本身的权限和mask权限做“相与”的操作,所以可以通过控制mask权限来限制除所有者外的其他用户或用户组的最大权限
[root@wenhaijin ~]# setfacl -m m:rx /project/
[root@wenhaijin ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:user3:r-x
group::rwx #effective:r-x
group:tgroup:r-x
mask::r-x
other::---
从以上结果可以看出,虽然所属组显示具有rwx权限,但是因为mask权限取值为rx,所以所属组的有效权限为rx
4.使用-x删除用户或用户组的acl权限
[root@wenhaijin ~]# setfacl -x g:tgroup /project/
以上命令是删除/project/对于tgroup用户组的acl权限,删除后再查看其权限
[root@wenhaijin ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:user3:r-x
group::rwx
mask::rwx
other::---
发现此时并没有tgroup的acl权限了
使用-b删除文件的所有acl权限
[root@wenhaijin ~]# setfacl -b /project/
再查看发现已经没有acl权限,只有所有者、所属组、其他人这三个基本权限
[root@wenhaijin ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
group::rwx
other::---
查看目录详细信息,也发现代表acl权限的+号已经不复存在
[root@wenhaijin ~]# ll -d /project/
drwxrwx--- 2 root tgroup 4096 Mar 21 00:10 /project/
5.递归设置acl权限
使用-R递归设置文件的acl权限,在linux中,选项一般不分先后顺序,但是这个-R要写在其他选项后面
setfacl -m u:user1:rx -R /project/
[root@wenhaijin ~]# cd /project/
[root@wenhaijin project]# touch file1
[root@wenhaijin project]# touch file2
[root@wenhaijin project]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 21 22:43 file1
-rw-r--r-- 1 root root 0 Mar 21 22:43 file2
###使用-R递归设置文件的acl权限
[root@wenhaijin project]# setfacl -m u:user1:rx -R /project/
[root@wenhaijin project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:user1:r-x
group::rwx
mask::rwx
other::---
###此时该文件下的子文件或子文件夹也具有acl权限
[root@wenhaijin project]# ll
total 0
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file1
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file2
这样设置有个问题就是,我在该目录中新建的文件夹不具备acl权限,可以通过设置默认acl权限解决
[root@wenhaijin project]# touch file3
[root@wenhaijin project]# ll
total 0
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file1
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file2
-rw-r--r-- 1 root root 0 Mar 21 22:50 file3
6.设置默认acl权限(添加d:选项)
setfacl -m d:u:user1:rx -R /project/
#d是default的缩写
[root@wenhaijin project]# setfacl -m d:u:user1:rx -R /project/
[root@wenhaijin project]# touch file4
[root@wenhaijin project]# ll
total 0
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file1
-rw-r-xr--+ 1 root root 0 Mar 21 22:43 file2
-rw-r--r-- 1 root root 0 Mar 21 22:50 file3
-rw-rw----+ 1 root root 0 Mar 21 22:54 file4
这样,新添加的文件file4也具有acl权限,但是这条命令并不对之前已经设置好的权限生效,所以file3依然不具备acl权限
二、文件特殊权限(s和t权限)
三、chattr权限(为了防止误操作)
1.文件的i属性(相当于把文件锁住)
创建文件file5并添加i属性
[root@wenhaijin project]# touch file5
[root@wenhaijin project]# echo helloWorld >> file5
[root@wenhaijin project]# cat file5
helloWorld
###为文件file5添加i属性
[root@wenhaijin project]# chattr +i file5
[root@wenhaijin project]# echo hello >>file5
-bash: file5: Permission denied
从以上结果可以看出,为文件添加i属性后,连root用户都不能修改file5文件了,相当于把file5文件锁住了
查看文件的i属性
[root@wenhaijin project]# lsattr -a file5
###i表示文件具有i属性;e表示文件存储在ext4中,这个不管他
----i--------e- file5
去除文件的i属性
[root@wenhaijin project]# chattr -i file5
###向file5写入helloHello
[root@wenhaijin project]# echo helloHello >>file5
[root@wenhaijin project]# cat file5
helloHello
###查看文件的i属性
[root@wenhaijin project]# lsattr -a file5
-------------e- file5
2.文件夹的i属性(相当于锁住该目录结构,可以防止误删)
给文件夹添加i属性后,可以修改文件夹中的文件内容,但是不能在该文件夹下新增或删除文件
[root@wenhaijin project]# mkdir testdir
[root@wenhaijin project]# cd testdir/
[root@wenhaijin testdir]# touch test1
[root@wenhaijin testdir]# touch test2
[root@wenhaijin testdir]# cd ..
[root@wenhaijin project]# ls
file1 file2 file3 file4 file5 testdir
[root@wenhaijin project]# chattr +i testdir/
###查看该目录的i属性,发现仅仅是该目录具有i属性,目录中的文件不具有i属性
[root@wenhaijin project]# lsattr -a testdir/
-------------e- testdir/test2
----i--------e- testdir/.
-------------e- testdir/test1
-------------e- testdir/..
###向该目录下的文件test1写入内容
[root@wenhaijin project]# echo helloWorld >> testdir/test1
###查看后发现写入成功
[root@wenhaijin project]# cat testdir/test1
helloWorld
###不能新增或删除该目录下的文件
[root@wenhaijin project]# touch testdir/test3
touch: cannot touch `testdir/test3': Permission denied
[root@wenhaijin project]# rm -rf testdir/test1
rm: cannot remove `testdir/test1': Permission denied
删除该目录的i属性后即可新增或删除里面的文件
[root@wenhaijin project]# chattr -i testdir/
[root@wenhaijin project]# touch testdir/file3
[root@wenhaijin project]# rm -rf testdir/file3
3.文件的a属性(把文件中的现有数据锁起来)
给文件设置了a属性,那么不能删除或者修改文件里面的内容,但是可以通过echo向里面追加新的数据,不能进行vi操作
[root@wenhaijin project]# touch wenhaijin
###为文件wenhaijin添加a属性后vi编辑器不能保存
[root@wenhaijin project]# chattr +a wenhaijin
[root@wenhaijin project]# vi wenhaijin
aaa
~
~
~
~
~
"wenhaijin"
"wenhaijin" E212: Can't open file for writing
Press ENTER or type command to continue
###但是可以通过echo向文件追加内容
[root@wenhaijin project]# echo "my name is wenhaijin" >> wenhaijin
[root@wenhaijin project]# cat wenhaijin
my name is wenhaijin
给目录设置a属性后,可以在目录中建立和修改文件(这边的修改是修改文件的内容,不能修改文件名),不允许删除目录中的文件
[root@wenhaijin project]# mkdir testdir2
###为目录testdir2添加a属性
[root@wenhaijin project]# touch testdir2/ test1
[root@wenhaijin project]# rm -rf testdir2/ test1
rm: cannot remove `testdir2': Operation not permitted
四、sudo权限(用来操作系统命令)
首先是由root把本来只能超级用户执行的命令赋予普通用户
然后普通用户才可以通过sudo来操作系统命令
1.不要给普通用户授予vim等命令,权限太大,可以改系统文件,不安全
###使用visudo或者vim /etc/sudoers
[root@wenhaijin ~]# visudo
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
###给用户wenhaijin授予/sbin/shutdown -r now命令的执行权限
wenhaijin ALL=/sbin/shutdown -r now
………
给用户wenhaijin授予/sbin/shutdown -r now命令的执行权限,这边一定要指明命令的绝对路径(可以使用whereis查看命令的绝对路径),命令写得越具体,权限越小,如果这边只写/sbin/shutdown,那么用户wenhaijin可以执行该命令的所有选项
2.查看和执行sudo命令
[root@wenhaijin ~]# su - wenhaijin
[wenhaijin@wenhaijin ~]$ sudo -l
[sudo] password for wenhaijin:
Matching Defaults entries for wenhaijin on this host:
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
User wenhaijin may run the following commands on this host:
(root) /sbin/shutdown -r now
说明用户wenhaijin可以以root的身份来执行/sbin/shutdown -r now命令;
但是不能执行/sbin/shutdown -h,
如果root授予的是/sbin/shutdown权限,就可以执行/sbin/shutdown -h
(注意:用户在执行命令的时候也要写绝对路径)