linux 账号管理与ACL权限设定

时间:2021-08-06 10:01:46

此文涉及命令:useradd、usermod、userdel、passwd、chage、setfacl、getfacl、su、sudo、fingr、chfn、chsh、id、groupadd、groupmod、groupdel、gpasswd、visudo、w、who、lastlog、write、mesg、wall、mall、pwck、pwconv、pwunconv、chpasswd。

知识点:

  1. /etc/passwd 档案结构
    1. 账号名称。
    2. 密码
    3. UID
    4. GID
    5. 用户信息栏说明
    6. 家目录
    7. shell
  2. /etc/shadow 档案结构
    1. 账号名称
    2. 密码
    3. 最近更动密码的时间 (相对于1970年1月1日作为1而累加的日期)
    4. 密码不可被更动的天数 (与3相比)
    5. 密码需要重新变更的天数 (与3相比)
    6. 密码需要变更期限前的警告天数 (与5相比)
    7. 密码过期后的账号宽限时间(密码失效日)  (与5相比)
    8. 账号失效日期
    9. 保留
  3. 有效群组与初始群组
    • /etc/group 档案结构
      • 组名
      • 群组密码
      • GID
      • 此群组支持的账号名称
  4. 有效群组与支持群组的观察
    • [dmtsai@www ~]$ groups---------------------------查看
      • 第一个输出为有效群组
    • [dmtsai@www ~]$ newgrp USERS---------------------更改
    • /etc/gshadow 档案结构
      • 组名
      • 密码栏,同样的,开头为!表示无合法密码,所以无群组管理员
      • 群组管理员的账号
      • 该群组的所属账号(与/etc/group内容相同)
  5. 使用useradd这只程序在建立linux上的账号时,至少会参考以下档案:
    • /etc/default/useradd
    • /etc/login.defs
    • /etc/skel/*   ------新建用户家目录的内容
  6. passwd设置用户密码--------------480
    • 要帮一般账号建立密码需要使用『 passwd 账号 』的格式,使用『 passwd 』表示修改自己的密码
    • passwd -l vbird2 限制vbird2的登录
    • passwd -u vbird2 取消限制
  7. chage-----详细显示密码信息------483
    • 可通过该命令设置使用者在第一次登入时, 强制她们一定要更改密码后才能够使用系统资源
    • [root@www ~]# useradd agetest
    • [root@www ~]# echo "agetest" | passwd --stdin agetest
    • [root@www ~]# chage -d 0 agetest
    • # 此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题!
  8. 用户功能
    1. usermod--------账户属性的修改
    2. userdel--------删除账户
    3. finger------查询用户相关的信息
      • finger [-s] username
        • -s :仅列出用户的账号、全名、终端机代号与登入时间等等;
        • -m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)
    4. chfn---------change finger 的意思!
      • chfn [-foph] [账号名]
        • -f :后面接完整的大名;
        • -o :您办公室的房间号码;
        • -p :办公室的电话号码;
        • -h :家里的电话号码!
    5. chsh-----------change shell
      • chsh [-ls]
        • -l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
        • -s :设定修改自己的 Shell 啰
    6. id [username]--------查询个人uid或gid相关信息。
  9. 群组的管理
    • groupadd [-g gid] [-r] 组名
      • -g :后面接某个特定的 GID ,用来直接给予某个 GID ~
      • -r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
    • groupmod [-g gid] [-n group_name] 群组名
      • -g :修改既有的 GID 数字;
      • -n :修改既有的组名
    • groupdel [groupname]
  10. 群组管理员功能---------gpasswd
    1. # 关于系统管理员(root)做的动作:
      • [root@www ~]# gpasswd groupname
      • [root@www ~]# gpasswd [-A user1,...] [-M user3,...] groupname
      • [root@www ~]#gpasswd [-rR] groupname
      • 选项与参数: :若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
        • -A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
        • -M :将某些账号加入这个群组当中!
        • -r :将 groupname 的密码移除
        • -R :让 groupname 的密码栏失效
    2. # 关于群组管理员(Group administrator)做的动作:
      • [someone@www ~]$ gpasswd [-ad] user groupname
      • 选项与参数:
        • -a :将某位使用者加入到 groupname 这个群组当中!
        • -d :将某位使用者移除出 groupname 这个群组当中。
  11. 主机的细部权限规划:ACL 的使用---------------494
    • ACL 可以针对单一使用者,单一档案或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
    • 主要可以针对几个项目:
      • 使用者 (user):可以针对使用者来设定权限;
      • 群组 (group):针对群组为对象来设定其权限;
      • 默认属性 (mask):还可以针对在该目录下在建立新档案/目录时,规范新数据的默认权限;
    • 文件系统是否支持ACL
      • [root@www ~]# mount <==直接查阅挂载参数的功能
      • [root@www ~]# dumpe2fs -h /dev/hda2 <==由 superblock 内容去查询
      • [root@www ~]# mount -o remount,acl / 重新挂载并添加ACL功能
      • [root@www ~]# vi /etc/fstab    ----编辑目录使之永久生效
      • LABEL=/1 / ext3 defaults,acl 1 1
  12. su---切换使用者身份
    • 执行特殊命令需要root密码 ,无法切换shell为/sbin/nologin的用户
  13. sudo-----切换使用者身份
    1. 执行特殊命令需要自己的密码或与用密码,但需要在/etc/sudoers中添加执行者。
    2. sudo执行流程:
      • 当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;
      • 若使用者具有可执行 sudo 的权限后,便让使用者『输入用户自己的密码』来确认;
      • 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
      • 若欲切换的身份与执行者身份相同,那也不需要输入密码。
    3. visudo 与 /etc/sudoers
      • 使用者账号 登入者的来源主机名=(可切换的身份) 可下达的指令
      • root                      ALL=(ALL)   ALL <==这是默认值
        1. 系统的哪个账号可以使用 sudo 这个指令的意思,默认为 root 这个账号;
        2. 当这个账号由哪部主机联机到本 Linux 主机,意思是这个账号可能是由哪一部网络主机联机过来的,这个设定值可以指定客户端计算机(信任用户的意思)。默认值 root 可来自任何一部网络主机
        3. 这个账号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;
        4. 可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。 预设 root 可以切换任何身份且进行任何指令之意。
    4. 利用群组以及免密码的功能处理 visudo
      • %wheel ALL=(ALL) ALL <==大约在 84 行左右,请将这行的 # 拿掉!
      • # 在最左边加上 % ,代表后面接的是一个『群组』之意!改完请储存后离开
      • %wheel ALL=(ALL) NOPASSWD: ALL <==大约在 87 行左右,请将 # 拿掉!
      • 有限制的指令操作:
        • myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
        • 『 ! 』代表『不可执行』的意思。可执行的命令中,当允许中包含有拒绝,应把允许放在前面,否则拒绝会失效。即!/usr/bin/passwd root不可放在/usr/bin/passwd[A-Za-z]*前面!
    5. 透过别名建置 visudo   -----------别名名称必须是大写英文字母组合
      • visudo 的别名可以是『指令别名、帐户别名、主机别名』等。
        • [root@www ~]# visudo <==注意是 root 身份
        • User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
        • Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
        • ADMPW ALL=(root) ADMPWCOM
    6. sudo 搭配 su 的使用方式:
      • [root@www ~]# visudo
      • User_Alias ADMINS = pro1, pro2, pro3, myuser1
      • ADMINS ALL=(root) /bin/su -
      • 上述的 pro1, pro2, pro3, myuser1 这四个人,只要输入『 sudo su - 』并且输入『自己的密码』后,立刻变成 root 的身份!不但 root 密码不会外流,用户的管理也变的非常方便!
  14. 『 /etc/nologin.txt 』这个档案,存放/sbin/nologin不能登入的原因,可自行编辑。
  15. PAM模块----------------508
    • /etc/securetty
    • /var/log/secure  查看不可登录的原因
  16. 查询使用者: w, who, last, lastlog
    • 查询目前登入的账户:w或who
    • 查询每个账户最近的登录时间: lastlog        读取的是/var/log/lastlog档案内容
  17. 使用者对谈: write, mesg, wall
    • write 使用者账号 [用户所在终端接口]   ------先使用who查询
    • [vbird1@www ~]$ mesg n    关闭消息器 -----但是还能接收到root的 开启是 y  查询与带参数
    • [root@www ~]# wall "I will shutdown my linux server..."  对所有的在线用户方发送消息.
  18. 使用者邮件信箱: mail
    • 『 mail username@localhost -s "邮件标题" 』
    • [root@www ~]# mail vbird1 -s "nice to meet you"   实际操作中是使用的 mail 账户名 没有-s选项 出现Subject 然后输入
    • 三种常用格式发信
      1. mail -s test root@test #第一种方法,你可以把当前shell当成编辑器来用,编辑完内容后Ctrl-D结束
      2. echo “mail content”|mail -s test root@test  #第二种方法,利用管道
      3. mail -s test root@test < file #第三种方法,以file的内容为邮件内容发信
    • mail      读取新建 &? 查询
      • &d n  删除第n封
      • x     退出  与做任何操作退出
      • q     退出
  19. 手动新增使用者
    1. 一些检查工具
      • pwck pwck 这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息
      • pwconv 『将 /etc/passwd 内的账号与密码,移动到 /etc/shadow 当中!』
        • 比对 /etc/passwd 及 /etc/shadow ,若 /etc/passwd 内存在的账号并没有对应的/etc/shadow 密码时,则 pwconv 会去 /etc/login.defs 取用相关的密码数据,并建立该账号的 /etc/shadow 数据;
        • 若 /etc/passwd 内存在加密后的密码数据时,则 pwconv 会将该密码栏移动到 /etc/shadow 内,并将原本的/etc/passwd 内相对应的密码栏变成 x !
      • pwunconv 『将 /etc/shadow 内的密码栏数据写回 /etc/passwd 当中, 并且删除 /etc/shadow 档案。
      • chpasswd 『读入未加密前的密码,并且经过加密后, 将加密后的密码写入 /etc/shadow 当中。每笔数据的格式是『 username:password 』。[root@www ~]# echo "dmtsai:abcdefg" | chpasswd -m   ----m为MD5加密方法
    2. 手动建立步骤
      1. 先建立所需要的群组 ( vi /etc/group );
      2. 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );
      3. 建立账号的各个属性 ( vi /etc/passwd );
      4. 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );
      5. 建立该账号的密码 ( passwd accountname );
      6. 建立用户家目录 ( cp -a /etc/skel /home/accountname );
      7. 更改用户家目录的属性 ( chown -R accountname.group /home/accountname )。

命令:

  1. useradd------------账号的添加
    • useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM][-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
      • -u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
      • -g :后面接的那个组名就是我们上面提到的 initial group 啦~(/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 为永久不失效(密码只会过期而强制于登入时重新设定而已。)
    • useradd -D   ---------useradd默认值参考档内容-------位置在/etc/default/useradd
      • GROUP=100 <==预设的群组 --------------RHEL和centos不使用
      • HOME=/home <==默认的家目录所在目录
      • INACTIVE=-1 <==密码失效日,在 shadow 内的第 7 栏
      • EXPIRE= <==账号失效日,在 shadow 内的第 8 栏
      • SHELL=/bin/bash <==预设的 shell
      • SKEL=/etc/skel <==用户家目录的内容数据参考目录
      • CREATE_MAIL_SPOOL=yes <==是否主动帮使用者建立邮件信箱(mailbox)
  2. passwd-----------为账号设置密码
    • passwd [--sdtin] <==所有人均可使用来改自己的密码
    • passwd [-l] [-u] [--sdtin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能
      • --stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
      • -l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
      • -u :与 -l 相对,是 Unlock 的意思!  
      • -S :列出密码相关参数,亦即 shadow 档案内的大部分信息。
      • -e :  强制下次登录必须修改密码
      • -n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
      • -x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
      • -w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
      • -i :后面接『日期』,shadow 的第 7 字段,密码失效日期
  3. chage---------显示密码详细信息
    • chage [-ldEImMW] 账号名
      • -l :列出该账号的详绅密码参数;
      • -d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
      • -E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
      • -I :后面接天数,修改 shadow 第七字段(密码失效日期)
      • -m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
      • -M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
      • -W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)
  4. 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 密码栏的 ! 拿掉,解冻啦!
  5. userdel---------删除账户
    • userdel [-r] username
      • -r :连同用户的家目录也一起初除
    • 如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username之前, 先以『 find / -user username 』查出整个系统内属于 username 的档案,然后再加以删除吧!
  6. ACL 的设定技巧: getfacl, setfacl---------------------494------------先让添加文件系统支持ACL功能
    • setfacl:设定某个目录/档案的 ACL 规范。
      • setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
        • -m :设定后续的 acl 参数给档案使用,不可与 -x 合用;
        • -x :删除后续的 acl 参数,不可与 -m 合用;
        • -b :移除所有的 ACL 设定参数;
        • -k :移除预设的 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;
        • -R :递归设定 acl ,亦即包括次目录都会被设定起来;
        • -d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
    • 例:
      1. 针对单一使用者的设定方式:
        • -rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
        • setfacl -m u:vbird1:rx acl_test1
        • 利用『 u:使用者:权限 』的方式来设定的啦!
        • -rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
      2. 2.针对特定群组的方式:
        • 设定规范:『 g:[群组列表]:[rwx]
      3. 针对有效权限 mask 的设定方式:
        • 设定规范:『 m:[rwx] 』
        • 他的意义是:使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效
      4. 针对预设权限的设定方式:
        • 设定规范:『 d:[ug]:使用者列表:[rwx] 』
        • 他的意义是:一般对于目录递归设定,设定后目录内新建的档案或目录都添加此设置的属性
    • getfacl:取得某个档案/目录的 ACL 设定项目;
      • getfacl filename     参数同上
  7. su [-lm] [-c 指令] [username]
    • - :单纯使用 - 如『 su - 』代表使用 login-shell 的变量档案读取方式来登入系统;若使用者名称没有加上去,则代表切换为 root 的身份。即更换环境变量。
    • -l :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。
    • -m :-m 与 -p 是一样的,表示『使用目前的环境设定,而不读取新使用者的配置文件』
    • -c :仅进行一次指令,所以 -c 后面可以加上指令喔!
  8. sudo [-b] [-u 新使用者账号]
    • -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
    • -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。
    • -l  :查看能够使用的范围。