接上篇。鸟哥提出了一个问题。就是

如果myuser1用户是这个项目的助理,他只能查看该目录下的内容,而无法修改删除。那该如何操作呢?

首先,不能将该用户加入projecta这个群组,否则他也可以修改删除文件了

其次,不能将该目录的权限进行修改,例如修改other的权限,为5,这样其他人都可以查阅该项目了。

这个时候,引入了外部身份认证系统的概念

例子:

首先我们创建ac1_test1目录,然后查看他的权限是rw-  r-x r--相对应的root的账户的权限就是rw-

然后我们利用setfacl命令,将lsq的用户赋予了该目录rx的权限。然后我们利用ll查看的时候,发现该目录给原来目录的权限发生了变化。第一个框和第二个框之间的变化,有原来的rw-r---r--变成了rw-r-xr--+  1。

如何查看该目录的ALC权限呢,就需要getfacl这个命令。可以看到最后一个红框的部分

user :: 空表示是目录拥有者,是不是跟第一个红框的权限一致的,都是rw-的权限。第二个user:lsq  就是我们将lsq的权限赋给了该目录。就是r-x的权限

至此,lsq在该目录下就拥有了r-x的权限。也就解答了上面中助教的问题。

设置某个群组的权限就是这么简单。。。。

也就是说,mask是用来规范最大权限的意思,比如说,你给了用户7的权限,但是你mask只有4的权限,你哪怕给了用户7的权限,他也只能拥有4的权限,因为,mask的存在。

OK。上述设置的ACL权限有一个问题,就是不能继承。也就是说,如果用root身份登入之后,创建的文档,是无法继承ACL权限的。让我们测试一下

,我们的projecta是有ACL权限的,看到后面的+号了么,证明是有权限的。

那我们用root账号建立一个档案

看到了么?这两个文档 abc1和abc2是不带+号的,也就是没有ACL权限的,这就证明,新创立文档无法继承原父目录下的ACL权限的。那该咋办呢?

测试一下

首先我们使用命令  setfacl -m d:u:myuser1:rx /srv/projetca  来给myuser1赋予了ACL的继承权限。然后getfacl 来查看一下,就是第二个红框,发现myuser1确实已经有了ACL的权限。

接下来我们用root创建一个目录ccc。然后查看一下新创建的ccc是否和刚才一样,没有ACL的权限呢?getfacl ccc。发现该目录已经继承了projecta的ACL权限,就是最后一个红框部分。至此,我们的问题得到了解答。通过这个命令,无论在projceta下面创建了什么目录和档案,myuser1都已经具有了ACL的权限,即r-x的权限。

实验:

针对myuser1的权限问题,首先这是一个针对单一用户的ACL权限取消的问题。

针对该目录所有ACL的权限的取消。用-b来处理。即 setfacl -b  /srv/projecta来取消projecta的ACL目录权限

通过这个方式,会取消所有施加在projecta文件夹上的ACL权限,那如何取消单一用户的ACL权限呢,就像题目要求的,取消myuser1的ACL权限该如何操作呢,这就需要-x来设置。而且只能逐个设定,这个逐个设定的意思就是,因为我们刚刚经过两步,一步是给myuser1加上了projecta的非继承权限,然后有给myuser1加上了继承的ACL权限,所以我们要逐个取消掉才行。

首先我们需要查看一下myuser1的ACL权限,通过getfacl命令,发现有user的权限和default的权限,然后我们就需要逐个取消掉

setfacl -x u: XXXXXXXX      setfacl -x d:u:XXXXXXXXXX来分别取消掉这两个权限,然后我们getfacl查看一下该目录下的ACL权限,发现myuser1的ACL权限没了,对比顶部的user:default:。实现了我们的要求

那如何让pro3用户无访问该目录的权限呢?通过setfacl -来处理

,红框位置显示,pro3已经没有了访问projecta的权限

身份转移 命令  su    sudo

这个我一直在用,上面的截图中也能够显示,不停地身份转移

su   与    su  -的区别

上面中,我们一直再用su来进行角色的转换,这样就存在一个问题,就是环境变量的问题。如下图

虽然你用su命令登录的root的身份,但是环境变量依然是采用的lsq的环境变量。这就是所谓的non-login  shell的登陆方式,这样我们在操作一些命令的时候,他取得环境变量就不是root的,尤其是PATH。。。是lsq而非root

