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

知识

账号管理中的一些文件结构

/etc/passwd

每一行的内容都为下面结构
账号名称:密码:UID:GID:用户信息说明:家目录:shell
---- UID ----
-- 0 -> 代表系统管理员
-- 1~499 -> 系统保留账号,这些系统账号不可登录,shell为/sbin/nologin
---- 1~99 -> 由distributions自行建立的系统账号
---- 100~499 -> 用户可以使用的系统账号
-- 500~65535 -> 给一般使用者用,一般具有可登录shell

/etc/shadow

每一行的内容都为下面结构
账号名称:密码:最近更改密码的日期:密码不可被更改的天数:必须需要重新变更的天数:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效日期:保留
-- 第3个字段>最近更改密码的日期
---- 从1970年1月1日累积的天数
-- 第4个字段>密码不可被更改的天数
---- 密码更改后,多少天内不能更改密码
-- 第5个字段>密码需要重新变更的天数
---- 密码更改后,多少天后必须重新更改
-- 第6个字段>密码需要变更前的警告天数
---- 再过这些天密码就要过期了
-- 第7个字段>密码过期后的宽限时间
---- 密码过期后还能用多少天
-- 第8个字段>面失效的日期
----从1970年1月1日累积的天数

/etc/group

每一行代表一个群组,结构如下
组名:群组密码:GID:群组支持的账号
-- 群组密码一般放在/etc/gshadow中,因此此处为x

/etc/gshadow

每一行的结构如下
组名:密码:群组管理员的username:该群组的user
-- 若密码以 ! 开头,表示无合法密码,所以无群组管理员

/etc/sudoers

-- 格式例子
root ALL(ALL) ALL
-- 用户设定格式如下
使用者账号 登入者的来源主机名(可切换的身份) 可下达的指令
-- 群组设定格式如下
%群组 登入的来源主机名(可切换的身份) 可下达的命令
-- 不需要面的设定方式
root ALL(ALL) NOPASSWD:ALL
-- 限定指令
user ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z],!/usr/bin/passwd root
---- 其中 ! 代表不可执行
--使用别名
User_Alias USERS = pro1,pro2,pro3,myuser1,myuser2
Cmnd_Alias CMDS = !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]
,!/usr/bin/passwd root
-- sudo 搭配su
User_Alias ADMINS = pro1,pro2,pro3,myuser1,myuser2
ADMINS ALL=(root) /bin/su -

有效群组 与 初始群组

初始群组

用户已登录就拥有初始群组的权限,初始群组GID记录在/etc/passwd/etc/group第四栏不需要记录初始群组的username

user如果有非初始群组,其username就需要记录在/etc/group的第四栏

有效群组

通过命令groups查看自己加入的所有群组,其中列出群组中的第一个即为有效群组

新建档案时,该档案的群组为有效群组

账号管理

新增用户

通过useradd命令新增用户

