用户和用户组的管理命令
用到的命令主要有:
组命令:groupadd
、groupdel
、groupmod
、gpasswd
、groupmems
、 newgrp
用户命令:useradd
、userdel
、usermod
、passwd
其他相关命令:
getent
:getent passwd USERNAME
、getent shadow GROUPNAME
chage
chsh
id
su
用户组命令:
groupadd
groupadd GROUP_NAME
:创建新组
可选参数:
-g GID
:手动指定GID,默认是上一个组的GID+1-r
:创建系统组
groupmod
groupmod GROUP_NAME
修改组信息
-g GID
:修改GID-n NEW_NAME OLD_NAME
:修改组名
groupdel
groupdel GROUP_NAME
:删除组
例子:
1
2
3
4
5
6
7
8
|
groupadd grp
groupadd -g 2000 grp1
groupadd -r sysgrp
groupadd -r -g 306 sysgrp1
groupmod -g 702 sysgrp1
groupmod -n newsysgrp1 sysgrp1
groupdel grp
|
gpasswd
gpasswd GROUP_NAME
:给组加密码,一般默认不加,不加的话,用户就不能用newgrp
切换属组(组密码那里是两!!
,表示无密码,无密码的组,用户也不能临时切换到这个组。)
groupmems
1
2
3
4
5
6
7
8
9
10
|
用法:groupmems [选项] [动作]
选项:
-g, --group groupname 更改组 groupname,而不是用户的组(只 root)
动作:
-a, --add username 将用户 username 添加到组成员中
-d, --delete username 从组的成员中删除用户 username
-p, --purge 从组中移除所有成员
-l, --list 列出组中的所有成员
|
比如下面,就是列出admins
组里的所有成员,然后删除其中的一个成员natasha
:
1
2
3
4
|
[root❄centos7 skel]☭ groupmems -g admins -l
natasha harry
[root❄centos7 skel]☭ groupmems -g admins -l
harry
|
newgrp
newgrp GROUPNAME
临时切换主组,如果切换不属于的组,要输入组密码。如果不属于的组而且没有设置组密码,则无法切换。
用户命令
useradd
useradd
:创建新用户或者更新默认新用户信息
-u
:指定UID-g
:指定基本组GID,组名必须存在才行,不能用来新建GID。-G GROUP1[,GROUP2,...[GROUPN]]
:指定GID,指明用户的附加组,多个组之间用逗号分隔。-c COMMENT
:注释信息-d HOME_DIR
:指定家目录(本质是通过复制/etc/skel
目录并重命名实现的),如果目录路径本身就存在,则不会为用户复制/etc/skel
下的内容。-s SHELL
: 指定用户的默认shell,可用于所有shell列表存在的shell(shell列表:/etc/shells
)-r
:创建系统用户-D
:修改创建用户时候的默认选项(man useradd
可以看一下详情,,其实更改的就是/etc/default/useradd
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
useradd docker
useradd -u 3000 openstack
useradd -u 3001 -g 3001 openshift
useradd -g cloudgroup cloudstack
useradd -G grp,grp1 archlinux
useradd -c "Hacker Linux" kalilinux
useradd -d /opt/sybase sybase
mkdir /tmp/test1
useradd -d /tmp/test1 test1
useradd -s /bin/csh test2
useradd -s /sbin/nologin test3
|
tips:要查看useradd的默认规则,可以查看
/etc/default/useradd
文件。
1
2
3
4
5
6
7
8
9
|
[root❄centos7 default]☭ cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
|
我们可以看到有个
SKEL
,skel
里存放的是环境变量文件,当创建新用户时候,会复制一份到用户家目录里面。
1
2
3
|
[root❄centos7 default]☭ cd /etc/skel/
[root❄centos7 skel]☭ ls -a
. .. .bash_logout .bash_profile .bashrc .mozilla
|
usermod
usermod
:修改用户属性
-u UID
:修改用户的UID-g
:修改用户所属的基本组-G
:修改用户的附加组,原来的附加组会被覆盖掉-a
:append,和-G
结合使用,表示新添加的组,兵不会覆盖掉原来的组-c COMMENT
:修改注释信息-d
:修改用户的家目录,用户原有的文件不会被转移到新位置。-m
:move-home,更改用户主目录,和-d配合使用,会移动原来家目录的文件。-l
:修改用户名
-s SHELL
: 修改用户的默认shell,可用于所有shell列表存在的shell(shell列表:/etc/shells
)-L
:Lock,锁定用户密码(在原来的密码字符串之前加一个!
)-U
:unlock,解锁用户的密码(删掉!
)
userdel
userdel
:删除用户-r
:删除用户并删除其家目录和mail spool
passwd
passwd
修改用户自己的密码passwd USERNAME
修改其他用户的密码(root有此权限)
-- stdin
参数echo ‘test2' | passwd --stdin test2
记住echo后面的字符串要用弱引用,强引用的话如果密码串里有特殊字符,就会不是原始密码了。
其他相关命令
chage
chage
:change age 更改用户密码过期时间
chage USERNAME
:不跟参数,会进入一个交互式的模式来修改各个时间,如下面:设置最短修改密码时间为0
;最长密码时间为92
天过期,上次更改密码时间保持默认那天(20170526
),快过期的开始警告设置的在快过期前7
天开始,密码过期后,7
天内要修改密码,否则变为不活动(Inactive,即锁住),最后一条是设置账号过期时间,设置为默认不过期(-1
)。
1
2
3
4
5
6
7
8
9
10
|
[root❄centos7 skel]☭ chage gentoo
Changing the aging information for gentoo
Enter the new value, or press ENTER for the default
Minimum Password Age [0]: 0
Maximum Password Age [99999]: 92
Last Password Change (YYYY-MM-DD) [2017-05-26]:
Password Expiration Warning [7]: 7
Password Inactive [-1]: 7
Account Expiration Date (YYYY-MM-DD) [-1]:
|
带参数,下面是参数设置,和上面类似,就是把交互式变成了参数选项:
chage [option] USERNAME
-d
LAST_DAY -d 0
:第一次登陆,强制让你该口令。
-E
–expiredate EXPIRE_DATE
-I
–inactive INACTIVE
-m
–mindays MIN_DAYS
-M
–maxdays MAX_DAYS
-W
–warndays WARN_DAYS
–l
显示密码策略
示例:
1
2
3
4
5
|
chage -d 0 tom #下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
|
id
id [USERNAME]
:显示用户的uid
和gid
,USERNAME
省略的话表示只显示当前用户的id信息。
-u
显示用户id-g
显示基本组id-G
显示所有组id-n
显示名字而不是id
su
su
命令:switch user,切换用户
- 登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
*su -l USERNAME
l就表示login
- 非登陆式切换:不会读取目标用户的配置文件来进行初始化
su USERNAME
Note:管理员可无密码切换到其他任意用户。
参数:-c 'COMMAND'
:仅以目标用户登录,后执行后面的命令,然后就退出
示例:su -test -c 'whoami'
getent
get entries from Name Service Switch libraries
从命名服务切换库获得条目
getent passwd [USERNAME]
:不输入USERNAME默认是全部用户,如果输入了,就是指定的那个
1
2
|
[root❄centos7 skel]☭ getent passwd gentoo
gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
|
getent shadow [GROUPNAME]
:不输入GROUPNAME默认是全部用户组信息,如果输入了,就是指定的那个
1
2
|
[root❄centos7 skel]☭ getent shadow gentoo
gentoo:!!:17312:0:92:7:7::
|
finger
查看用户信息
1
2
3
4
5
6
7
8
9
10
|
[root❄ centos7 ~]☭ finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Sun May 28 16:17 (CST) on pts/0 from 172.17.251.64
4 seconds idle
On since Wed May 24 20:40 (CST) on :0 from :0 (messages off)
On since Wed May 24 20:40 (CST) on pts/2 from :0
3 days 19 hours idle
No mail.
No Plan.
|