Linux用户及权限管理

linux用户,组管理介绍

linux操作系统对多用户管理是非常繁琐的,所以用组的概念来管理用户就变得简单了,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户,Linux系统用户时根据用户ID来识别的,默认ID长度为32位,默认ID编号从0开始(其实就是root),但是为了和老式系统兼容,用户ID限制在60000以下,linux用户总共分为3种:

  • root用户(ID 0)
  • 系统用户(ID 1~999)
  • 普通用户(ID 1000以上)

linux操作系统用户的特点如下:

  • 每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名
  • 每个用户属于一个主组,属于一个或者多个附属组,一个用户最多有31个附属组
  • 每个组拥有一个组ID
  • 每个进程以一个用户身份运行,该用户可对进程拥有资源控制的权限
  • 每个可登陆用户拥有一个指定的shell环境

linux用户在操作系统中可以进行日常管理和维护,涉及的相关配置文件如下:

  • /etc/passwd:保存用户信息
  • /etc/shadow:保存用户密码(以加密形式保存)
  • /etc/group:保存组信息
  • /etc/login.defs:用户属性,密码过期时间,密码最大长度等限制
  • /etc/default/useradd:显示或更改默认的useradd配置文件

linux系统中的每个文件或者文件夹都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,使用passwd命令可以修改当前用户密码。

1
2
[root@localhost ~]# id lizhifeng
uid=1000(lizhifeng) gid=1000(lizhifeng) 组=1000(lizhifeng)

linux用户管理

如果创建新用户,可以使用命令useradd,执行命令 useradd lizf 即可创建lizf用户,同时会创建一个同名的组lizf,默认该用户属于lizf组

执行useradd lizf会根据以下操作步骤进行:

  • 在/etc/passwd文件中添加lizf用户信息
  • 如使用passwd命令创建密码,密码会被保存在/etc/shadow中
  • 为lizf创建一个家目录/home/lizf
  • 将/etc/skel中的.bash开头的文件复制到/home/lizf家目录
  • lizf组信息保存在/etc/group配置文件中

/etc/passwd文件介绍

复制代码
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
lizhifeng:x:1000:1000::/home/lizhifeng:/bin/bash
mysql:x:997:995:MySQL server:/var/lib/mysql:/sbin/nologin
zabbix:x:996:994:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
#/etc/passwd存放用户的信息,用冒号分隔,一共分为七个部分
第一列为用户名
第二例为用户的密码信息,x表示密码存放于/etc/shadow文件中
第三列为用户的UID
第四列为用户的GID
第五列为用户的描述,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
第六列为用户的家目录
第七列为用户登陆的shell,nologin代表禁止登陆(伪用户)
伪用户解释:用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。系统中有一类用户称为伪用户(psuedousers),这些用户在Linux /etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。常见的伪用户如下所示。
bin              拥有可执行的用户命令文件
sys              拥有系统文件
adm            拥有帐户文件
nobody       NFS使用
/etc/passwd
复制代码

 

在使用useradd命令时,可以添加如下参数:

1
2
3
4
5
6
7
8
-d:新账户的主目录
-e:新账户的过期日期 MM/DD/YY
-g:新账户属组的名称或ID
-r:创建一个系统账户
-s:新账户的登录shell
-u:新账户的UID
-G:新建账户的附加组
-c, --comment 注释

案例:

此外我们可以用chage命令去查看用户状态

1
2
3
4
5
6
7
8
[root@localhost ~]# chage -l lizhifeng
最近一次密码修改时间                                    :7月 12, 2021
密码过期时间                                    :从不
密码失效时间                                    :从不
帐户过期时间                                            :从不
两次改变密码之间相距的最小天数          :0
两次改变密码之间相距的最大天数          :99999
在密码过期之前警告的天数        :7

我们可以编辑/etc/login.defs进行修改 ,那么后建立的账户就会遵循这个配置进行创建