useradd的参考档案

  1. 通过useradd -D 列出useradd的默认值
  2. 通过useradd -D 其实是列出档案 /etc/default/useradd的内容,可以在该档案中进行修改

    GID=100 新增账号的初始群组为GID100 (私有群组机制和公共群组机制)
    -- 一般初始群组是与用户名同名的群组,即私有群组机制
    HOME=/home 新增账号家目录的基准目录
    INVALID=-1 密码过期后是否会失效的设定
    -- 0表示密码过期后立刻失效
    -- -1表示密码永远不会失效
    -- 30表示密码过期30天后失效
    EXPIRE= 账号失效的日期
    SHELL=/bin/bash 默认使用的shell
    -- 使用/sbin/nologin表示无登录shell,即无法登录
    SKEL=/etc/skel 为家目录内容数据参考目录
    CREATE_MAIL_SPOOL=yes 是否创建使用者的mailbox

  3. UID/GID/密码参数等参考档案/etc/login.defs

    MAIL_DIR /var/spool/mail 用户默认邮件信箱放置目录
    PASS_MAX_DAYS 99999 多久需要更改密码的天数
    PASS_MIN_DAYS 0 多久不能更改密码天数
    PASS_MIN_LEN 5 密码最短长度,已经被pam模块取代,失去作用
    PASS_WARN_AGE 7 密码过期前提前多少天警告
    UID_MIN 500 使用者最小的UID
    UID_MAX 60000 使用者最大的UID
    GID_MIN 500 使用者自定义组GID的最小值
    GID_MAX 60000 使用者自定义组GID的最大值
    CREATE_HOME yes 是否创建家目录,不加-m和-M时的默认值
    UMASK 077 用户家目录建立的umask
    USER_GROUPS_ENAB yes 使用userdel时,是否会删除初始群组
    ENCRYPT_METHOD SHA512 密码加密算法

  4. useradd要参考的文档

    /etc/default/useradd
    /etc/login.defs
    /etc/skel/*

用户删除

通过命令userdel删除用户

  1. 删除用户账号密码相关参数 /etc/passwd /etc/shadow
  2. 删除使用者群组相关参数 /etc/group /etc/gshadow
  3. 用户个人档案数据 /home/uername /var/spool/mail/username

如果只是暂时不启用某用户,可以将/etc/passwd的第八个字段账号失效日期设置为0

确认删除某个用户之前,最好先删除相关档案 find / -user username

用户特殊的shell 和 PAM模块

/sbin/nologin

/sbin/nologin 是不可登录shell,可以添加/etc/nologin.txt告知用户不可登录的原因。

PAM模块

PAM 通过一个与程序名称相同的配置文件进行验证分析需求。

---- 以passwd程序为例 ----
用户执行/usr/bin/passwd程序,并输入密码
passwd呼叫PAM模块进行验证
PAM到/etc/pam.d/下搜寻与程序同名(passwd)的配置文件
依据/etc/pam.d/passwd内的设定,引用相关PAM模块进行验证
将验证结果回传给passwd程序
passwd根据PAM回传结果做下一步动作

---- PAM配置文件 ----
#%PAM-1.0 //PAM版本说明
auth include system-auth //每一行都是一个验证过程
account include system-auth
password include system-auth
//上面每一行都是呼叫/etc/pam.d/system-auth档案进行验证
-- 第一个字段 (验证类型)
---- auth (authentication的缩写,检验使用者的身份验证)
---- account (authorization授权,检验使用者是否有正确的权限)
---- password (修改变更密码)
---- session (管理使用者使用PAM期间的环境设定)
------ 验证类型一般是有顺序的
-- 第二个字段 (验证的控制标识)
---- required (成功返回success,失败返回failure,总会继续验证流程)
---- requisite (失败立刻返回failure,并终止验证,成功则带有success,并继续验证)
---- sufficient (成功立刻返回success,并终止验证,失败则带有failure,并继续验证)
---- optional (这个模块空间大多用于显示信息)
-- 第三个字段 (PAM模块)
---- pam_securetty.so (限制系统管理员只能从安全的终端机登录)
------ 如root能从tty1-tty7登录,不能通过telnet登入linux主机
---- pam_nologin.so (限制一般用户是否能够登入主机)
------ 该模块存在时,一般使用者无法登入系统
---- pam_selinux.so
---- pam_console.so (让使用者可以通过特许终端接口登入系统)
---- pam_loginuid.so (验证使用者的UID在规范的范围内)
---- pam_env.so (用于设定环境变量的一个模块)
---- pam_unix.so
---- pam_cracklib.so (用于验证密码的强度)
---- pam_limits.so (ulimit命令是通过该模块提供功能的,可参考/etc/security/limits.conf)

/etc/security/limits.conf文件

user1 soft fsize 90000
user2 hard fsize 100000
@group1 hard maxlogins 1
账号 限制依据 限制项目 限制值
账号若为群组可以加上@,如@group1
限制依据 严格为hard 警告为soft
文件设定完成就生效

/var/log/security/var/log/messages

PAM产生的信息如错误信息等,会记录在/var/log/security中

相关目录

/etc/pan.d/* 每个程序个别的PAM配置文件
/lib/security/* PAM模块档案的实际放置目录
/etc/security/* 其他PAM环境配置文件
**/usr/share/doc/pam-*/ ** 详细的PAM说明文档

