第四章:用户和组管理

1.基本概念

 

1.1.UID&GID

 

Linux是通过UIDGID号来识别用户和组。对某个文件或程序的访问也是以UIDGID为基础。一个执行中的程序继承了调用它的用户的权利和访问权限。

 

 

1.2.Linux用户类型

 

  • 根用户(0)UID0的用户,能够访问系统任何文件和程序,而不论root根用户是否有权限。root用户通常称为超级用户

  • 系统/服务用户(1-999)UID1-999.系统保留账号,或者某些服务才能使用的的账号

  • 普通用户(大于1000):UID大于1000,只能访问他们拥有的或者有权限执行的文件

 

 

1.3.用户根目录

 

  • 每一个登入系统的用户都需要有地方保存那些专属于该用户的配置文件,这个目录就是用户根目录(home directory),类似于windows中的c:\Documents and Settings

  • root用户的根目录对于大多数Unix/Linux操作系统来说都处于“/root”

  • 普通用户的主目录位于“/home/yourname”(yourname是用户名)下,类似于windows下的c:\Documentsand Settings

 

 

1.4.用户脚本文件

 

Linux系统中,每个用户根目录下都有几个隐藏的脚本文件

例:查看root根目录下的几个脚本文件

[root@freeit ~]# ls -a

.                .bashrc  Documents              .local     Videos

..               .cache   Downloads             Music      .viminfo

anaconda-ks.cfg  .config   .esd_auth             Pictures

.bash_history    .cshrc   gyh                   Public

.bash_logout      .dbus     .ICEauthority         .tcshrc

.bash_profile     Desktop   initial-setup-ks.cfg  Templates

 

.bash_history :命令历史记录

.bash_logout :退出shell时执行此脚本

.bash_profile :登陆shell时执行此脚本

 

 

1.5.用户电子邮件

 

Linux下每一个用户默认都有一个电子邮箱账号。电子邮箱保存在/var/spool/mail子目录中,以用户名命名的文件制定

例:

[root@freeit ~]# id freeit_gyh

uid=1000(freeit_gyh) gid=1000(freeit_gyh)  groups=1000(freeit_gyh)

[root@freeit ~]# ls /var/spool/mail/

freeit_gyh   rpc

 



2.用户管理

 

 

2.1.用户配置文件

 

  • /etc/passwd

用户配置文件

[root@freeit ~]# ll /etc/passwd

-rw-r--r--. 1 root root 1926 Dec 11 22:59 /etc/passwd

 

[root@freeit ~]# head /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

说明:

文件内容从左到右依次为:用户名、密码、UIDGID、描述说明、用户主目录、shell(默认为/bin/bash)

 

  • /etc/shadow

用户密码文件

[root@freeit ~]# ll /etc/shadow

----------. 1 root root 1141 Dec 11 22:59 /etc/shadow

 

[root@freeit ~]# head /etc/shadow

root:$6$DcnwECzSOErax9TE$b0NLl5K.t6ouyQwS8Ewz8sn4Y9yQTYne7dodqlhpiNn2PCapPsvZG1s/XisrG.yxbgeWmn.xnKqsZ1S1.Q2.r/:16415:0:99999:7:::

bin:*:16141:0:99999:7:::

daemon:*:16141:0:99999:7:::

adm:*:16141:0:99999:7:::

lp:*:16141:0:99999:7:::

sync:*:16141:0:99999:7:::

shutdown:*:16141:0:99999:7:::

halt:*:16141:0:99999:7:::

mail:*:16141:0:99999:7:::

operator:*:16141:0:99999:7:::

说明:

文件内容从左到右依次为:

用户名

密码      默认MD5加密,密码前加*或!锁定账号

密码更改时间:   1970.1.1开始算起

密码不可更改时间:   0表示可随时更改

密码失效时间:   99999表示永不失效

密码失效前警告时间:   默认7

密码过期后的宽限时间

