Linux权限管理

  1. [root@tenor ~]# ll -a
  2. -rw-r--r-- 1 root root 0 Feb 8 17:11 1.txt
- 文件类型 普通文件
rw- 属主拥有的权限 读写权限
r— 属组拥有的权限 只读权限
r— other 拥有的权限 只读权限
1 链接引用数 1
root 文件属主 root
root 文件属组 root
0 文件大小 0
Feb 8 17:11 创建文件日期 2.8 17:11
1.txt 文件名称 1.txt
  • 文件的权限主要针对三类对象进行定义:
owner 属主 u
group 属组 g
other 其他 o
  • 每个文件针对每类访问者都定义了三种权限
r readable 可读
w writeable 可写
x excutable 可执行

文件类型为f(文件):

r 可读 可以使用查看工具获取其内容
w 可写 可以修改其内容
x 可执行 可以把此文件提交给内核启动为一个进程

文件类型为d(目录):

r 可读 可以使用ls相关命令查看目录中的文件列表
w 可写 可以在目录中创建文件和删除文件等操作
x 可执行 可以使用ll相关命令查看目录并可以cd到该目录中

注意:

  • 一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件


ls命令

**

-a 显示除了 ‘.’(当前目录),’..’ 上一级目录之外的所有包含隐藏文件
-dl 显示所在目录的完整属性
[root@tenor ~]# ls -dl
dr-xr-x—-. 7 root root 4096 Feb 8 18:41 .
-dl +[目录名] 查看某一个目录的完整属性,而不是显示目录里面的文件属性
[root@tenor ~]# ls -dl home
drwxr-xr-x 2 root root 4096 Feb 8 18:41 home
-AsSh 显示所有文件的大小
[root@tenor ~]# ls -AsSh
total 48K
4.0K .cache 4.0K .ssh 4.0K .tcshrc 0 1.txt
4.0K .config 4.0K .bash_history 4.0K .cshrc 0 .viminfo
4.0K home 4.0K .bash_profile 4.0K .pydistutils.cfg
4.0K .pip 4.0K .bashrc 4.0K .bash_logout

eg:useradd创建的用户ccy的权限是other,具有x权限,可以执行cd、ls 等操作,进入普通文件
将ccy用户添加到附加组root中,ccy用户可以进入到/root 根目录下

[root@tenor ~]# su ccy
[ccy@tenor root]$ cd /root
bash: cd: /root: Permission denied
[ccy@tenor root]$ cd /home
[ccy@tenor home]$ cd
[root@tenor ~]# usermod -a -G root ccy
[root@tenor ~]# su ccy
[ccy@tenor root]$ cd /root

**

chmod

设置文件权限

[root@localhost ~]# chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...
  or:  chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.# 以参考文件的权限来定义该文件
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'

常用选项:

-R 递归修改
对当前目录下的所有档案与子目录进行相同权限变更(即以递回的方式逐个变更)
-c 若该文档权限确实以及更改,才显示其更改动作
-v 显示权限变更的详细信息

MODE:
u=[rwx] 设置属主权限
g=[rwx] 设置属组权限
o=[rwx] 设置其他权限
a=[ ] 表示以上三者都是

+ 增加权限
- 取消权限
= 唯一设定权限
r 可读取 数字表示法:r =4
w=2
x=1
chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
w 可写入
x 可执行
X 表示只有该文档是子目录或者该文档以及被设定过为可执行
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt

将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 
chmod ug+w,o-w file1.txt file2.txt

将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py

将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
显示详细信息
[root@tenor ~]# chmod ug+w,o+X+x 2.txt -v
mode of ‘2.txt’ retained as 0665 (rw-rw-r-x)

chown

改变文件属主和属组
[root@localhost ~]# chown --help
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...
  or:  chown [OPTION]... --reference=RFILE FILE...

    [OWNER]        指定属主
    [GROUP]        指定属组

ps:

  • 利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;
  • 文件是以空格分开的要改变权限的文件列表,支持通配符。
  • 在更改文件的所有者或者所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变为其他的拥有者。其操作权限一般为管理员。
-c 显示更改部分的信息
-f 忽略错误信息
-v 显示详细的处理信息
-R 处理指定目录及其子目录下的所有文件
-h 影响符号链接而不是任何引用的文件(使用-仅适用于可以更改符号所有权的系统
链接)
—deference 作用于符号链接的指向,而不是链接文件本身
[root@tenor ~]# chown ccy:mxh 1.txt  -c
changed ownership of ‘1.txt’ from ccy:mxh2 to ccy:mxh