pam_cracklib.so验证字符串是否在字典中

散乱知识

登录Linux系统时,是通过UIDGID进行识别的,而不是通过账号名

ID账号的对应关系记录与/etc/passwd/etc/group

整个登录的审核过程 /etc/passwd中寻找账号 -> 找到账号对应UID和GID -> 同时读出家目录和shell设定 -> 在/etc/shadow内找到对应的面进行审核 -> 进入shell

PAM密码管理机制位于/etc/pam.d/passwd

账号管理例子

---- 例子1
groupadd mygroup1
useradd -G mygroup1 -c "1st user" myuser1
useradd -G mygroup1 -c "2nd user" myuser2
useradd -c "3rd user" -s "/sbin/nologin" myuser3
echo "passwd" | passwd --stdin myuser1
echo "passwd" | passwd --stdin myuser2
echo "passwd" | passwd --stdin myuser3

---- 例子2
groupadd projetca
useradd -G projecta -c "projecta user" pro1
useradd -G projecta -c "projecta user" pro2
useradd -G projecta -c "projecta user" pro3
echo "passwd" | passwd --stdin pro1
echo "passwd" | passwd --stdin pro2
echo "passwd" | passwd --stdin pro3
mkdir /srv/projecta
chgrp projecta /srv/projecta
chmod 2770 /srv/projecta

主机细部权限控制 ACL (Access Control List)

ACL可以针对 使用者 群组 和默认权限 进行设定

查看是否开启acl

mount 查看某个文件系统位于哪个分区
dumpe2fs -h 分区装置档案 通过Default mount options进行查看

加入acl功能

mount -o remount,acl /
mount
---- 若需要每次开机都起作用
vim /etc/fstab
LABEL=/1 / ext3 defaults,acl 1 1
---- 即可

转换成root身份

  1. su 以root身份登录(需要root密码)
  2. sudo 执行root的指令串

手动修改账号的相关配置文件

配置文件检查

  1. pwck 检查/etc/passwd和/etc/shadow文件是否书写正确
  2. grpck 检查/etc/group和/etc/gshadow等和群组有关的配置文件是否书写正确
  3. pwconv 将/etc/passwd中的密码移动到/etc/shadow中
  4. pwunconv 将/etc/shadow中的密码写回/etc/passwd
  5. chpasswd 读入未加密的密码,经过加密后,写入/etc/shadow中

    格式为 "username:password",如 echo "username:passwd" | chpasswd -m
    有passswd命令一般不使用该命令

手动建立账号步骤

  1. vi /etc/group 先建立群组

    groupname❌520:

  2. grpconv 将/etc/group和/etc/gshadow同步

    grpconv

  3. vi /etc/passwd 建立账号的各个属性

    username❌700:520::/home/username:/bin/bash

  4. pwconv 将/etc/passwd和/etc/shadow同步

    pwconv

  5. passwd username 建立账号的密码

    passwd username

  6. cp -a /etc/skel /home/username 建立用户家目录

    cp -a /etc/skel /home/username

  7. chown -R username:groupname /home/username 更改用户家目录属性

    chown -R username:groupname /home/username
    chmod 700 /home/username

大量新增账号模板

文件名 account1.sh

#!/bin/bash
# 该程序用于新增账号,功能为
# 1. 检查account1.txt是否存在,并将该档案内的账号取出
# 2. 建立上述档案的账号
# 3. 将上述账号的密码设置成 [强制第一次进入需要修改密码]
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

# 检查 account1.txt是否存在
if [ ! -f account.txt ];then
    echo "所需要的账号档案不存在,请建立account1.txt,每行一个账号名称"
    exit 1
if

usernames=$(cat account1.txt)

for username in $usernames
do
    useradd $username
    echo $username | passwd --stdin $username
    chage -d 0 $username
done