账号失效时间:   1970.1.1开始计算

保留

 

 

2.2.用户操作命令

 

2.2.1.创建用户

 

命令:

Useradd [username]

参数:

     -u:指定UID

     -g:指定组

    -G:指定附属组

    -d:指定家目录

    -m:自动建立用户的宿主目录

    -s:指定shell环境

    -c:描述说明和备注

    -e:设定用户账号有效时间

    -r:建立系统账号

1:不带参数创建user1用户

[root@freeit ~]# useradd user1

[root@freeit ~]# id user1

uid=1001(user1) gid=1001(user1)  groups=1001(user1)

 

2:带参数创建user2用户

[root@freeit ~]# useradd -u 1111 -G user1  -d /home/user2 -s /sbin/nologin -c gyh user2

//UID1111、附属组为user1shell/sbin/nologin(不能交互式登录)、描述为gyh

[root@freeit ~]# id user2

uid=1111(user2) gid=1111(user2)  groups=1111(user2),1001(user1)

 

注:用户私有组

  • 当一个用户被创建时,与其同名的私有组会被同时创建,用户被关联到这个私有组,用户的新文件从属于这个组。

  • 优点:防止用户的新文件属于一个“公众组;

  • 缺点:可能会导致用户把自己的文件都改成所有人可以访问

 

 

2.2.2.用户密码

 

命令:

psswd [username]

参数:

     -l:锁定账户

    -u:解开账户锁定状态

    -d:删除使用者的密码

    -S:大s,检查指定使用者的密码认证种类

    -x--maximum=DAYS:最大密码使用时间()

    -n--minimum=DAYS:最小密码使用时间()

注:

  • root用户可以修改所有用户的密码

  • 普通用户只能修改自己的密码

 

例:为user1用户更改密码

-----------------------------------------------方法一--------------------------------------------------------

[root@freeit ~]# passwd user1

Changing password for user user1.

New password: //输入密码时默认不显示

BAD PASSWORD: The password is shorter  than 7 characters

Retype new password:

passwd: all authentication tokens updated  successfully.

------------------------------------------------方法二---------------------------------------------------------

[root@ns ~]# echo "redhat" | passwd user1 --stdin

Changing password for user user1.

passwd: all authentication tokens updated  successfully.

 

 

2.2.3.用户属性修改

 

命令:

usermod [option] [username]

参数:

     -c:备注,修改账户的备注文字

    -d:登入目录,修改用户登陆时的目录

    -e:有效期限,修改账户的有效期限

     -f:缓冲天数,修改在密码过期多少天即关闭该账号

    -g:修改用户所属组

    -G:修改用户所属的附加组

    -l:修改用户账号名称

     -L:锁定用户密码,是密码无效

    -s:修改用户登陆后使用的shell

    -u:修改用户ID

    -U:解除密码锁定

 

1:修改user1用户的UID1110GID1111,附属组为user2shell环境为/sbin/nologin

[root@freeit ~]# id user1

uid=1001(user1) gid=1001(user1)  groups=1001(user1)

[root@freeit ~]# cat /etc/passwd |grep  user1

user1:x:1001:1001::/home/user1:/bin/bash

[root@freeit ~]# usermod -u 1110 -g 1111  -G user2 -s /sbin/nologin  user1

[root@freeit ~]# id user1

uid=1110(user1)  gid=1111(user2) groups=1111(user2)

[root@freeit~]#cat /etc/passwd |grep  user1                       user1:x:1110:1111::/home/user1:/sbin/nologin

 

2:把用户user1改为gyh

参数:-l

格式:usermod –l newuser olduser

[root@ns ~]# usermod -l gyh user1

[root@ns ~]# id user1

id: user1: No such user

[root@ns ~]# id gyh

uid=501(gyh) gid=501(user1)  groups=501(user1)

 

 

2.2.4.chown

 

修改文件所有者

例:创建aaa文件,修改其所有者为user1

[root@freeit ~]# touch aaa

