权限管理
ls -l aa
-rwxrwxrwx:
-表示文件
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限
进程安全上下文:
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同,若相同,则应用属主权限
否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组权限
否则,就只能应用other的权限
权限:
r : read 读
w : write 写
x : excute 执行
文件:
r:可获取文件的数据
w:可修改文件文件的数据
x: 可将此文件运行为进程
目录:
r:可使用ls命令获取其下的所有文件列表
w: 可修改此目录下的文件列表,既创建或删除文件
x:可cd至此目录中,并且可使用 ls -l 来获取所有文件的详细属性信息
mode :rwxrwxrwx
ownership: user,group
权限管理命令:
chmod命令
三类用户:
u: 属主
g: 属组
o: 其他
a: 所有
chmod [OPTION]... MODE[,MODE]... FILE...
MODE
表示法:
赋权表示法:直接操作一类用户的所有权限位:u=,g=,0=,a= , gu=,...
授权表示法:直接操作一类用户的一个权限位: u+,u-,g+,g-,a+,a-,o+,o-
chmod [OPTION]... OCTAL-MODE FILE...
8进制权限位
chmod [OPTION]... --reference=RFILE FILE...
引用参考文件权限到当前文件权限
注意:用户仅能修改属主为自己的那些文件的权限
从属关系管理命令:chown,chgrp
chown命令: (man chown)
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
chgrp命令:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:仅管理员可修改文件的属主和属组
umask:文件权限的反向掩码,遮罩码
文件: 666-umask
目录: 777-umask
注意:之所以文件要用666去减,表示文件默认不能拥有执行权限,如果减得结果中有执行权限,则需要加1
umask :022
666-022=644 (文件加1了)
777-022=755
umask命令:
umask:查看当前的umask
umask MASK:设置umask,仅对当前shell进程有效
install 命令:
install - copy files and set attributes
复制文件并设置属性
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
复制文件
常用选项:
-m ,--mode=MODE: 设定目标文件权限,默认为 775
-o, --owner=OWNER: 设定目标文件属主
-g,--group=GROUP: 设定目标文件属组
mktemp - create a temporary file or directory
mktemp [OPTION]... [TEMPLATE]
常用选项:
-d:创建临时目录
注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来
文件的权限
1,文件的属性
2,文件属性操作
chown 设置文件的所有者
chgrp 设置文件的属组
修改文件的属主:chown
用法:chown [OPTION]... [OWNER][:[GROUP]] FILE...
OWNER 改变属主
OWNER: 改变属主属组都为OWNER
OWNER:GROUP 同时改变属主属组OWNER
:GROUP 改变属组
命令中的:号可以用.替换;
-R 递归,同时递归目录文件的权限
chown [OPTION]... --reference=RFILE FILE...
功能:以文件RFILE的属组属主赋给FILE文件
修改文件的属组:chgrp
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
other:其他,o
每个文件针对每类访问者都定义了三种权限:
r:读,readable
w:写,writable
x:执行,excutable
这三种权限可以用8进制数字来表示
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
例如:
640:rw-r-----
rwxr-xr-x:755
权限分为文件和目录两种
文件:
r:可使用文件查看类工具获取其内容
w:可以修改其内容
x:可以把此文件提请内核启动为一个进程
目录:
r:可以使用ls查看此目录中文件列表
w:可在此目录中创建文件,也可以删除此目录中的文件
x:可以使用ls -l 查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
权限操作命令:chmod
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一类用户的所有权限:u=,g=,o=,ug=,a-...
修改一类用户某位或某些位权限:u+,g+,a-,o-...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE
默认权限:umask:
-
umask值 可以用来保留在创建文件权限
-
新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1
-
新建DIR权限: 777-umask
-
非特权用户umask是 002
-
root的umask 是 022
-
umask: 查看
-
umask #: 设定
-
umask –S 模式方式显示
-
umask –p 输出可被调用
-
全局设置: /etc/bashrc 用户设置:~/.bashrc
666-123=543,所得结果存在执行(奇数)权限,则其权限+1 所以为 644 -rw-r--r--
例如:
1,复制/etc/fstab文件到/var/tmp下,设置文件所有者为 wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限
2,误删除了用户wangcai的家目录,请重建并恢复该用户家目录 及相应的权限属性
cp -r /etc/skel/. /home/wangcai
chown -R wangcai: /home/wangcai
linux文件系统上的特殊权限
特殊权限:
SUID,SGID,Sticky
三种常用权限:r,w,x user,group,other
安全上下文
前提:
进程有属主和属组,文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,进程的属组为发起者所属的组
- 启动为进程后,其进程的属主为发起者,进程的属组为发起者所属的组
- 进程访问文件时的权限,取决于进程的发起者
- 进程的发起者,同文件的属主,则应用文件属主权限
- 进程的发起者,属于文件属组,则应用文件属组权限
- 应用文件其他权限
可执行文件上SUID权限:
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主问源程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:
chmod u+s FILE...
chmod u-s FILE...
非root用户执行 cat /etc/shadow 会提示权限不足
当root用户执行 chmod u+s /usr/bin/cat 时,然后运行,执行成功
发现非root用户临时具有了可执行该文件的权限
可执行文件上SGID权限
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
启动为进程后,其进程的属主为原程序文件的属组
权限设定:
chmod g+s FILE...
chmod g-s FILE...
目录上的SGID权限
默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:
chmod g+s FILE...
chmod g-s FILE...
Sticky位:
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR...
chmod o-t DIR...
此特殊的权限也可以用数字来表示
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
权限放到最前方,比如 chmod 3666 /testdir/abc.txt
权限位映射:
SUID:user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID:group,占据属组的执行权限位
s:属组拥有x权限
S:属组没有x权限
Sticky:other,占据other的执行权限位
t:其他拥有x权限
T:其他没有x权限
设置文件特定的属性
chattr +i 使文件不能删除,改名,更改
chattr +a 文件只能增加
lsattr 显示特定属性
访问控制列表
ACL:Access Control List:可以实现灵活的权限管理
除了文件的所有者,所属组和其他人,可以对更多的用户设置权限
centos 7.0默认创建的xfs和ext4文件系统有ACL功能
centos 7.x之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动添加:
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sbd1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,其他人
可以为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory
getfacl file|directory 查看文件或者目录的acl列表
setfacl -m u:cent:rwx file|directory 使用户cent拥有rwx权限
setfacl -Rm g:sales:rwX directory 使组sales拥有目录下面的rwX权限
setfacl -M file.acl file|directory 通过文件来调用权限
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory 在目录下新建的文件就有该权限
setfacl -x u:wang file |directory 删除用户权限
setfacl -X file.acl directory 通过文件来删除用户权限
ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl 可看到特殊权限:flags
默认ACL权限给了x,文件也不会继承x权限
base ACL 不能删除
setfacl -k dir 删除默认acl权限
setfacl -b file 清除所有acl权限
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
mask 只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限
用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl -m mask::rx file
--set 选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以
setfacl --set u::rw,u:cent:rw,g:;r,o:: -file
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数,但是tar等常见的备份工具是不会保留目录和文件的ACL信息
比如:
getfacl -R /testdir/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
getfacl -R /tmp/dir1
比如:
在/data/testdir里创建的新文件自动属于g1组,组g2的成 员如:alice能对这些新文件有读写权限,组g3的成员如 :tom只能对新文件有读权限,其它用户(不属于 g1,g2,g3)不能访问这个文件夹
chgrp g1 testdir
chmod g+s testdir
setfacl -dm g:g2:rw testdir
setfacl -dm g:g3:r testdir
chmod o= testdir