设定acl参数

通过getfacl查看acl设定,通过setfacl设定acl

命令

  1. passwd (修改密码)

    passwd [--stdin] 通过管线获取密码
    passwd -l 意思为Lock,会在/etc/shadow第二栏加上!,使密码失效
    passwd -u 意思为unlock
    passwd -s 列出密码相关的参数
    passwd -n 多久不能修改密码天数
    passwd -x 多久内要修改密码
    passwd -w 密码过期前的警告天数
    passwd -i 密码失效日期
    passwd username 修改username的密码 (默认修改自己的密码)

  2. groups (查看自己加入的所有群组)
  3. newgrp (切换有效群组)

    newgrp groupname 其中groupname必须是支持的群组
    -- newgrp会进入一个新的shell环境,如要回到原来的shell环境,需要exit,同时有效群组会恢复

  4. useradd (新增用户)

    useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
    useradd -M 强制,不要建立家目录(系统账号默认值)
    useradd -m 强制,需要建立家目录(一般账号默认值)
    useradd -r 建立一个系统账号,系统账号的UID有限制 (参考/etc/login.defs)
    useradd -s 默认shell为/bin/bash
    useradd -f 指定密码是否失效 0为立刻失效,-1为永远不失效
    useradd -D 列出useradd的默认值
    -- 默认会建立家目录,权限值为700,并建立一个与账号一模一样的群组名
    -- useradd 默认会帮我们完成
    ---- 在/etc/passwd中建立一行与账号有关的数据,包括建立UID/GID/家目录等
    ---- 在/etc/shadow中将此账号的密码相关参数填入,但是尚未有密码
    ---- 在/etc/group中建立一个与账号名称一模一样的群组
    ---- 在/home底下建立一个与账号同名的用户家目录,且权限为700
    -- 例子
    useradd -u 700 -g users username
    useradd -r username 建立一个系统账号,默认不会有家目录

  5. chage (修改密码参数)

    chage [-ldEImMW] 账号名
    chage -l 列出账号的详细密码参数
    chage -d 修改最近一次修改密码日期,格式为YYYY-MM-DD
    chage -E 修改账号失效日期,格式为YYYY-MM-DD
    chage -I 修改密码失效日期,天数
    chage -m 修改密码最短保留天数
    chage -M 修改密码多久需要变更
    chage -W 修改密码过期前警告天数
    例子
    chage -d 0 username 新建的username第一次登入必须修改密码

  6. usermod (修改账号相关参数)

    usermod [-cdefgGlsuLU] username
    usermod -c 后接账号说明
    usermod -d 后接账号家目录
    usermod -e 后接账号失效日期,格式YYYY-MM-DD
    usermod -f 后接天数,密码过期后的宽限时间
    usermod -g 后接初始群组
    usermod -G 后接次要群组
    usermod -a 与G合用,增加次要群组的支持
    usermod -l 修改账号名称
    usermod -s 修改默认shell
    usermod -u 修改UID
    usermod -L 暂时将用户密码冻结
    usermod -U 解除冻结
    例子
    chown -R username:groupname /home/username 连同目录底下的用户群组一起变更

  7. userdel (删除用户)

    userdel [-r] username
    userdel -r 连同用户的家目录一起删除

  8. finger (查看用户信息,一般用户可使用)

    finger [-s] username
    finger -s 仅列出用户的账号,全名,终端机代号与登入的时间等等
    finger 列出目前登入用户的信息
    -- 列出基本都是/etc/passwd的内容
    ---- login -> 使用者账号
    ---- Name -> 全名,批注
    ---- Directory -> 家目录
    ---- Shell -> 所使用shell
    ---- Never logged in -> 账号登入主机的情况
    ---- No mail -> 调查/var/spool/mail中的资料
    ---- No plan -> 调查~username/.plan档案

  9. chfn (修改用户数据,finger数据,一般用户可使用)

    chfn [-foph] 账号名
    chfn -f 后接大名
    chfn -o 办公室房间号码
    chfn -p 办公室电话号码
    chfn -h 家里电话号码

  10. chsh (修改默认shell,一般用户可使用)

    chsh [-ls]
    chsh -l 列出所有的可用shell (实际上是/etc/shells的内容)
    chsh -s 设定修改自己的shell
    -- 例子
    chsh -s /bin/csh (修改成/bin/csh)

  11. id (查询某人或自己的UID/GID等)

    id username 查询某人
    uid gid groups context
    context=为SELinux的内容

  12. groupadd (新增群组)

    groupadd [-g gid] [-r] 组名
    groupadd -g gid 指定GID
    groupadd -r 建立系统群组

  13. groupmod (修改群组相关参数)

    groupmod [-g gid] [-n groupname] 群组名
    groupmod -g gid 修改GID
    groupmod -n groupname 修改组名

  14. groupdel (删除群组)

    groupdel groupname
    删除群组时,必须没有用户使用该群组为起始群组
    某则必须 1. 修改该用户的GID 2. 删除该用户

  15. gpasswd (群组管理功能)

    -- root的动作
    gpasswd groupname 给予groupname一个密码
    gpasswd [-A user1,..] [-M user3,..] groupname
    gpasswd -A user1,.. 将群组的主控权交由后面的使用者管理
    gpasswd -M user3,.. 将某些账号加入这个群组中
    gpasswd -r 移除groupname的密码
    gpasswd -R 让groupname的密码失效
    -- 群组管理员的动作
    gpasswd [-ad] user groupname
    gpasswd -a 将user加入到groupname群组中
    gpasswd -d 将user移出groupname群组

    acl

  16. getfacl (查看档案的acl设定)
  17. setfacl (设定档案的acl)

    setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
    setfacl -m 设定后续的acl参数给档案使用,不可与-x一起用
    setfacl -x 删除后续的acl参数
    setfacl -b 移除所有的acl参数设定
    setfacl -k 移除预设的acl参数设定
    setfacl -R 递归设定acl
    setfacl -d 设定预设的acl参数,只对目录有效,在该目录新建的档案会引用此默认值
    -- 针对特定用户
    setfacl -m u:账号列表:rwx filename
    -- 针对特定群组
    setfacl -m g:群组列表:rwx filename
    -- 针对有效权限mask的设定 通过mask规范最大允许权限
    setfacl -m m:rwx filename
    -- 针对预设权限的设定
    setfacl -m d:ug:rwx