[root@freeit ~]# ll aaa

-rw-r--r--. 1 root root 0 May  4 08:35  aaa

[root@freeit ~]# chown user1 aaa

[root@freeit ~]# ll aaa        

-rw-r--r--. 1 user1 root 0 May  4 08:35  aaa

 

 

 

 

3.组管理

 

 

3.1.组配置文件

 

  • /etc/group

组配置文件

[root@freeit ~]# ll /etc/group

-rw-r--r--. 1 root root 871 May  3 21:12 /etc/group

 

[root@freeit ~]# head /etc/group

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

mem:x:8:

kmem:x:9:

说明:从左向右依次为:组名、组密码、GID、组内用户(UID显示)

 

  • /etc/gshadow

组密码文件

[root@freeit ~]# ll /etc/gshadow

----------. 1 root root 701 May  3 21:12 /etc/gshadow

 

[root@freeit ~]# head /etc/gshadow

root:::

bin:::

daemon:::

sys:::

adm:::

tty:::

disk:::

lp:::

mem:::

kmem:::

说明:从左向右依次为:组名、组密码、管理员账号、组内用户

 

 

3.2.组管理操作命令

 

  • 创建组

例:创建一个组gyh

[root@freeit ~]# groupadd gyh

[root@freeit ~]# tail /etc/group | grep  gyh

gyh:x:1112:

参数:

     -g:指定GID

    -r:创建一个系统账户

 

  • 删除组

例:删除gyh

[root@freeit ~]# groupdel gyh

[root@freeit ~]# tail /etc/group | grep  gyh

[root@freeit ~]#

//删除之后,组配置文件中没有这个组

 

  • 设置组密码

例:创建一个freeit组,并为这个组设置一个密码,最后把用户加入到组验证

[root@freeit ~]# groupadd freeit

[root@freeit ~]# gpasswd freeit

Changing the password for group freeit

New Password:

Re-enter new password:

[root@ freeit ~]#

[root@ freeit ~]# su  user1

[user1@ freeit root]$ newgrp freeit

Password:

//如上,组设置密码之后,用户想要加入到这个组,必须要有这个组的组密码方能加入,这样也就保证了组的安全性、专用性

 

  • 修改组属性

例:修改组freeitGID

[root@ freeit  ~]# tail /etc/group |grep freeit

freeit:x:1112:

//修改之前为1112

[root@ freeit ~]# groupmod -g 2222 freeit

[root@ freeit ~]# tail /etc/group |grep  freeit

freeit:x:2222:

//修改之后变为2222

参数:

     -g:修改GID

    -o:允许重复

     -p:更改组的密码

 

  • chgrp

修改文件所属组信息

例:在root用户下创建一个文件abc,更改其所属组为freeit

[root@ freeit ~]# touch abc

[root@ freeit ~]# ll abc

-rw-r--r--. 1 root root 0 May  4 08:27 abc

[root@ freeit ~]# chgrp freeit abc

[root@ freeit ~]# ll abc         

-rw-r--r--. 1 root freeit 0 May  4 08:27 abc

 

 

 

4.特殊权限

 

4.1.SUID

 

当一个二进制文件(即命令)上应用了SUID后,任何人在执行该命令时,临时拥有命令拥有人的权限,只能应用在可执行文件上。

1:创建用户user1,登录此用户,并在/tmp/test下使用mkdir命令创建目录gyh

[root@ freeit tmp]# mkdir test

[root@ freeit tmp]# ll

total 0

drwxr-xr-x.  2 root root 6 May  4 08:50 test

//文件拥有者有rwx的权限

[root@ freeit tmp]# su user1

[user1@ freeit tmp]$ cd test/

[root@ freeit test]# ll /tmp

total 0

drwxr-xr-x. 3 root root 16 May  4 08:53 test

[user1@ freeit test]$ mkdir gyh

mkdir: cannot create directory ‘gyh’:  Permission denied

