如何进行Linux的账号管理和ACL权限设置(学习笔记)

一、Linux的账号与群组

1、关于账号:

        Linux上的每个用户和每个文件都有拥有者和群组,那么计算机是如何识别他们的?其实就是利用 UID 与 GID (ID就是一组号码)!每一个文件都会有所 谓的拥有者 ID 与拥有群组 ID ,当我们有要显示文件属性的需求时,系统会依据 /etc/passwd 与 /etc/group 的内容, 找到 UID / GID 对应的帐号与群组名称再显示出来。

        Linux中跟使用者帐号有关的有两个非常重要的文件,一个是管理使用者 UID/GID 重要参数的 /etc/passwd ,一个则是专门管理密码相关数据的 /etc/shadow,如果我们要备份Linux的系统账号的话,这两个文件就一定需要备份才行。

  • /etc/passwd 文件结构:每一行都代表一个帐号,有几行就代表有几个帐号在你的系统.

 每一行使用“:”分隔开,共有七个信息,分别是:

  1. 帐号名称
  2. 密码: 早期 Unix 系统的密码就是放在这字段上!但是因为这个文件的特性是所有的程序 都能够读取,这样一来很容易造成密码数据被窃取, 因此后来就将这个字段的密码数据 给他改放到 /etc/shadow 中了。所以这里你会看到一个“ x ”。
  3. UID: 这个就是使用者识别码
  4. GID: 这个与 /etc/group 有关。
  5. 使用者信息说明栏
  6. 主文件夹: 这是使用者的主文件夹
  7. Shell
  • /etc/shadow 文件结构

 shadow 同样以“:”作为分隔符号,这九个字段的用途分别是这样的:

  1. 帐号名称:必须要 与 /etc/passwd 相同才行!
  2. 密码:这个字段内的数据才是真正的密码,而且是经过编码的密码 (加密)
  3. 最近更动密码的日期:计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,1971 年 1 月 1 日则为 366
  4. 密码不可被更动的天数:这个帐号的密码在最近一次被更改后需要经过几天才可以再被变更。
  5. 密码需要重新变更的天数。
  6. 密码需要变更期限前的警告天数。
  7. 密码过期后的帐号宽限时间(密码失效日)。
  8. 帐号失效日期:此时不论你的密码是否有过期,这个“帐号”都不能再被使用。
  9. 保留: 最后一个字段是保留的,看以后有没有新功能加入。

如果你想要知道 shadow 是使用哪种加密的机制时, 可以通过下面的方法去查询。

2、关于群组 

  • /etc/group 文件结构,这个文件就是在记录 GID 与群组名称的对应了。

个文件每一行代表一个群组,也是以冒号“:”作为字段的分隔符号,共分为四栏,每一字段 的意义是:

  1. 群组名称:基本上需要与第三字段的 GID 对 应。
  2. 群组密码: 通常不需要设置,这个设置通常是给“群组管理员”使用的,目前很少有这个 机会设置群组管理员。同样的,密码已经移动到 /etc/gshadow 去,因此这个字段只会 存在一个“x”而已;
  3. GID: 就是群组的 ID
  4. 此群组支持的帐号名称: 我们知道一个帐号可以加入多个群组,那某个帐号想要加入此 群组时,将该帐号填入这个字段即可。
  • 有效群组(effective group)与初始群组(initial group)

/etc/passwd 里面的第四栏的 GID 就是所谓 的“初始群组 (initial group)

  • groups: 有效与支持群组的观察

        我的 jxl 帐号同时支持 dmtsai, wheel 与 users 这三个群组,第一个输出的群组即为有效群组 (effective group) 。即,如果我以 touch 去创建一个新文件,例如: “ touch test ”,那么这个 文件的拥有者为 jxl ,而且群组也是 jxl 的

  • newgrp: 有效群组的切换

用 newgrp 切换的群组必须是你已经有支持的群组。

二、账号管理指令

1、使用者的新增:useradd

  • 新增用户:useradd 

语法格式:

useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 使用者帐号名

选项与参数:

-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号;

-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~ 该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。

-G :后面接的群组名称则是这个帐号还可以加入的群组。 这个选项与参数会修改 /etc/group 内的相关数据!

-M :强制!不要创建使用者主文件夹!(系统帐号默认值)

-m :强制!要创建使用者主文件夹!(一般帐号默认值)