用户

  1. su (切换用户)

    su [-lm] [-c 指令] username
    su - 或 su -l 使用login-shell的方式切换用户
    su -m 使用目前的环境设定,不读取新的配置文件
    su -c 仅执行一次指令,执行完毕后退出
    单纯地使用su是切换到root用户,以non-login-shell方式

  2. sudo (以其他用户身份执行)

    可执行sudu命令的用户需要在/etc/sudoers中进行规范
    sudo [-b] [-u 新使用者账号]
    sudo -b 将命令放到后台系统自动执行,不与目前shell产生影响
    sudo -u user 切换到user的身份执行命令,无则为root

  3. visudo (修改/etc/sudoers档案)
  4. w (查看目前已登入系统用户的信息)

    用户名 登入终端 IP接入口 登入时间等

  5. who (查看目前已登入系统用户的信息)

    用户名 登入 登入时间和IP

  6. lastlog (查看每个账号最近的登入时间)
  7. write 对用户发送信息

    write 使用者账号 [用户所在的终端接口]

  8. mesg (设置是否接收信息)

    mesg [y|n]
    mesg 可以查看别人发送的信息

  9. wall (对线上所有人发送广播)

    wall "STR"

  10. mail (发送邮件)

    mail username@localhost -s "邮件标题"
    最后输入小数点.并
    可以利用数据流重导向 <
    mail username -s "title" < file
    mail 查看信箱

    其他

. sh (执行脚本)

sh -c 执行字符串对应的脚本

参考

鸟哥Linux私房菜 第三版

转载于:https://www.cnblogs.com/smallpi/p/7358123.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值