Linux运维知识之第六章 linux用户组和权限管理
小标 2018-12-07 来源 : 阅读 781 评论 0

摘要:本文主要向大家介绍了Linux运维知识之第六章 linux用户组和权限管理,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之第六章 linux用户组和权限管理,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

用户组和权限管理
介绍安全3A
?资源分派:
Authentication:认证
Authorization:授权
Accouting|Audition:审计
用户user
?令牌token,identity
   登陆成功后拿到令牌。
?Linux用户:Username/UID
?管理员:root, 0
?普通用户:1-65535
系统用户:1-499, 1-999(CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)
交互式登录
组group
?Linux组:Groupname/GID
?管理员组:root, 0
?普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
其实在Linux中并不分成管理员组和用户组,主要分主组和附加组。
安全上下文
?Linux安全上下文
运行中的程序:进程(process)
以进程发起者的身份运行:
root: /bin/cat
mage: /bin/cat
进程所能够访问资源的权限取决于进程的运行者的身份
组的类别
?Linux组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组(并且主组不能删除)
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组
[root@localhost ~]#id  postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
查看用户的id和主组和附加组,一个组已经成为了某个账号的主组,这个组是不能删除的。
用户和组的配置文件
?Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性




passwd文件格式
?login name:登录用名(wang)
?passwd:密码(x)
?UID:用户身份编号(1000)
?GID:登录默认所在组编号(1000)
?GECOS:用户全名或注释
?home directory:用户主目录(/home/wang)
?shell:用户默认使用shell (/bin/bash)
[root@localhost ~]#whatis passwd
passwd (1)           - update user‘s authentication tokens
sslpasswd (1ssl)     - compute password hashes
passwd (5)           - password file
查看/etc/passwd帮助,是在第5章。
[root@localhost ~]#man 5 passwd
PASSWD(5)             Linux Programmer‘s Manual            PASSWD(5)
 
NAME
       passwd - password file
 
DESCRIPTION
       The /etc/passwd file is a text file that describes user login
       accounts for the system.
name:password:UID:GID:GECOS:directory:shell
查看/etc/passwd的帮助,每个字段表示的意思如上面最后一行描述所示,字段间用冒号隔开,其中CECOS是用户全名或注释,其他的应该都是可以理解的。
[root@localhost ~]#getent 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
[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
上面两条命令都能查看passwd内容,第一条命令方便点。
[root@localhost ~]#getent passwd  sunan
sunan:x:1000:1000:sunan:/home/sunan:/bin/bash
想查看某个用户后面直接加上用户名即可,这就是上面说的方便。
[root@localhost ~]#pwunconv
[root@localhost ~]#getent passwd  sunan
sunan:$6$5ROKagTj/2yRGbuE$zwaSMvClYng4.oIE0fY90cY2SWL4HoIzZ.3da8x0BE1wJSn64fAXbS1E9leXiYvQ04tgv/Hf9E2lAl7BTOW/N0:1000:1000:sunan:/home/sunan:/bin/bash
使用上面命令是使/etc/shadow中的密码回归到/etc/passwd中,但是这样不安全,并且使得/etc/shadow文件丢失。同时对修改用户名,不建议在passwd中直接改,
因为不止passwd中有用户名,shadow中也有,这样就需要改多个文件。尽量使用命令改用户名,这样涉及这个用户的所有文件都可以修改掉。
[root@localhost ~]#cat /etc/shadow
cat: /etc/shadow: No such file or directory
[root@localhost ~]#pwconv        
[root@localhost ~]#cat /etc/shadow
root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
再回到系统默认的文件,执行pwconv即可。
root@localhost ~]#vim /etc/passwd
root:x:1000:0:root:/root:/bin/bash
sunan:x:0:1000:sunan:/home/sunan:/bin/bash
gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
"/etc/passwd" 42L, 2168C written
修改root UID为1000,sunan UID为0这样孙安就拥有了超级管理员权限。如果是root和sunan的UID都不为0了怎么办,这样就没人拥有管理员权限了,其实只要有一个终端还没退出管理员登陆,就可以形式管理员权限,因为在登录的时候就已经授予管理员权限了,只要不退出就一直拥有管理员权限。创建个快照,我们试一试没有管理员系统会发生什么。
root@localhost ~]#vim /etc/passwd
root:x:1000:0:root:/root:/bin/bash
sunan:x:0:1000:sunan:/home/sunan:/bin/bash
gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
"/etc/passwd" 42L, 2168C written
重启发现启动不了了,重启进入菜单选项,centos7上选择第一项按e键,进入编辑界面。
 
 
在上图的最后添加 init=/bin/sh
 
最后的提示可以看到敲Ctrl+x启动生效
 
上图可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。然后,修改/etc/passwd文件中的root的UID为0,exit退出重启即可。
Centos6.9上:
 
在上面的最后空格添加 init=/bin/bash 然后敲回车
 
可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。
 