-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设置的啦~

-d :指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径!

-r :创建一个系统的帐号,这个帐号的 UID 会有限制 (参考 /etc/login.defs)

-s :后面接一个 shell ,若没有指定则默认是 /bin/bash 的 

-e :后面接一个日期,格式为“YYYY-MM-DD”此项目可写入 shadow 第八字段, 亦即帐号失效日的设置项目;

-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效, -1 为永远不失效(密码只会过期而强制于登陆时重新设置而已。)

eg1:请用 users 为初始群组,以及 uid 为 1500 来创建一个名为 vbird2 的帐号

 使用 useradd 创建了帐号之后,在默认的情况下,该帐号是暂时被封锁 的, 也就是说,该帐号是无法登陆的,

2、passwd为新用户设置密码使之生效

        使用 useradd 创建了帐号之后,在默认的情况下,该帐号是暂时被封锁 的,也就是说,该帐号是无法登陆的,直接给他设置新密码就好了,设置密码就使用 passwd。

语法格式:

passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 帐号  

选项与参数:

--stdin :可以通过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!

-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;

-u :与 -l 相对,是 Unlock 的意思!

-S :列出密码相关参数,亦即 shadow 文件内的大部分信息。

-n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数

-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码

-w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数

-i :后面接“日期”,shadow 的第 7 字段,密码失效日期

eg1:请 root 给予 vbird2 密码

 3、usermod:帐号相关数据的微调。

语法格式:

usermod [-cdegGlsuLU] username

选项与参数:

-c :后面接帐号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些帐号的说明。

-d :后面接帐号的主文件夹,即修改 /etc/passwd 的第六栏;

-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!

-f :后面接天数,为 shadow 的第七字段。

-g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!

-G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~

-a :与 -G 合用,可“增加次要群组的支持”而非“设置”喔!

-l :后面接帐号名称。亦即是修改帐号名称, /etc/passwd 的第一栏!

-s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。

-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的数据;

-L :暂时将使用者的密码冻结,让他无法登陆。其实仅改 /etc/shadow 的密码栏。

-U :将 /etc/shadow 密码栏的 ! 拿掉,解冻!

eg1:修改使用者 vbird2 的说明栏,加上“VBird's test”的说明。

eg2: 使用者 vbird2 这个帐号在 2023/12/31 失效。

 4、删除用户 userdel

语法格式:userdel [-r] username

选项与参数: -r :连同使用者的主文件夹也一起删除

eg1:删除 vbird2 ,连同主文件夹一起删除

5、几个一般身份使用者常用的帐号数据变更与查询指令

1)id ,这个指令则可以查询某人或自己的相关 UID/GID 等等的信息

 2)finger ,可以查阅很多使用者相关 的信息。不过以新的版本中已经默认不安装这个软件。

 上表所示,其实他列出来 的几乎都是 /etc/passwd 文件里面的东西。列出的信息说明如下:

  • Login:为使用者帐号,亦即 /etc/passwd 内的第一字段;
  • Name:为全名,亦即 /etc/passwd 内的第五字段(或称为注解);
  • Directory:就是主文件夹了;
  • Shell:就是使用的 Shell 文件所在;
  • Never logged in.:figner 还会调查使用者登陆主机的情况!
  • No mail.:调查 /var/spool/mail 当中的信箱数据;
  • No Plan.:调查 ~vbird1/.plan 文件,并将该文件取出来说明!

eg2:利用 root 创建自己的计划档

3)chfn ,change finger 的意思,其实就是改到第五个字段,该字段里面用多个“ , ”分隔就是了 

 6、新增(groupadd)、修改(groupmod)与移除(groupdel)群组。

  • groupadd

语法格式:groupadd [-g gid] [-r] 群组名称

选项与参数:

-g :后面接某个特定的 GID ,用来直接给予某个 GID  

-r :创建系统群组!与 /etc/login.defs 内的 GID_MIN 有关。

  •  groupmod

语法格式:groupmod [-g gid] [-n group_name] 群组名

选项与参数:

-g :修改既有的 GID 数字;

-n :修改既有的群组名称

  • groupdel

语法格式:groupdel [groupname]

  • gpasswd

语法格式:gpasswd [-ad] user groupname

选项与参数:

-a :将某位使用者加入到 groupname 这个群组当中!

