/etc/group 文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;/etc/gshadow是/etc/group的加密信息文件。
/etc/group的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:
group_name:passwd:GID:user_list
第一字段:用户组名称;
第二字段:用户组密码;一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。
第三字段:GID组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID.
第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
[[email protected] /]$ cat /etc/group
root:x:0:234
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon,234
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:mail,postfix
uucp:x:14:
man:x:15:
games:x:20:
gopher:x:30:
video:x:39:
dip:x:40:
ftp:x:50:
lock:x:54:
我们以root:x:0:234为例: 用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、234以及GID为0的其它用户
whoami 查看当前登录用户名
[[email protected] /]$ whoami
srd
groups查看当前登录用户所属组
[[email protected] /]$ groups
srd
这里使用 tail命令查看、etc/group里面的关于srd账号的信息,可以看到srd组GID是500
[[email protected] /]$ tail -12 /etc/group
slocate:x:21:
srd:x:500:
mysql:x:27:
nagios:x:501:
nagcmd:x:502:nagios,apache
123:x:503:
group:x:504:
999:x:505:
555:x:506:
666:x:507:
z:x:508:
PD2913:x:509:
[[email protected] /]$
Chgrp 改变文件所属者
可以看到2015这个文件夹所属者是root
[[email protected] /]# ll
ls: cannot access nas: No such device or address
total 4322
-rw-r--r--. 1 root root 247 Dec 31 15:26 1
drwxr-xr-x. 2 root root 4096 Jan 23 11:30 2015
将2015改成500,500是srd的GID
[[email protected] /]# chgrp -v 500 2015
changed group of `2015‘ to 500
再查看2015所属组已经改变了
[[email protected] /]# ll
ls: cannot access nas: No such device or address
total 4322
-rw-r--r--. 1 root root 247 Dec 31 15:26 1
drwxr-xr-x. 2 root srd 4096 Jan 23 11:30 2015
文件属性 ll查看
从上面看到2015属性d rwx r-x r-x.
d文件夹, - 是文件,l 表示为连结档, b 表示为装置文件里面的可供储存的接口设备, c 表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
第2-4位标示文件所有者u权限 rwx: r代表可读(read)、 w代表可写(write)、 x代表可执行(execute) 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已
第5-7位表示文件所属组g权限。第8-10位表示其他用户o的权限
上面2015文件夹srd能读不能写
[[email protected] /]$ cd 2015
[[email protected] 2015]$ mkdir 1
mkdir: cannot create directory `1‘: Permission denied
chmod改变文件的权限 所有者所属组加上写权限,查下权限显示所属组可以写了
[[email protected] /]# chmod g+w 2015 (组加上写权限W)
[[email protected] /]# ll
ls: cannot access nas: No such device or address
total 4322
-rw-r--r--. 1 root root 247 Dec 31 15:26 1
drwxrwxr-x. 2 root srd 4096 Jan 23 11:30 2015
现在srd可以写2015文件夹了
[[email protected] /]$ cd 2015
[[email protected] 2015]$ mkdir 1
[[email protected] 2015]$
chown 改变文件所有者和组
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限
[[email protected] /]# mkdir 2016
[[email protected] /]# ll
ls: cannot access nas: No such device or address
total 4326
-rw-r--r--. 1 root root 247 Dec 31 15:26 1
drwxrwxr-x. 3 root srd 4096 Jan 23 11:58 2015
drwxr-xr-x. 2 root root 4096 Jan 23 13:50 2016
改变2016文件夹所有者
[[email protected] /]# chown srd:srd 2016
[[email protected] /]# ll
ls: cannot access nas: No such device or address
total 4326
-rw-r--r--. 1 root root 247 Dec 31 15:26 1
drwxrwxr-x. 3 root srd 4096 Jan 23 11:58 2015
drwxr-xr-x. 2 srd srd 4096 Jan 23 13:50 2016
[[email protected] /]# cd 2016
[[email protected] 2016]# ll
total 12
drwxrwxr-x. 2 srd srd 4096 Jan 23 14:04 1
drwxrwxr-x. 2 srd srd 4096 Jan 23 14:04 2
drwxrwxr-x. 2 srd srd 4096 Jan 23 14:04 3
[[email protected] 2016]# cd 1
[[email protected] 1]# ll 看到里面文件的所有者和所有者所属组的权限
total 4200
-rwxr-xr-x. 1 srd srd 1789376 Jan 23 14:04 nagios-3.5.0.tar.gz
-rwxr-xr-x. 1 srd srd 2087089 Jan 23 14:04 nagios-plugins-1.4.16.tar.gz
-rwxr-xr-x. 1 srd srd 421635 Jan 23 14:04 nrpe-2.14.tar.gz
[[email protected] 1]#
[[email protected] 2016]# chown -R -v PD2913:PD2913 1
changed ownership of `1/nagios-3.5.0.tar.gz‘ to PD2913:PD2913
changed ownership of `1/nagios-plugins-1.4.16.tar.gz‘ to PD2913:PD2913
changed ownership of `1/nrpe-2.14.tar.gz‘ to PD2913:PD2913
changed ownership of `1‘ to PD2913:PD2913
[[email protected] 2016]# cd 1
[[email protected] 1]# ll 看到里面文件的所有者和所有者所属组的权限变为PD2913了
total 4200
-rwxr-xr-x. 1 PD2913 PD2913 1789376 Jan 23 14:04 nagios-3.5.0.tar.gz
-rwxr-xr-x. 1 PD2913 PD2913 2087089 Jan 23 14:04 nagios-plugins-1.4.16.tar.gz
-rwxr-xr-x. 1 PD2913 PD2913 421635 Jan 23 14:04 nrpe-2.14.tar.gz
[[email protected] 1]#
添加新的用户账号使用 useradd 命令,其语法如下:
useradd 选项用户名
其中各选项含义如下:
-ccomment 指定一段注释性描述。
-d 目录指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组指定用户所属的用户组。
-G 用户组,用户组指定用户所属的附加组。
-s Shell文件指定用户的登录Shell。
-u 用户号指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
增加用户账号就是在 /etc/passwd 文件中为新用户增加一条记录,同时更新其他系统文件如 /etc/shadow, /etc/group等。
[[email protected] /]# useradd -d /usr/456 -m 456
[[email protected] /]#
此命令创建了一个用户456,
其中-d和-m选项用来为登录名456产生一个主目录/usr/456(/usr为默认的用户主目录所在的父目录)
[[email protected] /]# tail -5 /etc/group
555:x:506:
666:x:507:
z:x:508:
PD2913:x:509:
456:x:510:
[[email protected] /]# useradd -s /bin/sh -g srd -G adm,root 678
[[email protected] /]#
此命令新建了一个用户678,该用户的登录Shell是/bin/sh,它属于srd用户组,同时又属于adm和root用户组,其中srd用户组是其主组。
[[email protected] /]# tail -11 /etc/passwd 显示倒数11行以后的用户信息,678和srd的GID都是500
tcpdump:x:72:72::/:/sbin/nologin
srd:x:500:500::/home/srd:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
nagios:x:501:501::/home/nagios:/sbin/nologin
123:x:502:503::/usr/123:/bin/bash
234:x:503:500::/home/234:/bin/sh
555:x:504:506::/home/555:/bin/bash
666:x:505:500::/home/z:/bin/sh
PD2913:x:506:509::/home/PD2913:/bin/bash
456:x:507:510::/usr/456:/bin/bash
678:x:508:500::/home/678:/bin/sh
[[email protected] /]# cat /etc/group 显示678属于root组
root:x:0:234,678
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:usermod 选项用户名,
常用的选项包括-c, -d, -m, -g,-G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用如下选项:
下面命令将用户678的登录Shell修改为bin/bash,主目录改为/home/z,用户组改为srd。
[[email protected] /]# usermod -s /bin/bash -d /home/z -g srd 678
usermod: user 678 is currently logged in
[email protected] /]# ps aux |grep 678 查询用户678有哪些进程
root 24678 0.0 0.0 108336 1800 pts/1 S Jan22 0:00 bash
root 32868 0.0 0.1 161440 1972 pts/1 S 14:30 0:00 su 678
678 32869 0.0 0.0 108340 1588 pts/1 S 14:30 0:00 sh
root 33427 0.0 0.0 103252 864 pts/1 S+ 16:05 0:00 grep 678
[[email protected] /]# kill -s 9 32869 KILL掉,其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程
[[email protected] /]# [[email protected] /]#
[[email protected] /]# ps aux |grep 678 再次查询用户678有哪些进程
root 24678 0.0 0.0 108336 1800 pts/1 S Jan22 0:00 bash
root 33433 0.0 0.0 103252 864 pts/1 S+ 16:07 0:00 grep 678
[[email protected] /]# usermod -s /bin/bash -d /home/z -g srd 678 修改用户,不再报错了
[[email protected] /]#
[[email protected] /]# tail -5 /etc/passwd
555:x:504:506::/home/555:/bin/bash
666:x:505:500::/home/z:/bin/sh
PD2913:x:506:509::/home/PD2913:/bin/bash
456:x:507:510::/usr/456:/bin/bash
678:x:508:500::/home/z:/bin/bash 修改成功
用户密码的管理
用户账号刚创建时没有密码,但是被系统锁定,无法使用,必须为其指定密码后才可以使用,即使是指定空密码。
指定和修改用户密码的Shell命令是passwd。超级用户可以为自己和其他用户指定密码,普通用户只能用它修改自己的密码。命令的格式为:passwd 选项用户名
可使用的选项:
-l锁定密码,即禁用账号。
-u 密码解锁。
-d 使账号无密码。
-f 强迫用户下次登录时修改密码。
如果默认用户名,则修改当前用户的密码。
例如,假设当前用户是678,则下面的命令修改该用户自己的密码:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的密码:
# passwd 678
New password:*******
Re-enter new password:*******
普通用户修改自己的密码时,passwd命令会先询问原密码,验证后再要求用户输入两遍新密码,如果两次输入的密码一致,则将这个密码指定给用户;而超级用户为用户指定密码时,就不需要知道原密码。
为用户指定空密码时,执行下列形式的命令:
# passwd -d 678
此命令将用户678的密码删除,这样用户678下一次登录时,系统就不再询问密码。
正常情况切换用户需要输入密码。见下图
[[email protected] /]# passwd -d 678
Removing password for user 678.
passwd: Success
passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:
#passwd -l 678
[[email protected] /]# passwd -l 678
Locking password for user 678.
passwd: Success
登录时候提示密码不对
[[email protected] 2015]$ su 678
Password:
su: incorrect password
解锁
[[email protected] /]# passwd -u 678
Unlocking password for user 678.
passwd: Success