通过nano修改root的UID为0,exit退出重启。
[root@localhost ~]#chfn sunan
Changing finger information for sunan.
Name [sunan]: sunan
Office []: opt
Office Phone []: 12
Home Phone []: 12
Finger information changed.
[root@localhost ~]#getent passwd sunan
sunan:x:1000:1000:sunan,opt,12,12:/home/sunan:/bin/bash
chfn修改用户的信息说明,可以看到用户信息已经修改
[root@localhost ~]#finger sunan
Login: sunan                            Name: sunan
Directory: /home/sunan                  Shell: /bin/bash
Office: opt, 12                         Home Phone: 12
Last login Thu Nov 16 10:29 (CST) on pts/1
No mail.
No Plan.
使用finger查看信息,finger默认没有安装,需要手工进行安装。
一般不推荐直接改文件,可能很多的相关文件没有一起改过来导致许多问题。推荐使用命令改文件。
[root@localhost ~]#usermod -d /a sunan
[root@localhost /]#getent passwd sunan
sunan:x:1000:1000:sunan,opt,12,12:/a:/bin/bash
usermod -d 修改文件的家目录为/a.
[root@localhost /]#usermod -s /bin/csh sunan
[root@localhost /]#getent passwd sunan
sunan:x:1000:1000:sunan,opt,12,12:/a:/bin/csh
uermod -s修改文件的shell。
shadow文件格式
?登录用名
?用户密码:一般用sha512加密
?从1970年1月1日起到密码最近一次被更改的时间
?密码再过几天可以被变更(0表示随时可被变更)
?密码再过几天必须被变更(99999表示永不过期)
?密码过期前几天系统提醒用户(默认为一周)
?密码过期几天后帐号会被锁定
?从1970年1月1日算起,多少天后帐号失效
密码加密
?加密机制:
加密:明文--> 密文
解密:密文--> 明文
?单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5: message digest, 128bits(被山东大学的王晓云破解)
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
?更改加密算法authconfig--passalgo=sha256 --update
密码的复杂性策略
?使用数字、大写字母、小写字母及特殊字符中至少3种
?足够长
?使用随机密码
?定期更换,不要使用最近曾经使用过的密码
密码期限
 
 
[sunan@localhost ~]$cat /etc/passwd |tail -1
sunan:x:500:500::/home/sunan:/bin/bash
[sunan@localhost ~]$cat /etc/shadow
cat: /etc/shadow: Permission denied
普通用户能够查看/etc/passwd的文件内容,所以说把密码放到/etc/passwd 中是不安全的。因为普通用户无法查看/etc/shadow的文件内容,所以将密码放到此文件中安全。
[root@localhost ~]#getent shadow sunan
sunan:$6$5qiTgU8L79smDQjz$q0x9YtylUSvKk6we5vFxh0fniK/NztI5TvxYJiNUyKNbTq/UF4fDSW6v/SNcXs8b/Yc6XcA4TU4ptPznYBGrc1:17477:0:99999:7:::
查看文件的密码格式,其中5qiTgU8L79smDQjz是salt作用是为了两个口令一样的用户使得他们的加密口令不同。6代表使用sha512加密算法。
[root@localhost ~]#authconfig --passalgo=sha256 --update
[root@localhost ~]#passwd sunan
修改加密算法
[root@localhost ~]#getent shadow sunan                          
sunan:$5$SinBLQy1$Cp6PRG5sx4KwRrY/gaTbTCJ3Ucqyk8YhfWdbO5vxJy7:17480:0:99999:7:::
可以看到加密算法变成了5即sha256
[root@localhost ~]#openssl rand -base64 30
RJtQTh4g+npXoiU0YOoySeLZIZLLs4Gk8HgeSQgP
产生base64的30不是30位的随机密码,想要30位随机密码还需要处理。
[root@localhost ~]#cat /etc/login.defs
文件中设定的是什么样的加密算法,不建议直接更改。
[root@localhost ~]#useradd sun
[root@localhost ~]#getent shadow sun
sun:!!:17480:0:99999:7:::
系统默认创建的账号不是空口令,看到密码位是!!是锁定的意思,不能空口令登陆,redhat使用usermod -U sun 两次解锁可以登陆,centos6就不行。
注意:关于将shell改为/sbin/nologin 则不可以进行交互式登陆了。
[root@localhost ~]#usermod -L sun
[root@localhost ~]#getent shadow sun   
sun:!$6$.hHKjOk4$RFAVAXDBsABcPTQcPle1UMtD9KMUOtJthFKDyrnplYNVEUJUkw8.3UekyoeAskpblkrDW1USxvuopOnyTVyu41:17480:0:99999:7:::
可以看到加密密码前面有个!,意思是被锁定了,不能登陆。
[root@localhost ~]#usermod -U sun
将账户解锁
[root@localhost ~]#echo 123456|passwd --stdin sunn
Changing password for user sunn.
passwd: all authentication tokens updated successfully.
直接修改口令。
[root@localhost ~]#HISTCONTROL=ignoreboth
[root@localhost ~]# echo a
a
将命令前面加空格的命令不记入history,这样修改密码就会不记入历史了。
[root@localhost ~]#getent shadow sunn
sunn:$6$K2cnHStn$6p5kCrPubFjOewLG0poYDbTsLsbGTUZK0tYQ2xlxQzz3hfb3G5F0Hry/L6ZMq2JLK10oSEqNcaIq2xbx7UuvD1:17486:0:99999:7:::
[root@localhost ~]#passwd -e sunn
Expiring password for user sunn.
passwd: Success
[root@localhost ~]#getent shadow sunn      
sunn:$6$K2cnHStn$6p5kCrPubFjOewLG0poYDbTsLsbGTUZK0tYQ2xlxQzz3hfb3G5F0Hry/L6ZMq2JLK10oSEqNcaIq2xbx7UuvD1:0:0:99999:7:::
使用户的密码马上失效命令,即17486为0了,登陆这个账号必须马上改口令。
[root@localhost ~]#chage -d0 sunn
[root@localhost ~]#getent shadow sunn
sunn:$6$/GeZGBic$qREMr/tD.L4RVNdDuBPy3V09cU1f3Bjbm/UPkozpOdJf0bqVVPOuw3uUMDYU.8HEVOjWrFd9SCp1SbEFUplN.0:0:0:99999:7:::
这样也可以。
[root@localhost ~]#chage -d
chage: option requires an argument -- ‘d‘
Usage: chage [options] LOGIN
 