-d :将某位使用者移除出 groupname 这个群组当中。

三、用 ACL 进行主机的细部权限规划

        ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设置。ACL 可以针对单一使用者,单一文件或目录来 进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

查看系统核心是否支持acl

1、ACL 的设备指令:getfacl、setfacl

  • setfacl:设置某个目录/文件的 ACL 规范。

语法格式:setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名

选项与参数:

-m :设置后续的 acl 参数给文件使用,不可与 -x 合用;

-x :删除后续的 acl 参数,不可与 -m 合用;

-b :移除“所有的” ACL 设置参数;

-k :移除“默认的” ACL 参数,关于所谓的“默认”参数于后续范例中介绍;

-R :递回设置 acl ,亦即包括次目录都会被设置起来;

-d :设置“默认 acl 参数”的意思!只对目录有效,在该目录新建的数据会引用此默认值

eg1:针对单一用户设置规范:“ u:[使用者帐号列表]:[rwx] ”,例如针对 vbird1 的权限规范 rx

eg2: 针对单一群组的权限设置:“ g:群组名:权限 ”,例如针对 mygroup1 的权限规范 rx :

 eg3:针对有效权限 mask 的设置方式:“ m:[rwx] ”,例如针对刚刚的文件规范为仅有 r

有效权限 mask 的意思是,使用者或群组所设置的权限必须要存在于 mask 的权限设置范围内才会生效。

 eg4:针对默认权限的设置方式:“ d:[ug]:使用者列表:[rwx] ”,例如让 myuser1 在 /srv/projecta 下面一直具有 rx 的默认权限.

 eg5:取消全部的 ACL 设置可以使用 -b 来处理,但单一设置值的取消,就得要通 过 -x

  • getfacl:取得某个文件/目录的 ACL 设置项目;

语法格式:getfacl filename

eg1:请列出刚刚我们设置的 acl_test1 的权限内容:

四、切换系统登陆用户

1、su:身份切换指令。

语法格式:su [-lm] [-c 指令] [username

选项与参数:

- :单纯使用 - 如“ su - ”代表使用 login-shell 的变量文件读取方式来登陆系统; 若使用者名称没有加上去,则代表切换为 root 的身份。

-l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。

-m :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”

-c :仅进行一次指令,所以 -c 后面可以加上指令!

eg1:假设你原本是 dmtsai 的身份,想要使用 non-login shell 的方式变成 root

eg2:使用 login shell 的方式切换为 root 的身份并观察变量

 2、sudo:以其他用户的身份执行指令(始系统默认仅有 root 可以执行 sudo)

语法格式:sudo [-b] [-u 新使用者帐号]

选项与参数:

-b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响

-u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。

eg1:以 sshd 的身份在 /tmp 下面创建一个名为 mysshd 的文件

五、Linux 主机上的使用者讯息传递

1、查询使用者: w, who, last。

 2、使用者对谈: write, mesg, wall

 不想要接受任何讯息,直接下达这个动作:

 如果想要解开的话,再次下达“ mesg y ”就好了,想要知道目前的 mesg 状态,直接 下达“ mesg ”即可。

对所有 系统上面的使用者传送简讯 (广播):wall

3、邮箱:mail

语法格式:mail -s "邮件标题" username@localhost ”即可

查看收件信息:mail

六、创建多个账号。

如果想要创建多个账户,只有通过shell scropt了。下面是一个创建多账号的脚本可以借鉴一二。

  • 脚本

#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin 
# 0\. userinput 
usergroup="" # if your account need secondary group, add here. 
pwmech="openssl" # "openssl" or "account" is needed. 
homeperm="no" # if "yes" then I will modify home dir permission to 711 
# 1\. 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 1 
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 -b
ase64 6) || usepw=${username}
                        echo ${usepw} | passwd --stdin ${username} # 创建密码 
                        chage -d 0 ${username} # 强制登陆修改密码 
                        [ "${homeperm}" == "yes" ] && chmod 711 /home/${username
}
        echo "username=${username}, password=${usepw}" >> outputpw.txt 
                        ;;
                "delete")
                        echo "deleting ${username}"
                        userdel -r ${username}
                        ;;
                *)
                        echo "Usage: $0 [create|delete]"
                        ;;
        esac
done
"accountadd.sh" [新] 36L, 1250C 已写入  

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值