linux 账号管理与ACL权限设定
此文涉及命令: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。
知识点:
- /etc/passwd 档案结构
- 账号名称。
- 密码
- UID
- GID
- 用户信息栏说明
- 家目录
- shell
- /etc/shadow 档案结构
- 账号名称
- 密码
- 最近更动密码的时间 (相对于1970年1月1日作为1而累加的日期)
- 密码不可被更动的天数 (与3相比)
- 密码需要重新变更的天数 (与3相比)
- 密码需要变更期限前的警告天数 (与5相比)
- 密码过期后的账号宽限时间(密码失效日) (与5相比)
- 账号失效日期
- 保留
- 有效群组与初始群组
- /etc/group 档案结构
- 组名
- 群组密码
- GID
- 此群组支持的账号名称
- /etc/group 档案结构
- 有效群组与支持群组的观察
- [dmtsai@www ~]$ groups---------------------------查看
- 第一个输出为有效群组
- [dmtsai@www ~]$ newgrp USERS---------------------更改
- /etc/gshadow 档案结构
- 组名
- 密码栏,同样的,开头为!表示无合法密码,所以无群组管理员
- 群组管理员的账号
- 该群组的所属账号(与/etc/group内容相同)
- [dmtsai@www ~]$ groups---------------------------查看
- 使用useradd这只程序在建立linux上的账号时,至少会参考以下档案:
- /etc/default/useradd
- /etc/login.defs
- /etc/skel/* ------新建用户家目录的内容
- passwd设置用户密码--------------480
- 要帮一般账号建立密码需要使用『 passwd 账号 』的格式,使用『 passwd 』表示修改自己的密码
- passwd -l vbird2 限制vbird2的登录
- passwd -u vbird2 取消限制
- chage-----详细显示密码信息------483
- 可通过该命令设置使用者在第一次登入时, 强制她们一定要更改密码后才能够使用系统资源
- [root@www ~]# useradd agetest
- [root@www ~]# echo "agetest" | passwd --stdin agetest
- [root@www ~]# chage -d 0 agetest
- # 此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题!
- 用户功能
- usermod--------账户属性的修改
- userdel--------删除账户
- finger------查询用户相关的信息
- finger [-s] username
- -s :仅列出用户的账号、全名、终端机代号与登入时间等等;
- -m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)
- finger [-s] username
- chfn---------change finger 的意思!
- chfn [-foph] [账号名]
- -f :后面接完整的大名;
- -o :您办公室的房间号码;
- -p :办公室的电话号码;
- -h :家里的电话号码!
- chfn [-foph] [账号名]
- chsh-----------change shell
- chsh [-ls]
- -l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!
- -s :设定修改自己的 Shell 啰
- chsh [-ls]
- id [username]--------查询个人uid或gid相关信息。
- 群组的管理
- groupadd [-g gid] [-r] 组名
- -g :后面接某个特定的 GID ,用来直接给予某个 GID ~
- -r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
- groupmod [-g gid] [-n group_name] 群组名
- -g :修改既有的 GID 数字;
- -n :修改既有的组名
- groupdel [groupname]
- groupadd [-g gid] [-r] 组名
- 群组管理员功能---------gpasswd
- # 关于系统管理员(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 的密码栏失效
- # 关于群组管理员(Group administrator)做的动作:
- [someone@www ~]$ gpasswd [-ad] user groupname
- 选项与参数:
- -a :将某位使用者加入到 groupname 这个群组当中!
- -d :将某位使用者移除出 groupname 这个群组当中。
- 主机的细部权限规划: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
- su---切换使用者身份
- 执行特殊命令需要root密码 ,无法切换shell为/sbin/nologin的用户
- sudo-----切换使用者身份
- 执行特殊命令需要自己的密码或与用密码,但需要在/etc/sudoers中添加执行者。
- sudo执行流程:
- 当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;
- 若使用者具有可执行 sudo 的权限后,便让使用者『输入用户自己的密码』来确认;
- 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
- 若欲切换的身份与执行者身份相同,那也不需要输入密码。
- visudo 与 /etc/sudoers
- 使用者账号 登入者的来源主机名=(可切换的身份) 可下达的指令
- root ALL=(ALL) ALL <==这是默认值
- 系统的哪个账号可以使用 sudo 这个指令的意思,默认为 root 这个账号;
- 当这个账号由哪部主机联机到本 Linux 主机,意思是这个账号可能是由哪一部网络主机联机过来的,这个设定值可以指定客户端计算机(信任用户的意思)。默认值 root 可来自任何一部网络主机
- 这个账号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;
- 可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。 预设 root 可以切换任何身份且进行任何指令之意。
- 利用群组以及免密码的功能处理 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]*前面!
- 透过别名建置 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
- visudo 的别名可以是『指令别名、帐户别名、主机别名』等。
- 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 密码不会外流,用户的管理也变的非常方便!
- 『 /etc/nologin.txt 』这个档案,存放/sbin/nologin不能登入的原因,可自行编辑。
- PAM模块----------------508
- /etc/securetty
- /var/log/secure 查看不可登录的原因
- 查询使用者: w, who, last, lastlog
- 查询目前登入的账户:w或who
- 查询每个账户最近的登录时间: lastlog 读取的是/var/log/lastlog档案内容
- 使用者对谈: write, mesg, wall
- write 使用者账号 [用户所在终端接口] ------先使用who查询
- [vbird1@www ~]$ mesg n 关闭消息器 -----但是还能接收到root的 开启是 y 查询与带参数
- [root@www ~]# wall "I will shutdown my linux server..." 对所有的在线用户方发送消息.
- 使用者邮件信箱: mail
- 『 mail username@localhost -s "邮件标题" 』
- [root@www ~]# mail vbird1 -s "nice to meet you" 实际操作中是使用的 mail 账户名 没有-s选项 出现Subject 然后输入
- 三种常用格式发信
- mail 读取新建 &? 查询
- &d n 删除第n封
- x 退出 与做任何操作退出
- q 退出
- 手动新增使用者
- 一些检查工具
- 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加密方法
- 手动建立步骤
- 先建立所需要的群组 ( vi /etc/group );
- 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );
- 建立账号的各个属性 ( vi /etc/passwd );
- 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );
- 建立该账号的密码 ( passwd accountname );
- 建立用户家目录 ( cp -a /etc/skel /home/accountname );
- 更改用户家目录的属性 ( chown -R accountname.group /home/accountname )。
- 一些检查工具
命令:
- 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)
- useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM][-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
- 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 字段,密码失效日期
- chage---------显示密码详细信息
- chage [-ldEImMW] 账号名
- -l :列出该账号的详绅密码参数;
- -d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
- -E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
- -I :后面接天数,修改 shadow 第七字段(密码失效日期)
- -m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
- -M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
- -W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)
- chage [-ldEImMW] 账号名
- 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 密码栏的 ! 拿掉,解冻啦!
- usermod [-cdegGlsuLU] username
- userdel---------删除账户
- userdel [-r] username
- -r :连同用户的家目录也一起初除
- 如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username之前, 先以『 find / -user username 』查出整个系统内属于 username 的档案,然后再加以删除吧!
- userdel [-r] username
- 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 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
- setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
- 例:
- 针对单一使用者的设定方式:
- -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.针对特定群组的方式:
- 设定规范:『 g:[群组列表]:[rwx]
- 针对有效权限 mask 的设定方式:
- 设定规范:『 m:[rwx] 』
- 他的意义是:使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效
- 针对预设权限的设定方式:
- 设定规范:『 d:[ug]:使用者列表:[rwx] 』
- 他的意义是:一般对于目录递归设定,设定后目录内新建的档案或目录都添加此设置的属性
- 针对单一使用者的设定方式:
- getfacl:取得某个档案/目录的 ACL 设定项目;
- getfacl filename 参数同上
- setfacl:设定某个目录/档案的 ACL 规范。
- su [-lm] [-c 指令] [username]
- - :单纯使用 - 如『 su - 』代表使用 login-shell 的变量档案读取方式来登入系统;若使用者名称没有加上去,则代表切换为 root 的身份。即更换环境变量。
- -l :与 - 类似,但后面需要加欲切换的使用者账号!也是 login-shell 的方式。
- -m :-m 与 -p 是一样的,表示『使用目前的环境设定,而不读取新使用者的配置文件』
- -c :仅进行一次指令,所以 -c 后面可以加上指令喔!
- sudo [-b] [-u 新使用者账号]
- -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
- -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。
- -l :查看能够使用的范围。