Options:
  -d, --lastday LAST_DAY        set date of last password change to LAST_DAY
  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -h, --help                    display this help message and exit
  -I, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -l, --list                    show account aging information
  -m, --mindays MIN_DAYS        set minimum number of days before password
                                change to MIN_DAYS
  -M, --maxdays MAX_DAYS        set maximim number of days before password
                                change to MAX_DAYS
  -R, --root CHROOT_DIR         directory to chroot into
  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS
chage的使用用法。
[root@localhost ~]#chage sunn
Changing the aging information for sunn
Enter the new value, or press ENTER for the default
 
        Minimum Password Age [0]:
        Maximum Password Age [99999]: 99999
        Last Password Change (YYYY-MM-DD) [1970-01-01]: 2017-11-15
        Password Expiration Warning [7]: 7
        Password Inactive [-1]: -1
        Account Expiration Date (YYYY-MM-DD) [-1]: --》-1是永不过期,设2018-11-11过期
一个一个改。
group文件格式
?群组名称:就是群组名称
?群组密码:通常不需要设定,密码是被记录在/etc/gshadow
?GID:就是群组的ID
?以当前组为附加组的用户列表(分隔符为逗号)
记录一个问题:
  同学问为什么在/etc/group最后只能看到以这个组为附加组用户,不能看到以这个组为主组用户?
  答:/etc/group记录了 组名 组密码 组ID 附加组列表,以当前组为主组的用户是记录到/etc/passwd中的,通过对应组ID就可以找到这个以这个组为主组的用户。
修改group:
  id不加任何选项,查看的是当前登录的当前信息。刚改的文件需要重新登录,才能显示出来。id后面加用户名,系统认为你读取的是别的用户,即可读取到新的信息。如果把当前用户加到组里面了,必须要重新登录,用户才知道自己加到这个新组了。
gshdow文件格式
?群组名称:就是群组名称
?群组密码:(组默认没有口令)
?组管理员列表:组管理员的列表,更改组密码和成员(添加和删除用户账号)
                默认root账号是组管理员