为解决这个问题,就出现了su -命令,这就是login-shell。。。彻底的转换成root身份,如下图

我们采用su-命令之后,在env lsq的时候,发现没有任何关于lsq的信息,只剩下root的信息,对比前一张图。很容易看出区别

所以,我们在日常操作的时候,如果确实需要root身份来处理一些事情的时候,一定要用su -命令,否则很容易出现一些问题。

若只是短暂的使用root的账户信息来操作某一项指令,而非切换的话,我们又用到了

su - -c 的命令

例 : su - -c  “head -n 3 /etc/shadow”执行head命令取前3行

可以发现,虽然用root身份执行了head命令,但是最终的角色并没有转换,红框部分显示

sudo 命令

。看到了么?当我们用lsq账户去操作sudo 的时候,他会提示 not in the sudoers file。。。也就是你没有sudo的使用权。而sudo的使用权的配置文件放置在

/etc/sudoers目录中。而要修改 sudoers脚本文件,我们用到了visudo这个东东

让我们来探究一下这是个啥东东

敲入命令 visudo

如下图,

在root下,新增lsq的sudo编辑权限,然后测试,最后一个红框的测试结果证明,lsq已经具有了sudo的权限。对比sudo的第一张图。

第一个红框中的解释

通过上面的解释,我们可以得知,如果想让用户只允许通过sudo命令执行某一段sheel,那只需要将ALL改为某段程式的地址即可。但这个地址必须是绝对路径

例,如果想让myuser1用户只能用sudo来代替root执行修改密码的指令,我们该如何操作呢?

visudo 进入编辑界面,我们上图添加的是lsq账户执行跟root一样的所有操作。我们只需在下方加入 myuser1   ALL=(root)  /usr/bin/passwd。即可完成该需求。

如上操作,进入myuser1账户修改密码时,当我们执行 sudo passwd的时候,发现竟然可以修改root的登陆密码。。。这肯定不可取,书中给出了答案。如下图

即加上!来阻止执行 /usr/bin/passwd和/usr/bin/passwd root这两个命令,然后其他随便。这样就能够避免更改root的密码了

现在我有一个设想,如果我只是加了阻止,而将中间的那部分去掉呢?结果会如何??

上图就是结果,无法执行任何命令。为什么呢?看上上图中的解释。最后一个一列的意思是,可以执行的命令,注意,是可以执行的命令,那我们在前面加上!之后代表的是非可执行,那可执行代码在哪呢?没有可执行代码了。对吧,这也就是为什么要加上中间那段的意思。

OK。我们加上之后再来试一下

成功了,不是么?

如何批量处理用户的sudo呢?通过群组的方式。敲入visudo 命令如下图

第一个红框中,%wheel  意思是,只要加入了wheel群组的人员,都可以采用sudo命令来执行操作

第二个红框中,可以发现这个是注释的部分,与第一个红框唯一的区别就在于后半部分,有一个NOPASSWD:ALL 。无需密码,即免密使用。如果将这行注释取消掉,意思就是所有加入wheel群组的用户,都可以免密使用sudo命令。是不是很欣喜,很意外

那如果我们想让某一部分人免密使用sudo命令,只需要将该行注释取消掉,然后将这部分人加入到wheel群组中即可。

,查阅  /etc/group,可以发现wheel群组信息。

PAM模块简介

这个东东很好用,write

首先我们要who看一下,都有什么用户在线,然后才能用write进行通话,write +用户+端口

这两个图,一个是用centos登录的账户,一个是用putty登录的账户,这两个家伙开始通信吧。。哈哈,用法就是write lsq pts/0 ,这个pts/0端口就是通过who来得知的,第一个框中的账户名后边的部分。

剩下两个框就是交流的内容,是不是很cool,我觉得很cool...

利用mesg n/y来停止或允许接收上面write发送的数据

wall "XXXXXXXXXXX"来进行全体用户的广播信息

无论是wall还是write,有一个问题就是只有使用者在线方能收到信息。这也就是我们在使用之前,要who一下的原因。如何让用户不在线的时候 也能接收到信息呢?mail

要写信,就有收信,收信的命令同样用mail来实现。