//如上,没有创建的权限

 

2:为mkdir赋予s权限,再次以同样方式创建

[root@ freeit ~]# whereis mkdir

mkdir: /usr/bin/mkdir /usr/share/man/man1/mkdir.1.gz  /usr/share/man/man1p/mkdir.1p.gz /usr/share/man/man2/mkdir.2.gz  /usr/share/man/man3p/mkdir.3p.gz

//查看二进制文件的位置

[root@ freeit ~]# ll /usr/bin/mkdir

-rwxr-xr-x. 1 root root 79712 Jan 25  2014 /usr/bin/mkdir

//查看二进制文件的权限,是可执行文件

[root@ freeit ~]# chmod u+s  /usr/bin/mkdir

[root@ freeit ~]# ll /usr/bin/mkdir       

-rwsr-xr-x.  1 root root 79712 Jan 25  2014  /usr/bin/mkdir

[root@ freeit test]# su user1

[user1@ freeit test]$ pwd

/tmp/test

[user1@ freeit test]$ mkdir gyh

[user1@ freeit test]$ ls

gyh

[user1@ freeit test]$ ll

total 0

drwxrwxr-x.  2 root user1 6 May  4 08:53 gyh

//创建成功

 

说明:

当未给mkdir这个二进制文件s权限前,文件只有所有者rootrwx权限,其他用户只有rx权限,不能在没有w权限的文件(/tmp/test对于其他用户没有w权限)下使用此命令创建目录。当给二进制文件s权限后,使用此命令的用户就临时拥有了root的权限,所以user1后来就可以在/tmp/test下创建目录。

 

 

4.2.SGID

 

当在一个二进制文件上应用了SGID后,任何人在执行此命令时临时拥有文件所属组的权限,同样也只能用在可执行文件上。如果在一个目录上应用了Sgid,那么任何人在该目录下创建的文件/目录的所属组会继承该目录的组

 

实验一:

1:去除上个实验/usr/bin/mkdirSUID权限,修改此文件的所属组权限为775

[root@ freeit test]# chmod u-s  /usr/bin/mkdir

[root@ freeit test]# ll /usr/bin/mkdir

-rwxr-xr-x.  1 root root 79712 Jan 25  2014  /usr/bin/mkdir

[root@ freeit test]# chmod 775  /usr/bin/mkdir

[root@ freeit test]# ll  /usr/bin/mkdir   

-rwxrwxr-x.  1 root root 79712 Jan 25  2014  /usr/bin/mkdir

//此时,文件所属组内的用户也能执行w权限,即在所属组为同一个组,并且具有rwx权限的目录下创建目录

 

2:给test所属组rwx权限、/usr/bin/mkdir SGID权限,cd/tmp/test目录下,切换到user1用户继续创建

[root@ freeit test]# chmod 775 /tmp/test/

[root@ freeit test]# ll /tmp/

total 0

drwxrwxr-x.  2 root root 6 May  4 09:03 test

[root@ freeit test]# chmod g+s  /usr/bin/mkdir

[root@ freeit test]# ll /usr/bin/mkdir

-rwxrwsr-x. 1 root root 79712 Jan 25   2014 /usr/bin/mkdir

[root@ freeit test]# su user1

[user1@ freeit test]$ pwd

/tmp/test

[user1@ freeit test]$ mkdir gyh

[user1@ freeit test]$ ll

total 0

drwxrwxr-x. 2 user1 root 6 May  4 09:17 gyh

//创建成功

 

说明:

/usr/bin/mkdir&/tmp/test所属组root rwx权限前,我们是不能在/tmp/test下使用命令mkdir创建目录的。要同时赋予/usr/bin/mkdirSGID权限方能创建成功。始初,由于其他用户没有在/tmp/test 下创建目录的权限,所以不能创建gyh目录。赋予SGID之后,user1使用mkdir命令,临时拥有了命令所属组的权限,在/tmp/test下具有rwx权限,所以能够创建成功。

 

