本笔记说的Linux用户管理主要包括以下内容:
1、用户配置文件(/etc/passwd /etc/shadow)
2、组配置文件(/etc/group /etc/gshadow)
3、用户缺省配置文件(/etc/login.defs /etc/default/useradd)
1、用户配置文件
用户配置文件主要包括两个文件,分别是:/etc/passwd和/etc/shadow。其中/etc/passwd存放的是用户的信息,/etc/shadow存放的是用户的密码信息。这两个文件的文件内容都是按照一定的格式编写的。
其中/etc/passwd文件格式如下:
用户名:密码位:UID:GID:描述信息:宿主目录:使用的shell命令
如:zhangsan:x:0:0:marketing dept:/home/zhangsan:shell
其中/etc/shadow文件的格式如下:
用户名:加密密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:帐号闲置时间:失效时间:标志
最后一次修改时间:是指最后一次修改密码的天数与1970年1月1日相隔的天数
最小时间间隔:指两次修改密码之间的最小天数(当为0时表示不限制)。
最大时间间隔:是指密码多少天之后失效,但是可以在重新密码使账户可以重新启用。而失效时间是指多久之后账户就直接无效(当不限制无效时间时,直接设置一个很大的值即可。)
警告时间:当密码失效前n天就进行提示警告(当为0时表示不警告)
帐号闲置时间:指用户没有登录活动但账号仍能保持有效的最大天数(不设置则留空)
失效时间:指多久之后账户就直接无效。一般应用于短期外来人员的帐号。
标志:一般不使用
如下面这个例子的最后一位和倒数第二位是空的:
chanshuyi:$1$L79I629.$xBlLNY7I6Y7ok7no2JT6S.:16277:0:99999:7:0::
useradd 添加用户命令
当我们要添加一个用户的时候,我们可以使用useradd命令设置用户的信息。
格式:useradd [参数] [用户名]
参数:-u 指定用户的UID(超级用户UID=0,普通用户UID 500-60000,伪用户UID 1-499)
-g 指定用户缺省所属的用户组的GID
-G 指定用户组所属多个组(用英文逗号隔开)
-d 指定宿主目录
-s 指定命令解释器Shell
-c 指定描述信息
-e 指定用户失效时间
范例:
#useradd -u 1888 -g webadmin -G sys,root -d /backup -s /bin/hash -e "Market WangWu" -e 2011-01-15 wangwu; //属于sys/root/weadmin组,默认属于webadmin组。到2011年1月15日过期
添加一个用户hellen的例子:
useradd hellen //添加用户hellen passwd hellen //为hellen设置密码(之后输入密码即可)
注:你可以通过“useradd -d” 查看useradd命令时的缺省参数。
usermod 用户信息修改命令
格式:usermod [参数] [用户名]
参数:-l 修改登录名 (所有useradd的参数都可以作为usermod的参数)
范例:
usermod -l samlee -d /home/samlee liming //将用户liming的登录名改为samlee,用户目录改为/home/samlee usermod -G softgroup samlee //将用户samlee添加到softgroup用户组中
userdel 删除用户
格式:userdel [参数] [用户名]
参数:-r 删除用户的同时删除用户目录
chage 用户管理命令(chage只能在Linux中使用,在Unix无法使用)
格式:chage [参数] [用户名]
参数:-l 查看用户密码设置(如:密码失效时间、最后一次修改密码时间等)
-m 密码修改最小天数
-M 密码修改最大天数
-d 密码最后修改的日期
-I 密码过期后,锁定账户的天数
-E 设置密码的过期日期,如果为0,代码密码立即过期;如果为-1,代表密码永不过期
-W 设置密码过期前,开始警告的天数
例如:
#chage -m 1 test2 //修改test2密码修改最小天数为1 #chage -E 2014/12/20 test2 //设置test2用户2014年12月20日过期
禁用账户和恢复账户
禁用:usermod -L username 或 passwd -l username
回复:usermod -U username 或 passwd -u username
加上参数-f可以强制解锁。
停用或启用shadow功能
pwconv/pwunconv 停用用户的shadow功能
grpconv/grpunconv 停用用户组的shadow功能
pwck 检测/etc/passwd文件是否有错误
pwck命令会检测/etc/passwd以及/tec/shadow两个文件是否出错
vipw 编辑/etc/passwd文件(锁定文件)
finger [用户名] 查看用户的详细信息
su - [用户名] 切换用户
加横杠表示切换环境变量。不加横杆则环境变量不会改变。
who/w 查看当前登录用户信息
Who与w的区别就是w命令会显示比who更加详细的信息。
2、组配置文件
组配置文件也是包括一个组信息文件和一个组密码文件,分别是:/etc/group、/etc/gpasswd。它们也是有一定的编写格式的。
其中/etc/group文件的格式如下:
组名:组密码位:GID:组成员列表
其中组成员如果有多个,则用英文逗号隔开
如:sys::3:root,bin,adm
上面表示有一个组名为sys,GID为3的组,这个组有root,bin,adm三个用户。
/etc/gshadow文件的格式如下:
组名:组密码:用户组管理员的账号:组成员列表
test1:test1:chanshuyi:chanshuyi,chenyr
test1的组,组密码是test1,组成员有chanshuyi & chenyr,组的管理者是chanshuyi。
groupadd 添加用户组
groupadd {-g 888} webadmin //创建用户组webadmin,其GID为888
groupdel 删除用户组
groupdel webadmin //删除用户组webadmin
groupmod 修改用户组信息
groupmod -n apache webadmin //修改webadmin组名为apache
设置组密码用“gpasswd [组名]”,然后根据提示输入密码。不要用“gapsswd -p [组名]”的方式。
gpasswd 用户组管理命令
格式:gpasswd [参数] {用户名} [组名]
参数:-a 添加用户到用户组
-d 从用户组中删除用户
-A 设置用户组管理员
-r 删除用户组密码
-R 禁止用户切换为该组
范例:
gpasswd group1 //为group1设置密码 gpasswd –a tomgao group1 //将tomgao加到group1里 gpasswd –d tomgao group1 //将tomgao从group1里删除 gpasswd –A tomgao group1 //设置tomgao为管理员 gpasswd –r group1 //删除group1的组密码 gpasswd –R group1 //禁止用户切换为该组
groups [用户名] 查看用户所隶属的组
groups samlee 查看samlee所属的用户组
newgrp 切换用户组
格式:newgrp [组名]
newgrp sugroup //(当前用户)加入sugroup用户组,之后根据提示输入组密码
grpck 用户组配置文件检测
chgrp 修改文件所属组
vigr 编辑/etc/group文件(锁定文件)
3、用户缺省配置文件
用户缺省配置文件指的是/etc/login.defs和/etc/default/useradd文件。
它们指的是当我们使用useradd命令添加用户时,对用户的缺省设置(如密码强度、警告时间、最长有效时间等)。
其中/etc/login.defs文件可以定义警告时间、最长有效时间等信息。
而/etc/default/useradd文件可以设置home目录,使用的shell等。
4、/etc/motd文件、/etc/issue文件
/etc/motd文件:存放登录成功之后的提示信息(Message of The Day)
/etc/issue文件:存放登录的提示信息。只要你尝试登录,它就会提示这个文件中的信息,而。一般这个文件只存放一些形式上的欢迎信息,不会透漏服务器的任何信息。
5、SetUID权限、SetGID权限、黏着位
SetUID权限,其实对应与二进制文件的S权限位,它表示其他凡是对此文件有执行权的用户执行时权限自动提升为所有者的权限。如:
-rwsr-xr-x 小写s表示具有SetUID权限,当为大写S时表示SetUID权限出现了错误。
SetUID权限 权限值=4 代号s
授予/撤消SetUID权限(用s表示)分别有两种方式:
chmod u+s 或 chmod 4755
chmod u-s 或 chmod 755
注:4所在的位表示特殊位,而4这个值是SetUID权限的权限值。
SetGID权限 权限值=2 代号g
授予/撤消SetGID权限(用s表示)分别有两种方式:
chmod g+s 或 chmod 2755
chmod g-s 或 chmod 755
如果同时授予SetGID和SetUID则用:chmod 6755
黏着位 权限值=1 代号t
黏着位(用t表示)只能针对权限为777的目录设置。(权限要为777,并且是目录!)。如果一个目录具有黏着位,那么表示每个用户都可以在这个目录下创建文件,但是只能删除自己创建的文件。
授予/撤消黏着位分别有两种方式:
chmod o+t 或 chmod 1777
chmod o-t 或 chmod 777
6、典型案例之一:手动创建一个用户
我们除了可以通过useradd添加一个用户之外,我们也可以通过修改配置文件的方式手动添加一个用户。只要按下面的顺序我们就可以手动添加一个用户zhangsan:
① 修改/etc/passwd、/etc/shadow文件
//在/etc/passwd配置 zhangsan:x:556:556:zhangsan:/home/zhangsan:/bin/bash //在/etc/shadow配置 zhangsan::16406:0:99999:7:::
MARK 这里少了关键的一步
② 创建宿主目录
//创建宿主目录/home/zhangsan mkdir /home/zhangsan
③ 拷贝/etc/skel下的配置文件到宿主目录/home/samlee(用户名)下
7、典型案例之二:批量添加用户
下面以批量添加10个用户为例。(MARK 补充一个完整的实例)
① 用newusers命令 - 导入用户信息文件
创建user.txt文件,内容如下:
cs1:x:0:0:marketing dept:/home/cs1:/bin/bash cs2:x:0:0:marketing dept:/home/cs2:/bin/bash
执行以下命令,导入用户信息文件:
[root@localhost ~]# newusers /home/chanshuyi/Desktop/user.txt
② pwunconv命令 - 取消shadow password功能
[root@localhost ~]# pwunconv
③ chpasswd命令 - 导入密码文件(格式->用户名:密码)
创建passwd文件,并输入以下内容:
cs1:cs1 cs2:cs2
执行密码文件导入的命令:
[root@localhost ~]# chpasswd /home/chanshuyi/Desktop/passwd.txt
④ pwconv命令 - 将密码写入shadow文件
[root@localhost ~]# pwconv
8、典型案例之三:限制用户使用su
限制用户使用su的本质是改变su命令的可执行位,对所有具有使用su命令的用户授予x权限。
① 创建sugroup组并改变su命令的权限
#groupadd sugroup #chmod 4550 /bin/su //限制只有创建者和所属组具有x权限(可执行权限,4表示SetUID权限)
SetUID权限可以让执行者执行此文件时以文件所有者的身份执行。
② 改变/bin/su所属组为sugroup
#chgrp sugroup /bin/su
设定之后,只有sugroup中的用户可以使用su切换为root。
9、典型案例之四:root权限的开放——sudo
Sudo是一个软件,它可以让普通用户以root身份执行命令,并且可以精细化到命令的参数。
Sudo的配置文件是:/etc/sudoers,要编译Sudo的配置文件用命令:visudo,用一般的vi命令是不能编译的。
而我们编辑sodoers文件也要按照一定的格式,/etc/sudoers文件的格式为:用户名(组名) 主机地址=命令(绝对路径)
比如我要让hellen具有添加用户的权限,那我用visudo编辑配置文件并加入下面的配置:
chenyr localhost=/usr/sbin/useradd //有多个命令要赋予时,用英文逗号隔开
这样当我用chenyr登录的时候,我可以用“sudo [命令]”的格式去添加用户,如:
sudo useradd testuser sudo passwd testuser
这样就可以成功添加testuser用户了。
此外,你可以用“sudo -l 命令”查看看当前用户被授予了哪些命令的root执行权限。如上面的chenyr账号,你可以看到它被授予执行的命令有useradd:
[chenyr@localhost ~]$ sudo -l //..... User chenyr may run the following commands on this host: (root) /usr/sbin/useradd
另外,sudo可以精细化地进行命令的授权,如:
hellen localhost=/sbin/shutdown -h now //只允许用户执行sudo shutdown -h now命令,少一个参数都不行。
10、John the Ripper 密码强度检测软件