复制代码
[root@localhost ~]# cat /etc/login.defs | egrep -v "^#|^$"
MAIL_DIR        /var/spool/mail
PASS_MAX_DAYS   99999       #密码过期时间,99999代表永不过期
PASS_MIN_DAYS   0                 
PASS_MIN_LEN    5                 #密码最小长度
PASS_WARN_AGE   7               #在密码过期之前警告的天数
UID_MIN                  1000        #普通用户uid从1000开始
UID_MAX                 60000       #普通用户最大uid值
SYS_UID_MIN               201      #系统用户uid开始值
SYS_UID_MAX               999      #系统用户uid最大值
GID_MIN                  1000         #普通用户gid从1000开始
GID_MAX                 60000        #普通用户gid从1000开始
SYS_GID_MIN               201       #系统用户gid从201开始
SYS_GID_MAX               999       #系统用户gid最大值999
CREATE_HOME     yes                   #自动在/home/创建家目录
UMASK           077                       #家目录默认权限是700
USERGROUPS_ENAB yes              #自动创建用户组
ENCRYPT_METHOD SHA512 
复制代码

 如果用户已经被创建,我们想修改他的用户信息可以用

1
2
3
4
5
chage -I 5 USERNAME:密码5天后失效时间
chage -M 30 USERNAME:密码30天后过期
chage -W 3 USERNAME:在密码过期之前3天警告
chage -E 11/15/19 USERNAME:在19年11月15日账户过期
chage -l USERNAME:查看用户过期时间,密码过期时间等

linux组管理

linux组管理有如下特点

  • 每个组有一个组ID
  • 组信息保存在/etc/group中
  • 每个用户至少拥有一个主组,最多可以拥有31个附属组
  • 通过命令groupadd,groupdel,groupmod来对组进行管理

/etc/group文件解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# head /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
每一个冒号分隔一个内容
第一列表示组名
第二列表示组密码,x表示组密码放在/etc/shadow
第三列表示组ID
第四列表示组成员 

groupadd用法如下:

groupadd:创建一个group1的组

1
[root@localhost ~]# groupadd group1

-g :指定创建的组的ID

1
2
[root@localhost ~]# groupadd group2 -g 1500  
#创建一个group2的组,并指定组ID为1500

-r:创建一个系统组

1
2
3
4
5
6
[root@localhost ~]# groupadd -r group3
#创建一个系统组group3
[root@localhost ~]# cat /etc/group | grep group
group1:x:1001:
group2:x:1500:
group3:x:991:

groupmod用法如下:

-n :修改组名

1
2
[root@localhost ~]# groupmod -n group200 group1
#将group1组名改为group200

-g :修改组ID号

1
2
3
4
5
6
[root@localhost ~]# groupmod -g 4000 group2
#将group2组ID修改为4000
[root@localhost ~]# cat /etc/group | grep group
group2:x:4000:
group3:x:991:
group200:x:1001:

groupdel 删除组

1
2
3
4
5
[root@localhost ~]# groupdel group200      
#删除group200
[root@localhost ~]# cat /etc/group | grep group
group2:x:4000:
group3:x:991:

 

linux用户及组案例

useradd主要用于新建用户,而用户创建完毕,可以使用usermod来修改用户及组的属性。

usermod参数:

1
2
3
4
5
6
7
8
-c, --comment 注释                GECOS 字段的新值
-e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
-g, --gid GROUP                       强制使用 GROUP 为新主组
-G, --groups GROUPS              新的附加组列表 GROUPS
-L, --lock                                锁定用户帐号
-s, --shell SHELL                     该用户帐号的新登录 shell
-u, --uid UID                          用户帐号的新 UID
-U, --unlock                           解锁用户帐号

案例:

userdel

主要是用来删除用户的

1
2
3
userdel lizhifeng:保留用户的家目录
userdel -r lizhifeng:删除用户及用户家目录,如果用户登陆系统则无法删除
userdel -rf lizhifeng:强制删除用户及该目录的家目录,无论是否登录

 用户密码的管理(最常见的运维操作)

/etc/shadow 详解