?以当前组为附加组的用户列表:(分隔符为逗号) same as /etc/group
文件操作
?vipw和vigr:直接打开passwd、group,语法检测功能。
?pwck和grpck:检查关于用户账号,和组账号的相关的文件的格式是否正确。
用户和组管理命令
?用户管理命令
?useradd
?usermod
?userdel
?组帐号维护命令
?groupadd
?groupmod
?groupdel
用户创建:useradd
?useradd[options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR:以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
[root@localhost ~]#useradd -u 1005 -o merry
[root@localhost ~]#useradd -u 1005 -o lilei
[root@localhost ~]#cat /etc/passwd | tail -2
merry:x:1005:1005::/home/merry:/bin/bash
lilei:x:1005:1006::/home/lilei:/bin/bash
创建两个相同的id的用户可以看到UID相同但GID和家目录都不相同,得到的权限一样。这两个用户谁在前登陆显示谁。
[root@localhost ~]#useradd -r -m -d /app/nginx nginx
[root@localhost ~]#ls /app
a     aaa.log  fstab       ls.out   new1win.txt  who.out    win.txt
aa    a.txt    linux.txt   man.txt  newwin.txt   win1.txt
aaaa  f        lost+found  name     nginx        win22.txt
-r默认不创建家目录,系统用户,-m强制创建家目录。有时候就是指定的1-500的uid,系统也认为是一个普通的用户,因为没有-r指定。
[root@localhost ~]#useradd -r -m -d /app/zabbix -s /sbin/nologin zabbix
设置一个服务使用的系统用户。
[root@localhost /home/sunan]#cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
useadd默认生成的文件。
[root@localhost /home/sunn]#ls -a /home/lilei
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
[root@localhost /home/sunn]#ls -a /etc/skel 
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
默认生成的家目录下面的文件和/etc/skel中的文件相同,因为来自于/etc/skel
[root@localhost ~]#cp -r /etc/skel  /home/suna     
如果删除一个用户的家目录,想要恢复,需要新建一个和原来一样的文件名然后把/etc/skel下的文件全部拷贝过去。
[root@localhost ~]#cp -r /etc/skel/*  /home/suna
上面这条命令很危险,会把skel中所有的文件和etc中所有的文件拷贝过去,因为目录下包括.和..
[root@localhost ~]#cat /etc/login.defs
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999
上面的文件存放许多登陆的默认信息
创建用户:useradd
?默认值设定:/etc/default/useradd文件中
?显示或更改默认设置
useradd-D =cat /etc/default/useradd
useradd–D -s SHELL
useradd–D –b BASE_DIR
useradd–D –g GROUP
新建用户的相关文件和命令
?/etc/default/useradd
?/etc/skel/*
?/etc/login.defs
?newusers passwd格式文件批量创建用户
将和/etc/passwd文件中一样的格式的内容保存到一个文件a.txt中
newusers a.txt即可批量创建用户,即同时改变了那4个文件。
?chpasswd 批量修改用户口令
    在b.txt文件中存放用户名:密码的格式,chpasswd b.txt
 
用户属性修改
?usermod[OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c ‘COMMENT‘:新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
[root@localhost ~]#id sunn
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
[root@localhost ~]#usermod -G "" sunn
[root@localhost ~]#id sunn          
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
[root@localhost ~]#usermod -aG root,sunan sunn
[root@localhost ~]#id
uid=0(root) gid=0(root) groups=0(root)
[root@localhost ~]#id sunn
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
[root@localhost ~]#usermod -G sunn sunn
[root@localhost ~]#id sunn            
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
上面是两种去除用户附加组的方法,一种是用空的去覆盖原来的附加组,另一种是使用主组去覆盖附加组,因为主组只能是主组不能是附加组,所以将附加组清空了。
[root@localhost ~]#usermod -d /app/sunn -m /home/sunn
[root@localhost /app/sunn]#ls -a /app/sunn
.   .bash_history  .bash_profile  .cache   .mozilla
..  .bash_logout   .bashrc        .config
其中的-d是指定家目录 -m是搬家。
删除用户
?userdel[OPTION]... login
-r: 删除用户家目录
查看用户相关的ID信息
?id [OPTION]... [USER]
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
[root@localhost /app]#userdel sunn
[root@localhost /app]#cd /home
[root@localhost /home]#ll
total 24
drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
drwx------  3 merry  merry  4096 Nov 16 18:46 merry
drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
drwx------  5   1002   1002 4096 Nov 16 15:48 sunn
删除用户只是用户名没了,其他的一切还在。
[root@localhost /home]#useradd -u 1002 sunn
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@localhost /home]#ll
total 24
drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
drwx------  3 merry  merry  4096 Nov 16 18:46 merry
drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
drwx------  5 sunn   sunn   4096 Nov 16 15:48 sunn
创建一个相同名字的用户又可以找回原来用户了
[root@localhost /home]#userdel -r sunn
这样把家目录和邮箱也删除了,-r命令太危险。
[root@localhost /home]#userdel -r -f  sunn
userdel: user sunn is currently used by process 8453
即使有进程正在使用也可以使用-f选项直接删除
切换用户或以其他用户身份执行命令
?su[options...] [-] [user [args...]]
?切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,变量不切换,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
?root su至其他用户无须密码;非root用户切换时需要密码
?换个身份执行命令:
su[-] UserName -c ‘COMMAND‘
?选项:-l --login
su-l UserName相当于su-UserName
[sunn@localhost ~]$su - root -c ‘cat /etc/shadow‘
Password:
root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
bin:*:17486:0:99999:7:::
使用管理员权限不用多次切换。
设置密码
?passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
?passwd: 修改自己的密码
?常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-iinactivedays:非活动期限
--stdin:从标准输入接收用户密码
echo "PASSWORD" | passwd—stdinUSERNAME
修改用户密码策略
?chage[OPTION]... LOGIN
-d LAST_DAY
-E --expiredateEXPIRE_DATE
-I --inactive INACTIVE
-m --mindaysMIN_DAYS
-M --maxdaysMAX_DAYS
-W --warndaysWARN_DAYS
–l 显示密码策略
?示例:
chage-d 0 tom 下一次登录强制重设密码
chage-m 0 –M 42 –W 14 –I 7 tom
chage-E 2016-09-10 tom
 
用户相关的其它命令
?chfn指定个人信息
?chsh指定shell
?finger
创建组
?groupadd[OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
[root@localhost ~]#usermod -G sunan sunn
[root@localhost ~]#id sunn
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),1000(sunan)
[root@localhost ~]#usermod -G root sunn
[root@localhost ~]#id sunn
uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root)
通过上面可以看到一个账号用于一个附加组的情况下,再添加附加组会导致原来的附加组被替换掉。解决办法添加-a(append)选项即可
[root@localhost ~]#groups sunn
sunn : sunn root sunan
使用groups命令查看用户属于的所有组,其中第一个是主组,后面是附加组。
[sunn@localhost ~]$newgrp  sunan
[sunn@localhost ~]$id
uid=1002(sunn) gid=1000(sunan) groups=1000(sunan),0(root),1002(sunn)
切换主组命令 newgrp
 
修改和删除组
?组属性修改:groupmod
groupmod[OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
?组删除:groupdel
groupdelGROUP
[root@localhost /home]#groupdel sunn
groupdel: cannot remove the primary group of user ‘sunn‘
组下面存在以这个组为主组的用户,那么这个组不能删除。
更改组密码
?组密码:gpasswd
?gpasswd[OPTION] GROUP
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
?newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
[sunn@localhost ~]$newgrp aa
Password:
[sunn@localhost ~]$groups
aa root sunan sunn
如果用户本不属于此组,则需要组密码,组密码设定gpasswd。但是newgrp只能临时生效,没有写到配置文件中。
注意:一般情况下,组是不设口令的,因为不安全,普通用户只要知道组口令就可以把自己加到组里面,拥有一些权限。组不设口令,就只能使用root添加了。
sunn:!::
[root@localhost ~]#gpasswd sunn
Changing the password for group sunn
New Password:
Re-enter new password:
[root@localhost ~]#getent gshadow sunn
sunn:$6$ZMWfIRMv$jbirRff67fLIEd9/VxdrQnpz0xLGuRYl068Bj3QRtdO/46Xll1bLD6z92nvQT252UTb94mNmjC/q.uHNv.zP20::
sunn组默认没有密码,通过gpasswd命令添加密码。
[root@localhost ~]#getent gshadow aa
aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1::
[root@localhost ~]#gpasswd -A sunn aa
[root@localhost ~]#getent gshadow aa
aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1:sunn:
组默认没有管理员,使用gpasswd -A添加管理员。
[sunn@localhost ~]$gpasswd -a sunan aa
Adding user sunan to group aa
[sunn@localhost ~]$
因为sunn用户是aa组的管理员这样sunn用户就可以向aa组添加成员了。
更改和查看组成员
groupmems[options] [action]
options:
-g, --group groupname更改为指定组(只有root)
Actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员(清空的是附属组,主组不能清除)
-l, --list 显示组成员列表
groups [OPTION].[USERNAME]... 查看用户所属组列表
[root@localhost /home]#groups sunn
sunn : sunn
[root@localhost /home]#groupmems  -l -g root
Gentoo
显示用户所属组,显示组中用户。
文件权限
  文件属性
      有一个文件属性图解析没画
  文件属性操作
chown设置文件的所有者
chgrp设置文件的属组信息
修改文件的属主和属组
?修改文件的属主:chown
 
chown[OPTION]... [OWNER][:[GROUP]] FILE...
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒号可用.替换
-R: 递归
chown[OPTION]... --reference=RFILE FILE...
?修改文件的属组:chgrp
chgrp[OPTION]... GROUP FILE...
chgrp[OPTION]... --reference=RFILE FILE...
-R 递归
文件权限
?文件的权限主要针对三类对象进行定义
owner: 属主, u
group: 属组, g
other: 其他, o
?每个文件针对每类访问者都定义了三种权限
r: Readable
w: Writable
x: eXcutable
文件权限
?文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
?目录:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
文件权限操作:
  文件权限(rwx|W)




 


权限项


文件类型








执行








执行








执行


 




字符表示


(d|l|c|s|p)


r


w


x


r


w


x


r


w


x




 


 数字表示


 


4


2


1


4


2


1


4


2


1


 




 权限分配


 


文件所有者


文件所属组


其他用户




  文件权限操作命令
chmod
八进制数字
?---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-----
755: rwxr-xr-x
fat文件系统不止权限设置,ext文件系统支持。
修改文件权限
?chmod[OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
?chmod[OPTION]... MODE[,MODE]... FILE...
MODE:
修改一类用户的所有权限:
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ -
?chmod[OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE
权限设置示例
?chgrp sales testfile
?chown root:admins testfile
?chmod u+wx,g-r,o=rx file
?chmod -R g+rwX /testdir
?chmod 600 file
?chown mage testfile
所有者可以执行chgrp命令,不能执行chown,因为你不能把你生成的文件变成别人的。同时要删除一个文件,必须要对文件所在的目录有写权限,不然删除不掉,
因为文件名和节点对应信息在目录的数据中存放。
读和写权限对root是不生效,但是执行权限对root生效。root比较特殊,只要是有执行权限就行不管是u g o上的,但其他用户就必须严格执行先后匹配顺序,先匹配了,后面的权限就不能再匹配了。
文件能不能删不是 取决于文件本身,而是取决于文件的家目录。
新建文件和目录的默认权限
[root@localhost /home/wang]#chown -R wang /home/wang
递归创建用户为wang
[root@localhost /home/wang]#chmod --reference f1 f2
参考f1权限设置f2
创建的文件默认没有执行权限,危险。创建的目录默认有执行权限。
[root@localhost /home/wang]#chmod -R a+X /app/
默认给目录执行权限。-R递归赋予权限。
但是如果文件有一个选项有执行权限,+X全部有执行文件。
6.1 umask和suid权限
[root@centos7 ~]#useradd -p abcdef sunny
[root@centos7 ~]#getent passwd sunny
sunny:x:1001:1001::/home/sunny:/bin/bash
[root@centos7 ~]#getent shadow  sunny
sunny:abcdef:17488:0:99999:7:::
[root@centos7 ~]#su - sunan
Last login: Wed Nov  8 11:01:40 CST 2017 on pts/0
[sunan@centos7 ~]$su - sunny
Password:
su: Authentication failure
可以看到使用useradd  -p添加的明文密码是不能登陆的。
[sunnyy@centos7 ~]$openssl  passwd -1
Password:
Verifying - Password:
$1$VrT8vFZo$S0Nuf1g4EinoJ9wV09JTN/
[sunnyy@centos7 ~]$exit
logout
[root@centos7 ~]#useradd -p ‘$1$VrT8vFZo$S0Nuf1g4EinoJ9wV09JTN/‘ sun
[root@centos7 ~]#getent shadow sun
sun:$1$VrT8vFZo$S0Nuf1g4EinoJ9wV09JTN/:17488:0:99999:7:::
[root@centos7 ~]#su - sunan
Last login: Sat Nov 18 08:38:25 CST 2017 on pts/0
[sunan@centos7 ~]$su - sun
Password:
[sun@centos7 ~]$
使用openssl passwd -1产生密文密码添加上去才能登陆。
?umask值 可以用来保留在创建文件权限
?新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变。
新建的文件为了安全考虑,默认不加执行权限。
?新建DIR权限: 777-umask
?非特权用户umask是002
?root的umask是022
umask: 查看
?umask#: 设定
umask 002
?umask–S 模式方式显示
?umask–p 输出可被调用
?全局设置:/etc/bashrc用户设置:~/.bashrc
[root@centos7 ~]#umask
0022
查看当前用户的umask值
[sunan@centos7 ~]$umask 644
[sunan@centos7 ~]$touch a
[sunan@centos7 ~]$ll
total 0
-----w--w-. 1 sunan sunan 0 Nov 18 09:43 a
设定用户的umask值,创建文件查看成功,但是只能临时生效,注销登陆失效。
[sunan@centos7 ~]$umask
0002
[sunan@centos7 ~]$pwd
/home/sunan
[sunan@centos7 ~]$nano .bashrc
umask 026
[sunan@centos7 ~]$. .bashrc
[sunan@centos7 ~]$umask     
0026
永久生效修改用户配置文件信息,添加umask 026执行生效,只是针对此用户生效,如果是需要其他用户生效,需要修改/etc/bashrc。
[root@centos7 ~]#umask 145 ;touch f1
[root@centos7 ~]#ll f1
-rw--w--w-. 1 root root 0 Nov 18 09:54 f1
可以看到将umask修改为145,默认创建的文件f1权限应该是521,但实际是622,因为文件默认没有执行权限,奇数+1。
总结:其实真正的计算不是这样的,是用666的二进制与掩码的二进制记性计算
110110110
001100101     其中掩码中的0表示不关心,1表示从最大权限中去掉对应权限。
110010010=622 只和文件有关系,和目录没关系,因为目录不用考虑安全问题。
[root@centos7 ~]#umask -S 
u=rw,g=wx,o=w
显示生成目录的权限
[root@centos7 ~]#umask u=rwx,g=w,o=r
设置生成目录的权限,当然生成文件权限去计算一下就行,这里不浪费时间讲解
[root@localhost Desktop]# rpm -i /run/media/root/CentOS\ 7\ x86_64/Packages/man-pages-zh-CN-1.5.2-4.el7.noarch.rpm
warning: /run/media/root/CentOS 7 x86_64/Packages/man-pages-zh-CN-1.5.2-4.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
安装man手册中文包。
设置环境变量:vim .bashrc
输入内容:
alias cman=‘man -M /usr/local/share/man/zh_CN‘
生效:. .bashrc
cman ls 查看命令
Linux文件系统上的特殊权限
?SUID, SGID, Sticky
?三种常用权限:r, w, x user, group, other
?安全上下文
?前提:进程有属主和属组;文件有属主和属组
(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
可执行文件上SUID权限
?任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
?启动为进程之后,其进程的属主为原程序文件的属主
?SUID只对二进制可执行程序有效
?SUID设置在目录上无意义
?权限设定:
chmod u+s FILE...
chmod u-s FILE...
可执行文件上SGID权限
?任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
?启动为进程之后,其进程的属组为原程序文件的属组
?权限设定:
chmod g+s FILE...
chmod g-s FILE...
目录上的SGID权限
默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:
chmod g+s DIR...
chmod g-s DIR...
[root@centos7 ~]#chmod g+s aaaa/
[root@centos7 ~]#ll -d aaaa/   
drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
 [root@centos7 ~]#chmod  0755  aaaa/
[root@centos7 ~]#ll -d aaaa/
drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
[root@centos7 ~]#echo aaa>a.txt
[root@centos7 ~]#ll a.txt
-rw-r--r--. 1 root root 4 Nov 18 14:24 a.txt
[root@centos7 ~]#chmod g+s a.txt
[root@centos7 ~]#ll a.txt
-rw-r-Sr--. 1 root root 4 Nov 18 14:24 a.txt
[root@centos7 ~]#chmod g+x a.txt       
[root@centos7 ~]#ll a.txt
-rw-r-sr--. 1 root root 4 Nov 18 14:24 a.txt
[root@centos7 ~]#chmod 0654 a.txt
[root@centos7 ~]#ll a.txt
-rw-r-xr--. 1 root root 4 Nov 18 14:24 a.txt
使用数字能去掉文件的SUID和SGID,但不能去掉目录的SGID和SUID。man chmod给出了详细的解释。
Sticky 位
?具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
?在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
?sticky 设置在文件上无意义,因为删除文件要对文件所在目录有权限。
  目录上有rwxrwxrws权限,不能删除文件,不能对文件重命名,mv f1 f2不能重命名,因为重命名相当于删了重建。可以读文件,可以向文件中追加内容和清空文件内容。
[root@centos7 ~]#ll -d /tmp
drwxrwxrwt. 15 root root 4096 Nov 18 14:30 /tmp
tmp目录是大家公用目录,能在里面创建文件但是不能删除别人建的文件。
?权限设定:
chmod o+t DIR...
chmod o-t DIR...
?例如:
?  ls-ld /tmp
drwxrwxrwt 12 root root 4096 Nov215:44 /tmp
[sunan@centos7 /aa]$passwd
Changing password for user sunan.
Changing password for sunan.
(current) UNIX password:
passwd: Authentication token manipulation error
sunan:$6$gVNv8Jd8$uSh2LL/4v2FAnMCfjdkMxw4pH4Yt4Iz4Jrke8w9UyAJuutKrGylYkId3e5afT3CIezdEGIFpx9SAdBIQTHyU70:17488:3:99999:7:::
不能修改密码是因为密码最小有效期时间是3天
[root@centos7 /aa]#chage -m 0 sunan
sunan:$6$gVNv8Jd8$uSh2LL/4v2FAnMCfjdkMxw4pH4Yt4Iz4Jrke8w9UyAJuutKrGylYkId3e5afT3CIezdEGIFpx9SAdBIQTHyU70:17488:0:99999:7:::
修改密码最小时间有效期为0即可修改密码。
[root@centos7 /aa]#ll /etc/shadow
----------. 1 root root 1346 Nov 18 12:35 /etc/shadow
sunan:$6$yBIaPLgZ$AHxtOXkPE0HZVto5.2zSbYWU/EBk3Hy0NzJO/NQ1ZCKFC9XvuWoD9QW8nGZ8IWiVlDm6rj8E2eJnIDhxK8kyh0:17488:0:99999:7:::
对于sunan用户对文件/etc/shadow没有任何权限为什么修改了文件的内容。
[root@centos7 /aa]#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
是因为特殊权限s的作用,使得运行它的用户临时自动继承它的所有者root的权限,他再通过passwd命令去修改/etc/shadow文件。
[root@centos7 /aa]#chmod u+s /usr/bin/nano
[root@centos7 /aa]#ll /usr/bin/nano
-rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
[root@centos7 /aa]#chmod u-s /usr/bin/nano
[root@centos7 /aa]#ll /usr/bin/nano      
-rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
[root@centos7 /aa]#chmod 4755 /usr/bin/nano
[root@centos7 /aa]#ll /usr/bin/nano       
-rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
[root@centos7 /aa]#chmod 755 /usr/bin/nano
[root@centos7 /aa]#ll /usr/bin/nano       
-rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
为nano命令添加和删除s权限。
[root@centos7 /aa]#chmod u-x /bin/passwd
[root@centos7 /aa]#ll /bin/passwd
-rwSr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
[root@centos7 /aa]#chmod u+x /bin/passwd
[root@centos7 /aa]#ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
去除x权限使得s变成了S,即s权限有问题了。
SUID一般不去手动设置,是开发者设置好,只要知道是做什么的就行。
特殊权限数字法
?SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
?chmod4777 /tmp/a.txt
权限位映射
?SUID: user,占据属主的执行权限位
s: 属主拥有x权限
S:属主没有x权限
?SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
?Sticky: other,占据other的执行权限位
t: other拥有x权限
T:other没有x权限
设定文件特定属性
?chattr +i 不能删除,改名,更改(包括root)
         -i 去除属性。
?chattr +a 只能追加内容
nano不能追加,因为不知道你是不是在修改文件,即使你在最后加东西。
echo sdfa>>a.txt 可以追加。
  chattr +A  不会更新读时间
?lsattr 显示特定属性
[root@centos7 /app]#groupmems  -l -g opts
sun  sunny
[sunny@centos7 /app/sharegroup]$ll
total 0
-rw-rw-r--. 1 sun   sun   0 Nov 18 15:00 sun
-rw-rw-r--. 1 sunny sunny 0 Nov 18 15:01 sunny
[sunny@centos7 /app/sharegroup]$echo new>>sun
bash: sun: Permission denied
虽然两个用户属于一个组,但是相互之间还是改不了文件,因为文件的所属组不一样。
[root@centos7 /app]#chgrp opts sharegroup/sun*
[root@centos7 /app]#cd sharegroup/
[root@centos7 /app/sharegroup]#ll
total 0
-rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
-rw-rw-r--. 1 sunny opts 0 Nov 18 15:01 sunny
[root@centos7 /app/sharegroup]#su sun
[sun@centos7 /app/sharegroup]$echo aa>>sunny
[sun@centos7 /app/sharegroup]$cat sunny
aa
把文件的所属组改成一样就可以相互修改数据了。 但是用户每次新建的文件的所属组每次都会变成原来的组,这样需要每次都要修改文件的所属组。解决办法:只要在组权限上面天剑SGID权限即可解决。
[root@centos7 /app]#chmod g+s sharegroup/
[root@centos7 /app]#ll
drwxrws---. 2 root opts  4096 Nov 18 15:14 sharegroup
[sun@centos7 /app/sharegroup]$touch sun1
[sun@centos7 /app/sharegroup]$ll
total 4
-rw-rw-r--. 1 sun   sun  0 Nov 18 15:14 a
-rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
-rw-rw-r--. 1 sun   opts 0 Nov 18 15:16 sun1
-rw-rw-r--. 1 sunny opts 3 Nov 18 15:09 sunny
g+s权限后,所有新建的文件的所属组就变成了opts。一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
通常用于创建一个协作目录
注意:SUID和SGID、Sticky只是针对普通的用户生效,对root无效。
访问控制列表
?ACL:Access Control List,实现灵活的权限管理
?除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
?CentOS7  默认创建的xfs和ext4文件系统具有ACL功能
?CentOS7  之前版本,装完系统有新建的分区,即默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
[root@localhost ~]#tune2fs  -l /dev/sda3
Default mount options:    user_xattr acl
查看某个分区是否支持ACL功能,命令仅支持ext系列。
?ACL生效顺序:所有者,自定义用户,自定义组,其他人
访问控制列表
?为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
  -m:设置后续的参数给文件用。 
setfacl -Rm g:sales:rwX directory
  -R:递归赋予属性
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 file1清除所有ACL权限
  getfacl file1|setfacl --set-file=- file2 复制file1的acl权限给file2
  ?mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl-m mask::rxfile
?--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
?示例:
setfacl --set u::rw,u:wang:rw,g::r,o::-file1
  ?备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
 
[root@centos7 /app]#setfacl  -m u:sun:rw f1
[root@centos7 /app]#getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:sun:rw-
group::r--
mask::rw-
other::r--
mask:除了属主和other的其他的用户的最高权限不能超过mask。
同时设置group的权限不能使用chmod  g+权限 f1这种方式,这种方式设置的是mask权限,要使用setfacl -m group::x f1这种形式。
 
[root@centos7 /app]#echo u:sun:rwx > sun.acl
[root@centos7 /app]#cat sun.acl
u:sun:rwx
[root@centos7 /app]#touch d2
[root@centos7 /app]#setfacl  -R -M sun.acl d2
[root@centos7 /app]#getfacl d2
# file: d2
# owner: root
# group: root
user::rw-
user:sun:rwx
group::r--
mask::rwx
other::r--
通过文件创建权限 -M选项的作用。
[root@centos7 ~]#setfacl -R -m sunan:rw /app/html
[root@centos7 ~]#getfacl /app/html/c.html       
getfacl: Removing leading ‘/‘ from absolute path names
# file: app/html/c.html
# owner: root
# group: root
user::rw-
user:sunan:rw-
group::r--
mask::rw-
other::r--
[root@centos7 ~]#touch /app/html/b.html
[root@centos7 ~]#getfacl !$
getfacl /app/html/b.html
getfacl: Removing leading ‘/‘ from absolute path names
# file: app/html/b.html
# owner: root
# group: root
user::rw-
group::r--
other::r--
事实表明上面创建的ACL权限只对设置ACL权限前生成的文件有效,对以后新的生成的文件无效。
[root@centos7 ~]#setfacl -R -m d:sunan:rw /app/html
[root@centos7 ~]#touch /app/html/d.html
[root@centos7 ~]#getfacl !$
getfacl /app/html/d.html
getfacl: Removing leading ‘/‘ from absolute path names
# file: app/html/d.html
# owner: root
# group: root
user::rw-
user:sunan:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--
要相对以后的文件生效需要加上d选项。
[root@centos7 ~]#getfacl -R /app/html/ >/app/html.acl
getfacl: Removing leading ‘/‘ from absolute path names
[root@centos7 ~]#setfacl  -Rb /app/html          清空ACL权限
[root@centos7 ~]#setfacl  -R  --set-file=/app/html.acl /app/html/  恢复ACL权限
[root@centos7 /app]#setfacl --restore html.acl   这样恢复更简单些 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程