接上面的信息,我们可以发现第二个红框的位置。路径就在/var/spool/mail/lsq内,我们直接cat一下,就能看到文件内容

pwck命令

chpasswd命令   明码加密并写入/etc/shadow

例 :我们现在想批量添加账号,该如何操作?书中给出了一个脚本,很合适,记录一下吧

#!/bin/bash
#This shell script will create amount of linux login accounts for you
# . check the "accountadd.txt" file exist? you must create that file manually
# one account name one line in the "accountadd.txt"
# . use openssl to create users password.
# . User must change his password in his first login.
# . more options check the following url:
#https://www.cnblogs.com/Lonelychampion/
#// lsq
export PATH=/bin:/sbin:/usr/bin:/usr/sbin #. userinput
usergroup="" #if your account need secondary group,add here.
pwmech="openssl" #"oepnssl" or "account" is needed.
homeperm="no" #if "yes" then I will modify home dir permission to 711 # . check the accountadd.txt file
action="${1}" #"create" is useradd and "delete" is userdel.
if [ ! -f accountadd.txt ]; then
echo "There is no accountadd.txt file,stop here."
exit
fi [ "${usergroup}" != "" ] && groupadd -r ${usergroup}
rm -f outputpw.txt
usernames=$(cat accountadd.txt)
for username in ${usernames}
do
case ${action} in
"create")
[ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""
useradd ${usegrp} ${username}
[ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 ) || usepw=${username}
echo ${usepw} | passwd --stdin ${username}
chage -d ${username}
[ "${homeperm}" =="yes" ] && chmod /home/${username}
echo "username=${username} , password=${usepw}" >> outputpw.txt
;;
"delete")
echo "deleting ${username}"
userdel -r ${username}
;;
*)
echo "Usage: $0 [create|delete]"
;;
esac
done

让我们来测试一下这个脚本。我是照着书上抄的,看看能不能一步抄对。哈哈哈

vim  accountadd.txt ,添加如下账户

然后执行 sh accountadd.sh create命令

然后查看   cat /etc/passwd

用户都已经加载上去了,让我们测试一下。

我们拿std04来测试一下,首先我们需要知道std04的密码是什么?看脚本,>>outputpw.txt,意思就是将密码文件输出到了outputpw.txt文件中。

我们cat一下。

就能够看到每个用户的密码。然后我们用Putty 登录一下瞅瞅

,我们输入密码之后,putty会退出,然后你重新登录一下,看一下密码是否重新设置成功?

看到了么?manipulation erro