复制代码
[root@localhost ~]# cat /etc/shadow           
root:$6$78f36qtpVNN.SM6n$Se8FiSLr3VL.QmPMOhvu9dFow1TRJnwlbzpCZDY9JmpFpG8AHlBmiXTuaCayNbE8tEu6U78QnpHAG406r4T2X0::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
/etc/shadow存放的是密码信息,每⼀列密码信息都被冒号分割开来。
第⼀列表示存放的是哪个⽤户的密码信息(username)
第⼆列存放的就是密码,该密码并不是明⽂的,⽽是使⽤算法⽣成的,算法在/etc/login.defs中有指定。
第三列存放的是上次修改密码的时间
第四列存放的是密码最⼩有效期,如果是0,就可以⽆限次的不考虑间隔的修改密码,如果是1,就表示,修改完密码之后,必须使⽤该密码⼀天才能再次修改
第五列存放的是密码的最⼤有效期,默认是99999,表示密码99999天就会失效。如果该数字是3,就表示,3天后密码会过期,如果你想继续使⽤,必须要在密码到期之前修改。
第六列存放的是密码到期前提前多少天警告的时间信息,如果该数字为7,就表示密码到期之前的7天就会发出警告,告诉你密码即将过期。
第七列表示⽤户密码到期后宽限⽇期,如果该数字是2,就表示密码到期后,你还能使⽤该密码2天,如果2天到了,你还没修改或更新密码,密码就失效了。
第⼋列表示账号失效⽇期,第⼋列的⽇期就是账号的失效⽇期。如果到了第⼋列的时间,账号直接失效。不可登录。
第九列保留
复制代码

使用passwd命令控制用户的密码信息

复制代码
  -k, --keep-tokens       保持身份验证令牌不过期
  -d, --delete            删除已命名帐号的密码(只有根用户才能进行此操作)
  -l, --lock              锁定指名帐户的密码(仅限 root 用户) 等于usermod -l
  -u, --unlock            解锁指名账户的密码(仅限 root 用户),等于usermod -U
  -e, --expire            终止指名帐户的密码(仅限 root 用户)
  -f, --force             强制执行操作
  -x, --maximum=DAYS      密码的最长有效时限(只有根用户才能进行此操作)
  -n, --minimum=DAYS      密码的最短有效时限(只有根用户才能进行此操作)
  -w, --warning=DAYS      在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
  -i, --inactive=DAYS     当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
  -S, --status            报告已命名帐号的密码状态(只有根用户才能进行此操作)
  --stdin                 从标准输入读取令牌(只有根用户才能进行此操作)
复制代码

修改用户密码的几种方式:

passwd  + username

[root@localhost ~]# passwd lizhifeng
更改用户 lizhifeng 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

echo “PASSWD” | passwd --stdin USERNAME

[root@localhost ~]# echo "12345678" | passwd --stdin lizhifeng
更改用户 lizhifeng 的密码 。
passwd:所有的身份验证令牌已经成功更新。

echo testuser:Newpasswd|chpasswd

[root@localhost ~]# echo  root:12345|chpasswd

使用chage命令管理用户密码信息

复制代码
  -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”
  -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”
  -h, --help                    显示此帮助信息并推出
  -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态
  -l, --list                    显示帐户年龄信息
  -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”
  -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”
  -R, --root CHROOT_DIR         chroot 到的目录
  -W, --warndays 警告天数       将过期警告天数设为“警告天数”
复制代码

权限管理

 linux权限是操作系统用来限制对方访问资源的机制,权限一般分为读,写,执行,系统中每一个文件都拥有特定的权限,所属用户和所属组,通过这样的机制来限制哪些用户或组可以对特定文件进行相应的操作

linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限越大