chgrp

    修改属组
-c 显示更改部分的信息
-v 显示详细的处理信息
-f 忽略错误信息
[root@tenor ~]# chgrp  mxh 1.txt -v
changed group of ‘1.txt’ from mxh2 to mxh

umask

查看遮掩码
[root@tenor ~]# umask
0022
umask: usage: umask [-p] [-S] [mode]
假设umask为022,则对于一个文件夹的话,它的默认属性为 777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用 666-022=644.

umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
umask = 022 时,新建的目录 权限是755,文件的权限是 644
umask = 077 时,新建的目录 权限是700,文件的权限时 600

文件或目录的遮掩码默认:
file=666 -umask(文件通常预设没有x权限)
dir:777 -umask
设定:umask #

umask *      #可以定义默认创建文件或目录时的默认权限 
[root@tenor lh]# umask
0022
[root@tenor lh]# umask 777
[root@tenor lh]# umask 
0777



[root@tenor lh]# cat /etc/bashrc | grep "umask"
    # By default, we want umask to get set. This sets it for non-login shell.
       umask 002
       umask 022

chattr

更改文件属性
+设置权限 - 取消取消权限

参数 说明
+a filename 只允许以追加方式读写文件
+c filename 允许整个文件能被内核自动压缩、解压
+d filename 在进行文件系统备份的时候,dump程序将忽略这个文件
+i filename 设置成不可变文件,不能被删除、修改、重命名或者链接
+s filename 允许一个文件被安全删除
+S filename 一旦应用程序对这个文件执行了写操作,系统立刻将修改的结果写到磁盘
+u filename 若文件被删除,系统会允许用户在以后恢复这个被删除的文件

lsattr

显示特殊的属性

[root@lhuan ~]# lsattr
-------------e-- ./bt-uninstall.sh
-------------e-- ./1.sh
-------------e-- ./lars
-------------e-- ./install.sh
-------------e-- ./1.txt
-------------e-- ./nginx_09.tar
-------------e-- ./log.txt
-------------e-- ./date.sh
-------------e-- ./3.sh
-------------e-- ./2.sh
[root@lhuan ~]# ls
1.sh  1.txt  2.sh  3.sh  bt-uninstall.sh  date.sh  install.sh  lars  log.txt  nginx_09.tar

##增加特殊权限
[root@lhuan ~]# chattr +i 1.sh

##查看
[root@lhuan ~]# lsattr
-------------e-- ./bt-uninstall.sh
----i--------e-- ./1.sh
-------------e-- ./lars
-------------e-- ./install.sh
-------------e-- ./1.txt
-------------e-- ./nginx_09.tar
-------------e-- ./log.txt
-------------e-- ./date.sh
-------------e-- ./3.sh
-------------e-- ./2.sh

Linux特殊权限

 文件的特殊权限:

        - SUID
        - SGID
        - SBIT

SUID

借出程序所有者的权限 4 在umask的第一位进行设置
SUID权限作用:
其他用户没有权限修改/etc/passwd文件,但是root用户可以将w权限赋予给其他 用户去修改/etc/passwd命令

[root@tenor lh]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
属主的执行权限x权限位: s 有SUID权限