这里碰到了一个小插曲,去找解决办法,网上五花八门的原因,什么磁盘不够,什么没有权限。。。一大堆,找到了一个阿里云的解决办法。

  1. 登录ECS实例,执行如下命令,检查密码相关文件权限,查看相关文件的属性配置情况。对存在特殊属性的文件,去除后再尝试修改密码即可。

     
    lsattr /etc/*shadow /etc/passwd /etc/group

    系统显示类似如下。

     
    ------------- /etc/gshadow
    ------------- /etc/shadow
    ------------- /etc/passwd
    ------------- /etc/group
  2. 如果存在“-i”属性,则执行如下命令,取消该安全属性。
     
    chattr -i /etc/*shadow /etc/passwd /etc/group
  1. 重新尝试修改密码。
  2. 如果还是报错,则执行如下命令,尝试备份shadow文件。
     
    mv shadow shadow.bak
  3. 执行如下命令,开启用户的投影密码。
     
    pwconv
  4. 再次尝试修改密码。

我前面肯定是没有问题的,权限也是没问题的。那就是shadow的文件没有同步了。。。好吧,按照他说的,mv shadow shadow.bak    pwconv...问题来了。exit出来之后,死活登录不上去了,连root账户都无法登陆,我知道,从我们账号管理一我们知道,肯定是shadow出现了问题,没办法,采用单用户模式进行登录,然后修改密码,如果忘了,我的前面随笔里也有,找一下就O了。然后登陆

我首先先cat了一下/etc/passwd,发现里面的用户都还在,然后我又 ls /etc/shadow*一下,问题出现了

出现了三个shadow文件,一个是shadow,一个shadow- ,一个就是我们的shadow.bak文件。

我将shadow文件删除,然后将shadow-   mv成shadow。

然后exit退出,登录,发现没有问题,然后我们再试一下刚才的修改密码,终于出现了我们想要的,如下图

.修改密码吧。兄弟。。。

练习题

批量添加邮件账号

#!/bin/bash
for userName in pop1 pop2 pop3
do
useradd -g mail -s /sbin/nologin -M $userName
echo $userName | passwd --stdin $userName
done

一般账号   添加次要群组支持

#!/bin/bash
for userName in youlog1 youlog2 youlog3
do
useradd -G youcan -s /bin/bash -m $userName
echo $userName | passwd --stdin $userName
done

Linux账号管理与ALC权限设定(二) 批量增加用户脚本的更多相关文章

  1. Linux账号管理与ALC权限设定(一)

    UID  与   GID UID用户的编号  GID 用户群组的编号 账号登录时,有一个对应的文本来记录某个账户的UID与GID.然后获得这个UID去对应的密码文本中,取得密码进行比对,然后登陆. 保 ...

  2. linux 账号管理与ACL权限设定

    此文涉及命令:useradd.usermod.userdel.passwd.chage.setfacl.getfacl.su.sudo.fingr.chfn.chsh.id.groupadd.grou ...

  3. linux备忘录-账号管理与ACL权限设定

    知识 账号管理中的一些文件结构 /etc/passwd 每一行的内容都为下面结构 账号名称:密码:UID:GID:用户信息说明:家目录:shell ---- UID ---- -- 0 -> 代 ...

  4. Linux 账号管理与 ACL 权限配置

    要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...

  5. 第十四章、Linux 账号管理与 ACL 权限配置

    1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...

  6. 第14章 Linux账号管理与ACL权限设置

    Linux的账号与用户组 用户标识符:UID与GID 每一个文件都有一个所有者ID和用户组ID,当我们需要查看文件属性时,系统会根据/etc/passwd和/etc/group的内容,找到对应UID和 ...

  7. Linux 账号管理及ACL权限设置,PAM模块简介

    有效群组与初始群组: groups:有效与支持群组的观察 newgrp:有效群组的切换,后面接群组名称 在passwd文件中记录的GID就是默认的GID,就是初始群组 /etc/passwd文件结构 ...

  8. 鸟哥私房菜基础篇:Linux 账号管理与 ACL 权限配置习题

    猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0410accountmanager.php 1-root 的 UID 与 GID 是多少?而基于这个理由 ...

  9. Linux账号管理与ACL权限设置

    1:UID和GID 用户ID:在/etc/passwd中 群组ID:在/etc/group中 2:有效群组与初始群组 初始群组:/etc/passwd文件里面的GID 有效群组: groups #查看 ...

随机推荐

  1. js常用算术运算符与一元运算符在做运算时不同类型的转换规则

    /** * 算术运算符:+, -, *, /, % * 当对非number类型的值进行运算(-, *, /, %)时,会将这些值先转换成number再运算,加法'+'运算除外, * 当对非number ...

  2. 2018-8-10-win10-uwp-httpClient-登陆CSDN

    title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...

  3. 2019-9-2-win10-uwp-九幽图床

    title author date CreateTime categories win10 uwp 九幽图床 lindexi 2019-09-02 12:57:38 +0800 2018-2-13 1 ...

  4. Linux快速显示图片

    首先在Ubuntu里面制作图片, ######################################################################## 1920x1080为 ...

  5. 字符串操作——C语言实现

    代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <asse ...

  6. php操作redis--生存时间篇

    常用函数:expireAt,expire,ttl 应用场景:登陆生效时间,验证码有效时间等 设置某个键的有效时间,如当天有效(以时间戳的方式设置) $expireTime = mktime('23', ...

  7. shell 逐行比较两个文件的内容是否一样(行数相同)

    file1="1.txt" file2="2.txt" lines=`cat $file1 | wc -l` ;i<=$lines;i++)) do li ...

  8. Mybatis基于XML配置SQL映射器(三)

    Mybatis之动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: if choo ...

  9. 在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程

    在angular4的项目中需要使用bootstrap的tooltip插件. 1. 使用命令安装jQuery和bootstrap npm install bootstrap jquery --save ...

  10. 探索Redis设计与实现4:Redis内部数据结构详解——ziplist

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...