权限 对文件的影响 对目录的影响
r(读)4 可读取文件内容 可列出目录内容
w(写)2 可修改文件内容 不能查看目录内容,不在目录中创建文件,不能cd到目录中
x(执行)1 可作为命令执行 可以进入到目录,但是不能查看也不能创建删除
复制代码
[root@localhost ~]# ls -l /etc/
总用量 1128
-rw-r--r--.  1 root root       16 1月  27 2021 adjtime
-rw-r--r--.  1 root root     1518 6月   7 2013 aliases
-rw-r--r--.  1 root root    12288 1月  27 2021 aliases.db
drwxr-xr-x.  2 root root      280 2月   1 2021 alternatives
-rw-------.  1 root root      541 4月  11 2018 anacrontab
drwxr-xr-x.  3 root root       51 1月  29 2021 ansible
-rw-r--r--.  1 root root       55 10月 30 2018 asound.conf
drwxr-x---.  3 root root       43 2月   1 2021 audisp
drwxr-x---.  3 root root       83 2月   1 2021 audit
drwxr-xr-x.  2 root root       38 2月   1 2021 bash_completion.d
-rw-r--r--.  1 root root     2853 10月 31 2018 bashrc
drwxr-xr-x.  2 root root        6 10月 31 2018 binfmt.d
-rw-r--r--.  1 root root       38 11月 23 2018 centos-release
-rw-r--r--.  1 root root       51 11月 23 2018 centos-release-upstream
drwxr-xr-x.  2 root root        6 8月   4 2017 chkconfig.d
-rw-r--r--.  1 root root     1108 4月  13 2018 chrony.conf
-rw-r-----.  1 root chrony    481 9月  15 2017 chrony.keys
drwxr-xr-x.  2 root root       21 1月  27 2021 cron.d
drwxr-xr-x.  2 root root       42 1月  27 2021 cron.daily
-rw-------.  1 root root        0 4月  11 2018 cron.deny
drwxr-xr-x.  2 root root       22 6月  10 2014 cron.hourly
drwxr-xr-x.  2 root root        6 6月  10 2014 cron.monthly
-rw-r--r--.  1 root root      451 6月  10 2014 crontab

复制代码

如何针对一个文件修改权限

chmod命令

u代表用户user

g代表组group

o代表其他other

r代表4

w代表2

x代表1

当给一个用户赋予权限时可以用字母,也可以用数字来操作

[root@localhost ~]# touch check.sh
[root@localhost ~]# ls -l check.sh 
-rw-r--r--. 1 root root 0 8月  11 22:14 check.sh
[root@localhost ~]# chmod 777 check.sh 
[root@localhost ~]# ls -l check.sh 
-rwxrwxrwx. 1 root root 0 8月  11 22:14 check.sh
#给check.sh赋予所有人读写执行的权限

[root@localhost ~]# chmod u=rwx,g=rw,o=r check.sh
[root@localhost ~]# ls -l check.sh
-rwxrw-r--. 1 root root 0 8月 11 22:14 check.sh

#给check.sh赋予拥有者读写执行,所属组读写,其他人读的权限

chown命令

chown命令主要用于修改文件或目录所属主和所属组

你想理解一个文件的权限,你必须要知道,一个文件的权限和文件的owner和group息息相关。
如何修改文件的owner和group
[root@localhost ~]# ls -l check.sh                
-rwxrw-r--. 1 root root 0 8月  11 22:14 check.sh
[root@localhost ~]# chown lizhifeng check.sh 
[root@localhost ~]# ls -l check.sh           
-rwxrw-r--. 1 lizhifeng root 0 8月  11 22:14 check.sh
#修改文件的属主为lizhifeng用户,也就输说lizhifeng这个用户对check.sh有rwx的权限,属于root组的用户对这个文件有rw的权限,其他用户对这个文件有r的权限
[root@localhost ~]# chgrp maint2 check.sh 
[root@localhost ~]# ls -l check.sh        
-rwxrw-r--. 1 lizhifeng maint2 0 8月  11 22:14 check.sh
#修改文件的数组为maint2,相对于上面来说,只有属于maint2这个组的用户才能对这个文件有rw权限

Linux的三种特殊权限

1. set UID

set UID可用于拥有可执行权限的普通文件,当文件被设置了set UID,任何人执行的时候都会被临时赋予文件拥有者的权限。
[lizf@BJ_Ansible_01 ~]$ ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /bin/passwd

当文件的权限拥有者位置出现s或者是S的时候,说明该文件有特殊权限,被设置了set UID 当用普通用户执行的时候会临时赋予root的用户权限。

chmod u+s FILE

2. set GID

set GID特殊权限应用于目录文件,当一个目录设置set GID特殊权限时, 任何用户在该目录下创建文件时,文件的所属组都会变成被设置set GID的那个目录的所属组。

在文件的所属组的权限列的执行权限位置,如果该位置执行位置变为s或者时S时,表示该文件目录被设置了set GID的特殊权限。

chmod g+s FILE

3.Sticky(粘位置)

针对于有写权限的目录文件,当一个有写权限的目录文件被设置了sticky特殊权限时,那么任何人在该目录下创建的文件只有目录的所有者和root可以删除。该特殊权限位,限制了目录的写权限。

