1、用户和用户组文件
在linux中,用户账号,用户密码,用户组信息和用户组密码均是储存在不同的配置文件中的。
在linux系统中,所创建的用户账号和其相关信息(密码除外)均是储存在/etc/passwd配置文件中。因为所有用户对passwd文件均有读取的权限,因而密码信息并未保存在该文件中,而是保存在了/etc/shadow的配置文件中。
在passwd文件中,一行定义一个用户账号,每行均由多个不同的数组构成,各数组值间用":”分隔,每位数组均代表该账号某方面的信息。
在刚安装完成的linux系统中,passwd配置文件已有好多账号信息了,这种账号是由系统手动创建的,她们是linux进程或部份服务程序正常工作所须要使用的帐户,这种帐户的最后一个数组的值通常为/sbin/nologin,表示该账号不能拿来登陆linux系统。
在passwd配置文件中,从左至右各数组的对应关系及其涵义:
因为passwd不再保存密码信息,所以用x占位代表。
若要使某个用户帐户不能登入linux,只需设置该用户所使用的shell为/sbin/nologin即可。例如,对于FTP帐户,通常只容许登陆和访问FTP服务器,不容许登陆linux操作系统。若要让某用户没有telnet权限,即不容许该用户借助telnet远程登陆和访问linux操作系统,则设置该用户所使用的shell为/bin/true即可。若要让用户没有telnet和ftp登陆权限,则可设置该用户的shell为/bin/false。
在/etc/shells文件中,若没有/bin/true或/bin/false,则须要自动添加:[root@localhost~]#echo"/bin/false">>/etc/shells[root@localhost~]#echo"/bin/true">>/etc/shells
2、用户密码文件
为安全起见,用户真实的密码采用MD5加密算法加密后,保存在/etc/shadow配置文件中,该文件只有root用户可以读取。
与passwd文件类似,shadow文件也是每行定义和保存一个帐户的相关信息。第一个数组为用户账户名,第二个数组为帐户的密码。
3、用户组账号文件
用户组账号信息保存在/etc/group配置文件中,任何用亩均可以读取。用户组的真实密码保存在/etc/gshadow配置文件中。
在group中,第一个数组代表用户组的名称,第二个数组为x,第三个为用户组的ID号,第四个为该用户组的用户成员列表,各用户名间用冒号分隔。
4、添加用户
创建或添加新用户使用useradd命令来实现,其命令用法为:
useradd[option]username该命令的option选项较多,常用的主要有:-c注释用户设置对帐户的注释说明文字-d主目录指定拿来替代默认的/home/username的主目录-m若主目录不存在,则创建它。-r与-m相结合,可为系统帐户创建主目录-M不创建主目录-edate指定帐户过期的日期。日期格式为MM/DD/YY-fdays账号过期几日后永久停权。若指定为-,则立刻被停权,若为-1,则关掉此功能-g用户组指定将用户加入到那个用户组,该用户组必须存在-G用户组列表指定用户同时加入的用户组列表,各组用逗分隔-n不为用户创建私有用户组-sshell指定用户登入时使用的shell,默认为/bin/bash-r创建一个用户ID大于500的系统帐户,默认不创建对应的主目录-u用户ID自动指定新用户的ID值,该值必须惟一,且小于499-ppassword为新建用户指定登陆密码。此处的password是对应登陆密码经MD5加密后所得到的密码值,不实真实密码原文,因而在实际应用中,该参数选项使用较少,一般单独使用passwd命令来为用户设置登陆密码。
示例:
若要创建一个名为nisj的用户,并作为babyfish用户组的成员,则操作命令为:[root@localhost~]#useradd-gbabyfishnisj[root@localhost~]#idnisjuid=502(nisj)gid=500(babyfish)groups=500(babyfish)[root@localhost~]#tail-1/etc/passwdnisj:x:502:500::/home/nisj:/bin/bash添加用户时,若未用-g参数指定用户组,则系统默认会手动创建一个与用户账号同名的私有用户组。若不须要创建该私有用户组,则可选用-n参数。例如,添加一个名为nsj820的帐户,但不指定用户组,其操作结果为:[root@localhost~]#useraddnsj820[root@localhost~]#idnsj820uid=503(nsj820)gid=503(nsj820)groups=503(nsj820)[root@localhost~]#tail-1/etc/passwdnsj820:x:503:503::/home/nsj820:/bin/bash[root@localhost~]#tail-2/etc/passwdnisj:x:502:500::/home/nisj:/bin/bashnsj820:x:503:503::/home/nsj820:/bin/bash#系统手动创建了名为nsj820的用户组,ID号为503
创建用户帐户时,系统会手动创建该用户对应的主目录,该目录默认置于/home目录下,若要改变位置,可以借助-d参数指定;对于用户登入时使用的shell,默认为/bin/bash,若要修改,则使用-s参数指定
比如,若要创建一个名为vodup的帐户,主目录置于/var目录下,并指定登陆shell为/sbin/nologin,则操作命令为:
[root@localhost~]#useradd-d/var/vodup-s/sbin/nologinvodup[root@localhost~]#idvodupuid=504(vodup)gid=504(vodup)groups=504(vodup)[root@localhost~]#tail-1/etc/passwdvodup:x:504:504::/var/vodup:/sbin/nologin[root@localhost~]#tail-1/etc/groupvodup:x:504:
5、设置账号属性
对于已创建好的用户,可使用usermod命令来更改和设置帐户的各项属性,包括登陆名,主目录,用户组,登陆shell等,该命令用法为:
usermod[option]username部份option选项
(1)改变用户账户名
使用-l参数来实现,命令用法为:usermod-l新用户名原用户名
比如,若要将用户nsj820改名为nsj0820,则操作命令为:[root@localhost~]#usermod-lnsj0820nsj820[root@localhost~]#idnsj0820uid=503(nsj0820)gid=503(nsj820)groups=503(nsj820)[root@localhost~]#tail-1/etc/passwdnsj0820:x:503:503::/home/nsj820:/bin/bash从输出结果可见,用户名已修改为nsj0820。主目录仍为原先的/home/nsj820,若也要修改为/home/nsj0820,则可通过执行以下命令来实现[root@localhost~]#usermod-d/home/nsj0820nsj0820[root@localhost~]#idnsj0820uid=503(nsj0820)gid=503(nsj820)groups=503(nsj820)[root@localhost~]#tail-1/etc/passwdnsj0820:x:503:503::/home/nsj0820:/bin/bash[root@localhosthome]#mv/home/nsj820/home/nsj0820
(2)锁定帐户
若要临时严禁用户登入,可将该用户帐户锁定。锁定帐户可借助-L参数来实现,其命令用法为:
usermod-L要锁定的帐户
linux锁定用户,是通过在密码文件shadow的密码数组前加“!”来标示该用户被锁定。
[root@localhosthome]#usermod-Lnsj0820[root@localhosthome]#tail-1/etc/shadownsj0820:!$1$JEW25RtU$X9kIdwJi/HPzSKMVe3EK30:16910:0:99999:7:::
但通过root用户进去linux创建用户组和用户,之后su到被锁定的用户,是可以进去的。
(3)解锁帐户
要解锁帐户,可以使用带-U参数的usermod命令来实现。
[root@localhost~]#usermod-Unsj0820[root@localhost~]#tail-1/etc/shadownsj0820:$1$JEW25RtU$X9kIdwJi/HPzSKMVe3EK30:16910:0:99999:7:::
6、删除帐户
要删掉帐户,可以使用userdel命令来实现linux创建用户组和用户,其用法为:userdel[-r]账户名
-r为可选项,若带上该参数,则在删掉该帐户的同时,一并删掉该帐户对应的主目录。
[root@localhost~]#userdel-rnsj0820
若要设置所有用户帐户密码过期的时间,则可通过更改/etc/login.defs配置文件中的PASS_MAX_DAYS配置项的值来实现,其默认值为99999,代表用户帐户密码永不过期。其中PASS_MIN_LEN配置项用于指定帐户密码的最小宽度,默认为5个字符。
7、设置用户登入密码
使用passwd命令来设置,其命令用法为:passwd[账户名]若指定了账户名称,则设置指定帐户的登陆密码,原密码手动被覆盖。只有root用户才有权设置指定帐户的密码。通常用户只能设置或更改自己帐户的密码(不带参数)。
比如,若要设置nisj帐户的登录密码,则操作命令为:[root@localhosthome]#passwdnisjChangingpasswordforusernisj.Newpassword:BADPASSWORD:itistooshortBADPASSWORD:istoosimpleRetypenewpassword:passwd:allauthenticationtokensupdatedsuccessfully.帐户登入密码设置后,该帐户就可以登入系统了。
8、锁定/解锁帐户密码及查询密码状态、删除帐户密码
在linux中,不仅用户帐户可被锁定外,帐户密码也可被锁定,任何一方被锁定后,都将未能登入系统。只有root用户才有权执行该命令,锁定帐户密码使用带-l选项的passwd命令,其用法为:
passwd-l账户名passwd-u账户名#解锁帐户密码[root@localhosthome]#passwd-lnisjLockingpasswordforusernisj.passwd:Success[root@localhosthome]#passwd-unisjUnlockingpasswordforusernisj.passwd:Success
要查询当前帐户的密码是否被锁定,可以使用带-S参数的passwd命令来实现,其用法为:passwd-S帐户名诸如[root@localhosthome]#passwd-SnisjnisjPS2016-04-180999997-1(Passwordset,MD5crypt.)
如要删掉帐户的密码,使用带-d参数的passwd命令来实现,该命令也只有root用户才有权执行,其用法为:passwd-d账户名账户密码被删掉后,将不能登入系统,除非重新设置密码。
9、创建用户组
用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同的用户。
创建用户组使用groupadd命令,其命令用法为:groupadd[-r]用户组名称
若命令带有-r参数,则创建系统用户组,该类用户组的GID值大于500;若没有-r参数,则创建普通用户组,其GID值小于或等于500.
10、修改用户组属性
用户组创建后,按照须要可对用户组的相关属性进行更改。对用户组属性的更改,主要是更改用户组的名称和用户组的GID值。(1)改变用户组的名称若要对用户组进行重命名,可使用带-n参数的groupmod命令来实现,其用法为:groupmod-n新用户组名原用户组名
对于用户组更名,不会改变其GID的值
例如,若要将student用户组改名为teacher用户组,则操作命令为:[root@localhosthome]#groupaddstudent[root@localhosthome]#tail-1/etc/groupstudent:x:505:[root@localhosthome]#groupmod-nteacherstudent[root@localhosthome]#tail-1/etc/groupteacher:x:505:
(2)重设用户组的GID用户组的GID值可以重新进行设置更改,但不能与已有用户组的GID值重复。对GID进行更改,不会改变用户名的名称。
要更改用户组的GID,可使用带-g参数的groupmod命令,其用法为:groupmod-gnew_GID用户组名称
比如,若要将teacher组的GID修改为506,则操作命令为:[root@localhosthome]#groupmod-g506teacher[root@localhosthome]#tail-1/etc/groupteacher:x:506:
11、删除用户组
删掉用户组使用groupdel命令来实现,其用法为:groupdel用户组名
在删掉用户组时,被删掉的用户组不能是某个帐户的私有用户组,否则将难以删掉,若要删掉,则应先删掉引用该私有用户组的帐户,之后再删掉用户组。
[root@localhosthome]#groupdelteacher[root@localhost~]#grepteacher/etc/group#没有输出常用linux系统,说明teacher用户组以不存在,删掉成功
12、添加用户到指定的组/从指定的组中移除用户
可以将用户添加到指定的组,使其成为该组的成员。其实现命令为:gpasswd-a用户帐户用户组名
若要从用户组中移除某用户,其实现命令为:gpasswd-d用户帐户用户组名比如:[root@localhosthome]#groupaddstudent[root@localhosthome]#gpasswd-anisjstudentAddingusernisjtogroupstudent[root@localhosthome]#idnisjuid=502(nisj)gid=500(babyfish)groups=500(babyfish),505(student)[root@localhosthome]#gpasswd-dnisjstudentRemovingusernisjfromgroupstudent[root@localhosthome]#idnisjuid=502(nisj)gid=500(babyfish)groups=500(babyfish)[root@localhosthome]#groupsnisjnisj:babyfish
13、设置用户组管理员
添加用户到组和从组中移除某用户,不仅root用户可以执行该操作外,用户组管理员也可以执行该操作。
要将某用户委派为某个用户组的管理员,可使用以下命令来实现;
gpasswd-A用户帐户要管理的用户组命令功能:将指定的用户设置为指定用户组的用户管理员。用户管理员只能对授权的用户组进行用户管理(添加用户到组或从组中删掉用户),无权对其他用户组进行管理。
[root@localhosthome]#gpasswd-anisjstudentAddingusernisjtogroupstudent[root@localhosthome]#gpasswd-Anisjstudent[root@localhosthome]#useraddstu[root@localhosthome]#gpasswd-astustudentAddinguserstutogroupstudent[root@localhosthome]#groupsstustu:stustudent[root@localhosthome]#su-nisj[nisj@localhost~]$gpasswd-dstustudentRemovinguserstufromgroupstudent[nisj@localhost~]$gpasswd-dstustugpasswd:Permissiondenied.
14、用户其他相关
另外,linux还提供了id,whoami和groups等命令,拿来查看用户和组的状态。id命令用于显示当前用户的uid查看linux是什么系统,gid和所属的用户组的列表;whoami用于查询当前用户的名称;groups用于产看指定用户所隶属的用户组。
同时,我们可以使用图形界面来管理用户和用户组,系统--->管理--->用户和组群可以打开相应的配置界面。
附:将用户添加到组中,也可以如下操作将一个用户添加到用户组中,千万不能直接用:usermod-GgroupA这样做会使你离开其他用户组,仅仅做为这个用户组groupA的成员。应当用加上-a选项:usermod-a-GgroupAuser(FC4:usermod-GgroupA,groupB,groupCuser)-a代表append,也就是将自己添加到用户组groupA中,而毋须离开其他用户组。