实验二:

1:删除上个实验所做的操作,创建user2用户,给/usr/bin/mkdir SUID权限。User1/tmp下创建test目录,切换到user2,并在test下创建目录gyh,查看此时gyh的所属组

[root@ freeit tmp]# useradd user2

[root@ freeit tmp]# chmod u+s  /usr/bin/mkdir

//SUID权限,就是为后面的user2创建目录做铺垫,让user2能够在user1创建的test目录下使用mkdir命令时临时拥有root的权限。本实验验证的是文件所属组的内容,所以给SUID无影响。

[root@ freeit tmp]# ll /usr/bin/mkdir

-rwsr-xr-x.  1 root root 79712 Jan 25  2014  /usr/bin/mkdir

 

[root@ freeit tmp]# su user1

[user1@ freeit tmp]$ pwd

/tmp

[user1@ freeit tmp]$ mkdir test

[user1@ freeit tmp]$ ll

total 0

drwxrwxr-x. 2 user1 user1 6 May  4 09:44 test

 

[root@ freeit tmp]# su user2

[user2@ freeit tmp]$ cd test/

[user2@ freeit test]$ mkdir gyh

[user2@ freeit test]$ ll

total 0

drwxrwxr-x. 2 root user2 6 May  4 09:40  gyhuser1

 

//如上,此时其他用户在user1创建的目录test下创建的目录,文件所属组是创建者本身的组

 

2:给目录/tmp/test SGID权限,然后user2继续在其下创建目录aaa,查看此时的所属组

[root@ freeit test]# chmod g+s /tmp/test/

[root@ freeit test]# ll /tmp/

total 0

drwxrwsr-x. 3 user1 user1 16 May   4 09:45 test

[root@ freeit test]# su user2

[user2@ freeit test]$ mkdir aaa

[user2@ freeit test]$ ll

total 0

drwxrwsr-x.  2 root user1 6 May  4 09:50 aaa

drwxrwxr-x. 2 root user2 6 May  4 09:45 gyh

//如上,此时user2在目录下创建的目录的所属组继承了test的所属组

 

 

4.3.Sticky

 

如果在一个目录上应用了sticky权限,那么该目录中的文件仅文件拥有者和root能删除

 

1:查看/tmp的权限,默认是O+t的,具有sticky权限。然后登陆user1&user2,分别在/tmp下创建自己的文件,然后其中一个用户删除另一个的文件。验证能否删除。然后去掉/tmpt权限,再次验证

[root@ freeit tmp]# su user1

[user1@ freeit tmp]$ mkdir user1

[user1@ freeit tmp]$ ll

total 0

drwxrwxr-x. 2 user1 user1 6 May  4 09:55 user1

[root@ freeit tmp]# su user2

[user2@ freeit tmp]$ mkdir user2

[user2@ freeit tmp]$ ll

total 0

drwxrwxr-x. 2 user1 user1 6 May  4 09:55 user1

drwxrwxr-x. 2 user2 user2 6 May  4 09:55  user2

[user2@ freeit tmp]$ rm -rf user1

rm: cannot remove ‘user1’: Operation not  permitted

//如上,因为/tmp具有o+t的权限,所以user2不能删除user1的文件。

------------------------------------------去除/tmpo+t权限再次实验---------------------------------------

[root@ freeit tmp]# chmod o-t /tmp/

[root@ freeit tmp]# ll / |grep tmp

drwxrwxrwx.   4 root root   29 May   4 10:01 tmp

[root@ freeit tmp]# su user2

[user2@ freeit tmp]$ rm -rf user1

[user2@ freeit tmp]$ ll

total 0

drwxrwxr-x. 2 user2 user2 6 May  4 09:55 user2

//去除/tmpo+t权限后,user2成功删除user1的文件

 

注:

  • 前面我们说过,root为超级管理员,不论有没有权限都能执行操作,所以此处就不再验证root