如果其他人的权限列执行位置被设置成t或T,表示改目录文件被设置了Sticky特殊权限。

Linux的ACL权限

正常来说一个文件的权限就是针对user、group、other设置的,当这个文件想对other中的某一个人开放或者限制权限时就需要设置acl权限。

ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助

ACL的操作

当我们在看某个文件是否支持ACl权限时,首先要看文件所在的分区是否支持ACL权限。(xfs文件系统格式默认支持ACL权限)

临时开启分区ACL权限

mount -o remount,acl /

 重新挂载根分区,并挂载加入 acl 权限。注意这种命令开启方式,如果系统重启了,那么根分区权限会恢复到初始状态。

永久开启分区ACL权限,修改/etc/fstab文件

 重新挂载文件系统或重启系统,使得修改生效

mount -o remount /

设置文件的ACL权限

setfacl -m u:用户名:权限 指定文件名或目录

-m, --modify=acl:修改文件或目录的扩展ACL设置信息,如果是给予用户 ACL 权限,则使用"u:用户名:权限"格式赋予;如果是给予组 ACL 权限,则使用"g:组名:权限" 格式赋予
-x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, --remove-all:删除所有的扩展的ACL设置信息
-k, --remove-default:删除缺省的acl设置信息
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
-d, --default:设置默认的ACL设置信息(只对目录有效)
-R, --recursive:操作递归到所有子目录和 文件

查看文件或目录的ACL权限

getfacl 文件或目录名

案例:首先创建三个用户lsj、cjk、lizf,然后再创建一个文件test.txt。查看test的文件属性ls -l test.txt

[root@localhost ~]# touch test.txt
[root@localhost ~]# ls -l 
总用量 4
-rw-------. 1 root root 1400 1月  29 2020 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 8月  12 21:28 test.txt

test.txt对于lsj、cjk、lizf三个用户只有r权限,如果就想让lizf用户拥有对test.txt文件的r、w权限时,就需要对lizf设置ACL权限。

复制代码
[root@localhost ~]# setfacl -m u:lizf:rw test.txt
-m 表示的就是修改文件的权限
u 代表针对用户设置特殊权限,lizf代表的就是用户名
lizf后面的 rw代表的就是针对lizf用户设置的特殊权限
[root@localhost ~]# ls -l test.txt 
-rw-rw-r--+ 1 root root 0 8月  12 21:28 test.txt

一旦对文件设置了ACl权限,那么该文件的9列权限后就会变成+,此时该文件表面上看到的权限不一定生效,想要查看到文件的真是权限,就要用到getfacl来查看

复制代码
[root@localhost ~]# getfacl test.txt 
# file: test.txt     file 文件名
# owner: root        owner 文件的拥有者
# group: root        group 文件所属组
user::rw-            文件拥有者的权限
user:lizf:rw-        针对用户lizf设置的权限 
group::r--           文件拥有组的权限
mask::rw-            代表了ACL可以设置的最大权限
other::r--           表示其他的用户对文件的权限,例如lsj、cjk和lizf针对这个文件都是属于其他用户,lsj和cjk这两个用户只有对文件的r权限,但是lizf这个用户就有r、w权限。
复制代码

 

复制代码

如果想让lsj这个账户对这个test.txt啥权限也没有,也需要对lsj设置ACL权限

复制代码
[root@localhost ~]# setfacl -m u:lsj:--- test.txt   
[root@localhost ~]# getfacl test.txt             
# file: test.txt
# owner: root
# group: root
user::rw-
user:lizf:rw-
user:lsj:---
group::r--
mask::rw-
other::r--

[root@localhost ~]# su lsj
[lsj@localhost root]$ cat test.txt
cat: test.txt: 权限不够
复制代码

如果想要对一个用户解除ACL权限则用 -x参数,比如解除lsj的特殊权限。

复制代码
[root@localhost ~]# setfacl -x u:lsj test.txt 
[root@localhost ~]# getfacl test.txt          
# file: test.txt
# owner: root
# group: root
user::rw-
user:lizf:rw-
group::r--
group:wheel:---
mask::rw-
other::r--
复制代码

如果想要解除所有用户的ACL权限则用-b参数