[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
由上述可知 同一用户或者其他人都可以调用passwd命令

passwd命令需要修改/etc/shadow文件

[root@tenor lh]# ll /etc/shadow
---------- 1 root root 690 Feb  8 16:53 /etc/shadow
[root@tenor lh]# ll /etc/passwd
-rw-r--r-- 1 root root 1178 Feb  8 16:53 /etc/passwd
问题:
1. /etc/passwd文件仅仅root用户拥有w权限,其他用户没有
2. 其他用户虽然可以调用passwd命令,但是无法写入到/etc/passwd文件
现象:
其他用户可以调用passwd文件,但是无法写入到/etc/passwd文件中

NOTE :

     - SUID权限指对二进制程序有效
     - 执行者必须要有x权限
     - 仅在本程序中拥有改变权限
     - 属主拥有sx权限,即可将自己的权限(r,w)借给其他用户使用,但前提必须要拥有x权限

SGID

借出用户组的权限 2

NOTE:

     - 对二进制程序和目录有效
     - 执行者拥有x权限
     - 执行过程中执行者暂时拥有用户组权限

作用:
这种权限特性可以在同一个用户组的多个用户拥有共同的目录,在创建目录的时候该用户组的所有用户具有相同的权限。
一个属组中的用户在拥有SGID权限的目录下创建文件,属组都是该目录的所属组

[root@tenor ~]# useradd lars
[root@tenor ~]# useradd mj
[root@tenor ~]# ll /home/
total 8
drwx------ 2 lars lars 4096 Feb 10 19:11 lars
drwx------ 2 mj   mj   4096 Feb 10 19:12 mj
[root@tenor ~]# chmod 2770 /home/mj   借出mj用户组的权限
[root@tenor ~]# ll /home
total 8
drwx------ 2 lars lars 4096 Feb 10 19:11 lars
drwxrws--- 2 mj   mj   4096 Feb 10 19:12 mj
[root@tenor ~]# usermod -aG  mj lars  给mj添加到附加组lars  
[root@tenor ~]# su lars    
[lars@tenor root]$ cd /home/lars
[lars@tenor ~]$ touch 1.txt
[lars@tenor ~]$ ll
total 0
-rw-rw-r-- 1 lars lars 0 Feb 10 19:15 1.txt
[lars@tenor ~]$ cd /home/mj
[lars@tenor mj]$ touch 1.txt
[lars@tenor mj]$ ll
total 0
-rw-rw-r-- 1 lars mj 0 Feb 10 19:16 1.txt

Sticky

对目录有效 1

tmp有这个权限
[root@tenor lars]# ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Feb 10 14:38 /tmp/

**

  - 当前用户在此目录拥有r,w权限,即具有写入和读权限
  - 用户在该目录中创建文件,只有自己和root可以删除该文件
  - 用户默认不允许对其他用户的文件进行操作

ACL权限

ACL 访问控制列表
主要目的是再提供传统的owner group 的 r w x 权限更加细化了用户文件权限
ACL可以针对某一个使用者,某一个文件或目录来进行 r w x 权限规范,对于需要特殊权限的使用状态非常有帮助
传统情况下,user用户只拥有r权限,acl权限的设定让user用户具有w权限,所以可以针对某一个文件进行编辑操作。

setfacl

设定权限

[root@localhost ~]# setfacl --help
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  - 常用选项
-m 添加acl设定参数
-x 删除acl设定参数
从文件的ACL中删除命名组条目
-b 移除所有的ACL设定参数
-R 递归添加acl设定参数
-d 添加默认按错了设定参数
  - 常用使用方式
删除用户acl权限设置 setfacl -x u:[username]:[mode] g:[group]:[mode] filename
删除组acl权限设置 sefacl -x g:groupname file
删除整个acl权限 sefacl -b file
  - 实例1:针对用户的设定方式

设定规范:u:username:power

  - 实例2:针对用户组的设定方式

设定规范:g:groupname:power

针对用户
1.设定lars对1.txt有rwx权限
setfacl -m u:lars:rwx 1.txt
2.设定lars对mxh目录下所有文件有rwx权限
setfacl -R -m u:lars:rwx mxh
3.去掉user对testdirectory的x权限??
[root@tenor ~]# setfacl -x  u:lars  mxh
不能只去掉一个权限
4.去掉所有acl权限
setfacl -b 


[root@tenor ~]# setfacl -R -m u:lars:rwx mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
user:lars:rwx
group::r-x
mask::rwx
other::r-x

[root@tenor ~]# setfacl -b  mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

5.为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
setfacl -d -m u:user:rwx testdirectory/

针对用户组
1. 给1.txt文件添加hhhh组rw权限设定
[root@tenor ~]# setfacl -m  g:hhhh:rw  1.txt
[root@tenor ~]# getfacl 1.txt
# file: 1.txt
# owner: lars
# group: mxh
user::-wx
user:lars:rwx
group::-wx
group:hhhh:rw-
mask::rwx
other::--x

getfacl

查看acl 权限设定

[root@tenor ~]# mkdir mxh
[root@tenor ~]# useradd lars
[root@tenor ~]# setfacl -m  u:lars:rwx  mxh
[root@tenor ~]# groupadd hhhh
[root@tenor ~]# setfacl -m  g:hhhh:rwx  mxh
[root@tenor ~]# getfacl mxh
# file: mxh
# owner: root
# group: root
user::rwx
user:lars:rwx    #针对用户具有rwx权限
group::r-x
group:hhhh:rwx  #针对group1zu具有rw权限        
mask::rwx
other::r-x     # 如果没有其他设定,默认属于other