[root@localhost ~]# setfacl -b test.txt        
[root@localhost ~]# getfacl test.txt    
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

针对目录的ACL权限

针对目录的ACL权限,不在于访问控制,而是在于目录下创建文件的ACL权限继承,我们对目录设置ACL的权限是,在这个目录下创建一个新的文件时自带ACL权限,这样就不用再手动去设置了。

复制代码
[root@localhost ~]# setfacl -m d:u:cjk:--- abc/
[root@localhost ~]# getfacl abc/
# file: abc/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx         
default:user:cjk:---
default:group::r-x
default:mask::r-x
default:other::r-x
复制代码

default开头的所有字段,表示在该目录下创建的文件会自带ACL权限

文件的特殊权限之chattr、lsattr用法

在Linux中,有一些系统文件,对系统的运行有着至关重要的作用,如/etc/fstab等,一般不允许修改,这个时候,我们可以赋予文件/目录r--------的权限;然而,还有一个更为简单有效的命令chattr可以实现该功能,类似于chmodchmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的

特殊权限的要求:

1
2
3
4
5
6
所支持的文件系统包括:ext2、ext3、ext4和xfs
一般要求内核版本不低于2.2(查看版本的命令如下):
uname -a
lsb_release -a
不能保护 / /tmp /dev /var目录
chattr 只能由root用户使用

chattr参数

a :即append,设定该参数后,只能向文件中添加数据,而不能删除;
c :即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
i :设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容;对目录
s :保密性地删除文件或目录,即硬盘空间被全部收回
u :与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.

lsattr 查看文件的特殊权限

示例:

  首先,我使用root身份新建一个文件:

[root@niesh test]# ll
总用量 0
-rw-rw-r--. 1 root niesh 0 7月  31 20:27 abc

然后,我给该文件增加 i 权限:

[root@niesh test]# chattr +i abc
[root@niesh test]# lsattr abc
----i----------- abc

然后,我尝试增加内容、删除文件和修改文件名:

[root@niesh test]# echo 1234 >> abc
bash: abc: 权限不够
[root@niesh test]# rm -f abc
rm: 无法删除"abc": 不允许的操作
[root@niesh test]# mv abc bcd
mv: 无法将"abc" 移动至"bcd": 不允许的操作

以上均失败,由此验证当给文件加上i的特殊权限时,对文件锁定,不能执行增删改查命令,想要恢复就要执行chattr -i 

1
2
3
[root@niesh test]# chattr -i abc
[root@niesh test]# lsattr abc
---------------- abc

修改以上文件的权限为 a :

[root@niesh test]# chattr +a abc
[root@niesh test]# lsattr abc
-----a---------- abc

对 abc文件进行操作:

[root@niesh test]# echo 1111 >> abc
[root@niesh test]# cat abc
1111
[root@niesh test]# rm -f abc
rm: 无法删除"abc": 不允许的操作
[root@niesh test]# mv abc bcd
mv: 无法将"abc" 移动至"bcd": 不允许的操作

由以上可以看出,只能增加文件内容,不能进行其他的操作,想要恢复执行chattr -a 

[root@niesh test]# chattr -a abc
[root@niesh test]# lsattr abc
---------------- abc

系统缺省权限设置umask

[root@localhost ~]# umask
0022

一般来说umask只看后3

创建目录的缺省权限是777

创建普通文件的权限是666

正常来说任何用户创建目录后,该目录的权限是rwxrwxrwx

任何用户创建普通文本文件,该文件的权限是rw-rw-rw-

普通文件如果带上执行权限,是不安全的. umask能帮助用户修改创建文件的默认权限。

 

umask的缺省权限设置需要将umask转换成权限,再去和缺省权限做减法,才能得到正确的创建文件权限。

创建目录的最终权限,就是目录777减去umask的后3位,root创建的目录权限应该是777-022=755

创建普通文件的最终权限,就是666减去umask的后3位,root创建的普通文件权限应该是666-022=644 

 普通用户创建的目录权限应该是777-002=775 普通用户创建的文件权限应该是666-002=664

umask可以修改的 

[root@localhost ~]# umask 0027
[root@localhost ~]# umask 
0027

不过这只是临时修改,想要永久修改就要写入配置文件login.defs

 

posted @   李志锋  阅读(1580)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示