Linux高级用户,组和权限

下面先来了解一下关于用户,组的四个文件

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow

首先来了解一下/etc/passwd这个文件,

这个文件只是存放用户的信息

[root@localhost~]#

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

user1:x:500:500::/home/user1:/bin/bash

[root@localhost~]#

这里面总共有七个栏位,了解一下每个栏位的意义。

User1            用户名

X            用户的密码位(如果这个位上面没有这个X,就代表登陆这个用户不需要密码)

500               UID

500               GID

第五个是密码的描述信息,这里没有。

/home/user1  用户的/home目录

/bin/bash       用户的shell

在这里有个比较特殊的shell    /sbin/nologin

如果将用户的shell改为/sbin/nologin,那么这儿用户只可以登陆服务,但是不可以登陆计算机。不允许交互式登陆。

再来了解一下/etc/shadow这个文件,

这个文件主要是用来保存用户的密码信息和策略。

[root@localhost~]#

[root@localhost~]# cat /etc/shadow | grep user1

user1:$1$2WJEp9K7$h.NRfJsaEm8VMksBQHZm7.:14668:0:99999:7:::

[root@localhost~]#

现在来了解一下每个栏位的意义

User1         用户名

第二个栏位是保存用户的密码,这个密码是经过MD5的加密的。

如果密码位前面有个!,就代表这个用户被锁定了。

14668               密码最后一次修改的时间

0                   密码最少的存活期(为0代表用户可以随时更改密码)

99999               密码过期时间(99999代表密码永不过期)

7                   密码过期警告天数(在密码过期的前七天警告用户)

再来了解一下/etc/group这个文件,

这个文件主要是用于存放组的信息。

[root@localhost~]#

[root@localhost~]# cat /etc/group | grep user1

user1:x:500:

[root@localhost~]#

现在来了解一下每个栏位的意义

User      组的名字

X          组的密码位

500       GID

可以将用户直接添加到冒号后面,就代表加入了这个组。

最后来了解一下/etc/gshadow这个文件,

这个文件主要是保存组密码的信息。

[root@localhost~]#

[root@localhost~]# cat /etc/gshadow | grep user1

user1:!::

[root@localhost~]#

User      组的名字

可以看到,这个组默认是没有密码的,现在我们给它设置一个密码。

[root@localhost~]#

[root@localhost~]# gpasswd user1

Changingthe password for group user1

NewPassword:

Re-enternew password:

[root@localhost~]# cat /etc/gshadow | grep user1

user1:$1$ZxvTf/dQ$DWmf//MTxpwJIzTZIcYQZ/::

[root@localhost~]#

可以看到,组现在也有了一个密码,而且也是经过MD5加密的。

下面来看下组的密码有什么意义。

[root@localhost~]#

[root@localhost~]# useradd user2

[root@localhost~]#

[root@localhost~]# su – user2

[user2@localhost~]$

[user2@localhost~]$ newgrp user1

Password:

[user2@localhost~]$ id

uid=501(user2)gid=500(user1) groups=500(user1),501(user2)

[user2@localhost~]$

可以看到,我们user2现在加入到了user1,变成了user1组里面的成员,也就是说组密码的意义在于,一个普通用户只要有组的密码,就可以加入到这个组里面来,成为这个组里面的成员。

用户管理工具

Useradd   添加用户

#useradd   user1(用户名)

[root@localhost~]#

[root@localhost~]# useradd user1

[root@localhost~]#

[root@localhost~]# id user1

uid=502(user1)gid=502(user1) groups=502(user1)

[root@localhost~]#

User1就添加成功了。

Usermod   修改用户

Userdel    删除用户

#userdel  -r  user1(用户名)

[root@localhost~]#

[root@localhost~]# userdel -r user1

[root@localhost~]#

[root@localhost~]# id user1

id:user1: No such user

[root@localhost~]#

User1就成功删除了

-r  在删除用户的同时删除用户的/home目录。

关于监视登陆的工具

#w

[root@localhost~]# w

15:27:32up 15:31,  3 users,  load average: 0.81, 0.25, 0.08

USER     TTY     FROM      LOGIN@     IDLE    JCPU     PCPU    WHAT

root        :0             - 21Feb10 ?xdm?          3:07       0.30s    /usr/bin/    gnome-

root       pts/2        :0.0                 15:27       0.00s    0.06s     0.01s        w

root       pts/1       192.168.0.20   15:27      13.00s   0.05s     0.05s -    bash

[root@localhost~]#

可以看到192.168.0.20正在连接我。

#last

[root@localhost~]#

[root@localhost~]# last

root       pts/2        station20.exampl  Sun Feb 28  15:32     still        logged in

root       pts/1        :0.0                      Sun Feb 28   15:31    still        logged in

root       pts/2        :0.0                      Fri Feb 26    17:21  – 00:32     (1+07:10)

root       pts/1        :0.0                      Mon Feb 22  23:07 – 21:46     (3+22:38)

root       pts/2        :0.0                      Mon Feb 22  18:31 -  23:07    (04:36)

root       pts/2        :0.0                      Mon Feb 22  14:33  -  14:33   (00:00)

root       pts/1        :0.0                      Sun Feb 21    17:33  -  18:31   (1+00:57)

root       pts/1        :0.0                      Sun Feb 21    17:28  -  17:33   (00:04)

root       pts/1        :0.0                      Sun Feb 21    13:30  -  17:28   (03:57)

root       :0                                         SunFeb 21    13:30   still logged in

root       :0                                         SunFeb 21    13:30 – 13:30     (00:00)

reboot  system boot 2.6.18-164.el5  Sun Feb 2113:29                    (7+02:03)

root      pts/1         :0.0                       Sun Feb 21 21:22 –down        (-7:-54)

root      :0                                           SunFeb 21 21:21 – down        (-7:-54)

root      :0                                           SunFeb 21 21:21 – 21:21        (00:00)

reboot   system boot 2.6.18-164.el5  Sun Feb 2121:17                    (-7:-50)

reboot   system boot 2.6.18-164.el5  Sun Feb 2121:14                    (00:02)

wtmpbegins Sun Feb 21 21:14:07 2010

[root@localhost~]#

曾经有那些用户登陆过我的计算机。并且在我计算机上面登陆了多久,很多东西都可以查看的到。

#lastb

[root@localhost~]#

[root@localhost~]# lastb

root     ssh:notty    www.google.com.  Mon Feb 22 15:50 – 15:50  (00:00)

root     ssh:notty    www.google.com.  Mon Feb 22 15:50 – 15:50  (00:00)

root     ssh:notty    www.google.com.  Mon Feb 22 15:50 – 15:50  (00:00)

btmpbegins Mon Feb 22 15:50:50 2010

[root@localhost~]#

这条命令显示的结果是那些计算机曾经登录过我的计算机,但是没有登录成功的计算机。只会显示没有登录成功的信息,并且它们是使用的什么方法尝试连接我的计算机,这里面都很详细。

默认权限(defaults perm)

默认的时候,我们在创建文件和目录的时候,并不是继承了上级目录的权限,而是根据目录和文件的UMASK值来决定的。

关于UMASK值

就是用来定义文件的默认权限的

如何在系统查询UMASK值呢?

#umask

[root@localhost~]#

[root@localhost~]# umask

0022

[root@localhost~]#

可以看到,系统中的umask值为0022

当然这个umask也是可以修改的

#umask  0033

[root@localhost~]#

[root@localhost~]# umask 0033

[root@localhost~]#

[root@localhost~]# umask

0033

[root@localhost~]#

系统的umask值被我们改成0033了。

Umask是怎么定义目录和文件的权限的

对于不同用户,umask定义都不一样。

对于root               uamsk值为022

对于普通用户   umask值为002

那么我们在创建目录和文件的时候默认权限是多少呢。

对于root            目录   777-022   755

文件   666-022   644

对于普通用户   目录   777-002  775

文件   666-002   664

这就是我们的创建目录和文件的默认权限。

注意 :我们在用最高权限减umask值的时候一定是用二进制的数值来减,而不是十进制的数值来减。

[root@localhost~]#

[root@localhost~]# umask

0022

[root@localhost~]# mkdir test

[root@localhost~]# touch test1

[root@localhost~]# ll | grep test

drwxr-xr-x2 root root       4096 Feb 28 16:42 test

-rw-r–r–1  root root        0 Feb 28 16:43 test1

[root@localhost~]#

可以看到,我们目录的默认权限的确是755.文件的默认权限的确是644。

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ umask

0002

[user1@localhost~]$ mkdir file

[user1@localhost~]$

[user1@localhost~]$ touch file1

[user1@localhost~]$ ll | grep file

drwxrwxr-x2 user1 user1 1024 Feb 28 16:44 file

-rw-rw-r–1 user1 user1    0 Feb 28 16:44 file1

[user1@localhost~]$

可以看到,在普通用户的身份下面。我们创建的目录的权限为775,文件的权限为664。

关于三个特殊的权限

1.suid权限

如果在一个可执行文件(命令或者脚本)运用了suid后,那么任何人在执行该命令的时候会临时拥有该命令的拥有人权限。

我们知道passwd这个命令管理员可以运行,还有普通用户也可以运行。

还有如果我们利用passwd来修改密码成功了,是要在/etc/shadow这个文件中去添加一个密码位的,现在我们看看这个文件的权限。

[root@localhost~]#

[root@localhost~]# ls -l /etc/shadow

-r——–1 root root 1050 Feb 25 23:01 /etc/shadow

[root@localhost~]#

可以看到,这个文件普通用户什么权限也没有,连读的权限都没有,那么普通用户是怎么修改自己的密码,并且能够将密码写在/etc/shadow文件里面的呢。

[root@localhost~]#

[root@localhost~]# ll /usr/bin/passwd

-rwsr-xr-x1 root root 22960 Jul 17  2006/usr/bin/passwd

[root@localhost~]#

我们可以看到passwd这个命令的权限位上面多了一个s,这个是我们以前从来没有看见过的,这个就是suid。

当普通用户利用passwd来修改密码的时候,由于passwd命令上面有suid权限,那么普通用户就会临时拥有该命令的拥有人root的权限,从而就可以往/etc/shadow这个文件里面去写入密码位了。

现在还有个问题,如果普通用户因为suid原因可以修改密码,那么普通用户能否去修改别的用户的密码呢,我们来尝试一下。

[user1@localhost~]$

[user1@localhost~]$ passwd user2

passwd:Only root can specify a user name.

[user1@localhost~]$

我们可以看到,是不可以修改的。如果按照理论情况,我们的passwd命令因为具有suid权限,那么是可以修改别的用户的密码的。这里并不是passwd命令不具有suid功能,它也并没有报权限拒绝。而是提示我们passwd这个命令只有root用户才可以在后面接上用户名,系统是从语法上面做了限制,而并不是suid,没有生效。这也是系统为了保证安全。

我们在做一个试验来了解suid的作用

先来看看系统中根的权限是什么

[root@localhost~]#

[root@localhost~]# ls -ld /

drwxr-xr-x25 root root 4096 Feb 28 00:30 /

[root@localhost~]#

可以看到,根的权限是755,也就是说一个普通用户是没有办法往根里面写入数据的,普通用户是属于其他人吗。我们试试

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /

[user1@localhost/]$ mkdir test

mkdir:cannot create directory `test’: Permission denied

[user1@localhost/]$

可以看到,我们的普通用户user1对根没有写入的权限。

现在我们给mkdir这条命令加一个suid的权限。看看会发生什么。

[root@localhost~]#

[root@localhost~]# which mkdir

/bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwxr-xr-x1 root root 29852 Jul 13  2009 /bin/mkdir

[root@localhost~]#

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

[root@localhost~]#

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13  2009 /bin/mkdir

[root@localhost~]#

可以看到,mkdir这个命令的权限已经多了一个s权限。

现在我们在使用普通用户去根下面创建一个文件,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /

[user1@localhost/]$ mkdir file

[user1@localhost/]$

[user1@localhost/]$ ll -ld file/

drwxrwxr-x2 root user1 4096 Feb 28 21:58 file/

[user1@localhost/]$

现在我们就可以在根下面创建目录了,是因为我们普通用户在使用mkdir这条命令的时候临时变成了该命令的拥有人的权限,所有普通用户就可以在根下面创建目录,还可以看到,我们通过user1在根下面创建了一个文件,其拥有人也是root,这个也很好的说明了我们的确是使用root的身份去创建的file这个目录。

还有一个问题,我们的mkdir这个命令因为多了一个s位,那么以前的x位权限到哪里去了呢。如果是S,代表以前是没有x权限,如果是s,就代表以前有x权限。

[root@localhost~]#

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13  2009 /bin/mkdir

[root@localhost~]# chmod u-x /bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwSr-xr-x1 root root 29852 Jul 13  2009 /bin/mkdir

[root@localhost~]# chmod u+x /bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13  2009 /bin/mkdir

[root@localhost~]#

可以看到,我们去掉了x权限,就变成了S,我们加上x权限,就又变成了s。

2.sgid权限

刚才我们的suid只可以运用在一个二进制文件上面,也就是命令上面。

而我们的sgid可以运用在命令和目录上面。

下面先来看下sgid运用在命令上面

如果允许运用在命令上面,和刚才的suid一样,只是变成了临时拥有该命令拥有组的权限,就这点区别。

下面在来看下sgid运用在目录上面

如果当一个目录运用的sgid权限,那么任何人在该目录建立的文件和目录就会继承该目录本身的组。

现在我们通过一个试验来了解sgid的权限,

[root@localhost~]#

[root@localhost~]# mkdir /redhat

[root@localhost~]#

[root@localhost~]# chmod 777 /redhat/

[root@localhost~]#

[root@localhost~]# ll -ld /redhat/

drwxrwxrwx2 root root 4096 Mar  1 21:26 /redhat/

[root@localhost~]#

现在我们新建了一个redhat目录,并且这个目录的权限是777,现在普通用户对这个目录也应该是rwx的权限,我们试试,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 1.txt

[user1@localhostredhat]$ ls

1.txt

[user1@localhostredhat]$

我们的确可以创建文件,那么这个文件的拥有人和拥有组会是谁呢,肯定是user1。现在我们就在这个目录上面添加一个sgid的权限。

[root@localhost~]#

[root@localhost~]# chmod g+s /redhat/

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 2.txt

[user1@localhostredhat]$

[user1@localhostredhat]$ ll

total0

-rw-rw-r–1 user1 user1 0 Mar  1 21:28 1.txt

-rw-rw-r–1 user1 root  0 Mar  1 21:30 2.txt

[user1@localhostredhat]$

当我给redhat这个目录添加了一个sgid的权限以后,我们利用普通用户在redhat目录里面创建的文件的拥有组就变成了root了。

现在我们再来理解一下sgid的权限,当我们在redhat目录上面运用了sgid的权限,那么普通用户user1在redhat目录下面创建的文件的拥有组就会继承redhat目录本身的组,不会随着用户的改变而改变。

还有一点,和刚刚一样,如果有x权限,就会显示s,如果没有x权限,就会显示S。

3.sticky权限

Sticky只可以运用在目录上面

如果在一个目录上面运用了sticky权限,那么仅root用户和和文件的拥有人才能删除该目录中的文件。

现在我们通过一个试验来了解sticky权限。

[root@localhost~]#

[root@localhost~]# ls -ld /redhat/

drwxrwxrwx3 root root 4096 Mar  1 21:48 /redhat/

[root@localhost~]#

Redhat目录的权限是777,现在普通用户应该是可以向这个目录里面创建文件的,我们来试试。

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$ touch 1.txt

[user1@localhostredhat]$ ls

1.txt

[user1@localhostredhat]$

我们使用user1在这个目录中创建了一个1.txt的文件,那么我们的user2能否去删除这个文件呢,肯定是可以的,因为我们的目录权限是777,所有我们的普通用户user2对这个目录是有w的权限的,有w权限就意味着可以在这个目录中创建和删除文件。我们试下,

[root@localhost~]#

[root@localhost~]# su – user2

[user2@localhost~]$

[user2@localhost~]$ cd /redhat/

[user2@localhostredhat]$

[user2@localhostredhat]$ ls

1.txt

[user2@localhostredhat]$ rm -rf 1.txt

[user2@localhostredhat]$ ls

[user2@localhostredhat]$

OK,是没有问题的,我们的确可以删除由user1创建的文件1.txt。

现在我们给redhat目录添加一个sticky,看看会发生什么。

[root@localhost~]#

[root@localhost~]# chmod o+t /redhat/

[root@localhost~]# ls -ld /redhat/

drwxrwxrwt2 root root 4096 Mar  1 23:19 /redhat/

[root@localhost~]#

可以看到,redhat目录已经添加了一个t的权限,这个就是sticky权限。

和上面一样,如果有x权限,就显示t。如果没有x权限,就显示T。

我们在使用user1创建一个文件,然后使用user2删除这个文件,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 2.txt

[user1@localhostredhat]$

[user1@localhostredhat]$ ls

2.txt

[user1@localhostredhat]$ su – user2

Password:

[user2@localhost~]$ cd /redhat/

[user2@localhostredhat]$ ls

2.txt

[user2@localhostredhat]$ rm -rf 2.txt

rm:cannot remove `2.txt’: Operation not permitted

[user2@localhostredhat]$

可以看到,现在我们使用user1创建的文件,user2是不可以删除的。

这个就是sticky权限的作用,

当一个redhat目录添加了一个sticky权限后,那么user1在redhat目录里面创建的2.txt文件,就只有root用户和user1才可以删除该文件。

在我们系统中有个目录就是运用了sticky权限。

[root@localhost~]#

[root@localhost~]# ls -ld /tmp/

drwxrwxrwt15 root root 4096 Feb 28 00:28 /tmp/

[root@localhost~]#

我们的/tmp目录默认就有了sticky权限。

我们的特殊权限也可以用数字来表示。

Suid            4

Sgid            2

Sticky         1

总结:

Suid权限用在命令上面,而且只能用在用户上面。

Sgid权限用在命令和目录上面,而且只能用在组上面。

Sticky权限用在目录上面,而且只能用在其他人上面。

关于高级权限的问题就这么多,在133里面还会有关于用户,组,权限的讨论。

 

 

 

 

 

 

 

下面先来了解一下关于用户,组的四个文件

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow

首先来了解一下/etc/passwd这个文件,

这个文件只是存放用户的信息

[root@localhost~]#

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

user1:x:500:500::/home/user1:/bin/bash

[root@localhost~]#

这里面总共有七个栏位,了解一下每个栏位的意义。

User1用户名

X 用户的密码位(如果这个位上面没有这个X,就代表登陆这个用户不需要密码)

500UID

500GID

第五个是密码的描述信息,这里没有。

/home/user1用户的/home目录

/bin/bash用户的shell

在这里有个比较特殊的shell /sbin/nologin

如果将用户的shell改为/sbin/nologin,那么这儿用户只可以登陆服务,但是不可以登陆计算机。不允许交互式登陆。

再来了解一下/etc/shadow这个文件,

这个文件主要是用来保存用户的密码信息和策略。

[root@localhost~]#

[root@localhost~]# cat /etc/shadow | grep user1

user1:$1$2WJEp9K7$h.NRfJsaEm8VMksBQHZm7.:14668:0:99999:7:::

[root@localhost~]#

现在来了解一下每个栏位的意义

User1用户名

第二个栏位是保存用户的密码,这个密码是经过MD5的加密的。

如果密码位前面有个!,就代表这个用户被锁定了。

14668密码最后一次修改的时间

0 密码最少的存活期(为0代表用户可以随时更改密码)

99999密码过期时间(99999代表密码永不过期)

7 密码过期警告天数(在密码过期的前七天警告用户)

再来了解一下/etc/group这个文件,

这个文件主要是用于存放组的信息。

[root@localhost~]#

[root@localhost~]# cat /etc/group | grep user1

user1:x:500:

[root@localhost~]#

现在来了解一下每个栏位的意义

User组的名字

X 组的密码位

500GID

可以将用户直接添加到冒号后面,就代表加入了这个组。

最后来了解一下/etc/gshadow这个文件,

这个文件主要是保存组密码的信息。

[root@localhost~]#

[root@localhost~]# cat /etc/gshadow | grep user1

user1:!::

[root@localhost~]#

User组的名字

可以看到,这个组默认是没有密码的,现在我们给它设置一个密码。

[root@localhost~]#

[root@localhost~]# gpasswd user1

Changingthe password for group user1

NewPassword:

Re-enternew password:

[root@localhost~]# cat /etc/gshadow | grep user1

user1:$1$ZxvTf/dQ$DWmf//MTxpwJIzTZIcYQZ/::

[root@localhost~]#

可以看到,组现在也有了一个密码,而且也是经过MD5加密的。

下面来看下组的密码有什么意义。

[root@localhost~]#

[root@localhost~]# useradd user2

[root@localhost~]#

[root@localhost~]# su – user2

[user2@localhost~]$

[user2@localhost~]$ newgrp user1

Password:

[user2@localhost~]$ id

uid=501(user2)gid=500(user1) groups=500(user1),501(user2)

[user2@localhost~]$

可以看到,我们user2现在加入到了user1,变成了user1组里面的成员,也就是说组密码的意义在于,一个普通用户只要有组的密码,就可以加入到这个组里面来,成为这个组里面的成员。

用户管理工具

Useradd添加用户

#useradduser1(用户名)

[root@localhost~]#

[root@localhost~]# useradd user1

[root@localhost~]#

[root@localhost~]# id user1

uid=502(user1)gid=502(user1) groups=502(user1)

[root@localhost~]#

User1就添加成功了。

Usermod修改用户

Userdel删除用户

#userdel-r user1(用户名)

[root@localhost~]#

[root@localhost~]# userdel -r user1

[root@localhost~]#

[root@localhost~]# id user1

id:user1: No such user

[root@localhost~]#

User1就成功删除了

-r在删除用户的同时删除用户的/home目录。

关于监视登陆的工具

#w

[root@localhost~]# w

15:27:32up 15:31, 3 users, load average: 0.81, 0.25, 0.08

USERTTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root:0 - 21Feb10 ?xdm? 3:07 0.30s /usr/bin/ gnome-

rootpts/2 :0.0 15:27 0.00s 0.06s 0.01s w

rootpts/1 192.168.0.20 15:27 13.00s 0.05s 0.05s - bash

[root@localhost~]#

可以看到192.168.0.20正在连接我。

#last

[root@localhost~]#

[root@localhost~]# last

rootpts/2 station20.exampl Sun Feb 28 15:32 still logged in

rootpts/1 :0.0 Sun Feb 28 15:31 still logged in

rootpts/2 :0.0 Fri Feb 26 17:21 – 00:32 (1+07:10)

rootpts/1 :0.0 Mon Feb 22 23:07 – 21:46 (3+22:38)

rootpts/2 :0.0 Mon Feb 22 18:31 - 23:07 (04:36)

rootpts/2 :0.0 Mon Feb 22 14:33 - 14:33 (00:00)

rootpts/1 :0.0 Sun Feb 21 17:33 - 18:31 (1+00:57)

rootpts/1 :0.0 Sun Feb 21 17:28 - 17:33 (00:04)

rootpts/1 :0.0 Sun Feb 21 13:30 - 17:28 (03:57)

root:0 Sun Feb 21 13:30 still logged in

root:0 Sun Feb 21 13:30 – 13:30 (00:00)

rebootsystem boot 2.6.18-164.el5 Sun Feb 21 13:29 (7+02:03)

rootpts/1 :0.0 Sun Feb 21 21:22 – down (-7:-54)

root:0 Sun Feb 21 21:21 – down (-7:-54)

root:0 Sun Feb 21 21:21 – 21:21 (00:00)

rebootsystem boot 2.6.18-164.el5 Sun Feb 21 21:17 (-7:-50)

rebootsystem boot 2.6.18-164.el5 Sun Feb 21 21:14 (00:02)

wtmpbegins Sun Feb 21 21:14:07 2010

[root@localhost~]#

曾经有那些用户登陆过我的计算机。并且在我计算机上面登陆了多久,很多东西都可以查看的到。

#lastb

[root@localhost~]#

[root@localhost~]# lastb

rootssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)

rootssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)

rootssh:notty www.google.com. Mon Feb 22 15:50 – 15:50 (00:00)

btmpbegins Mon Feb 22 15:50:50 2010

[root@localhost~]#

这条命令显示的结果是那些计算机曾经登录过我的计算机,但是没有登录成功的计算机。只会显示没有登录成功的信息,并且它们是使用的什么方法尝试连接我的计算机,这里面都很详细。

默认权限(defaults perm)

默认的时候,我们在创建文件和目录的时候,并不是继承了上级目录的权限,而是根据目录和文件的UMASK值来决定的。

关于UMASK值

就是用来定义文件的默认权限的

如何在系统查询UMASK值呢?

#umask

[root@localhost~]#

[root@localhost~]# umask

0022

[root@localhost~]#

可以看到,系统中的umask值为0022

当然这个umask也是可以修改的

#umask0033

[root@localhost~]#

[root@localhost~]# umask 0033

[root@localhost~]#

[root@localhost~]# umask

0033

[root@localhost~]#

系统的umask值被我们改成0033了。

Umask是怎么定义目录和文件的权限的

对于不同用户,umask定义都不一样。

对于root uamsk值为022

对于普通用户 umask值为002

那么我们在创建目录和文件的时候默认权限是多少呢。

对于root 目录 777-022 755

文件 666-022 644

对于普通用户 目录 777-002 775

文件 666-002 664

这就是我们的创建目录和文件的默认权限。

注意 :我们在用最高权限减umask值的时候一定是用二进制的数值来减,而不是十进制的数值来减。

[root@localhost~]#

[root@localhost~]# umask

0022

[root@localhost~]# mkdir test

[root@localhost~]# touch test1

[root@localhost~]# ll | grep test

drwxr-xr-x2 root root 4096 Feb 28 16:42 test

-rw-r–r– 1 root root 0 Feb 28 16:43 test1

[root@localhost~]#

可以看到,我们目录的默认权限的确是755.文件的默认权限的确是644。

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ umask

0002

[user1@localhost~]$ mkdir file

[user1@localhost~]$

[user1@localhost~]$ touch file1

[user1@localhost~]$ ll | grep file

drwxrwxr-x2 user1 user1 1024 Feb 28 16:44 file

-rw-rw-r– 1user1 user1 0 Feb 28 16:44 file1

[user1@localhost~]$

可以看到,在普通用户的身份下面。我们创建的目录的权限为775,文件的权限为664。

关于三个特殊的权限

1.suid权限

如果在一个可执行文件(命令或者脚本)运用了suid后,那么任何人在执行该命令的时候会临时拥有该命令的拥有人权限。

我们知道passwd这个命令管理员可以运行,还有普通用户也可以运行。

还有如果我们利用passwd来修改密码成功了,是要在/etc/shadow这个文件中去添加一个密码位的,现在我们看看这个文件的权限。

[root@localhost~]#

[root@localhost~]# ls -l /etc/shadow

-r——– 1root root 1050 Feb 25 23:01 /etc/shadow

[root@localhost~]#

可以看到,这个文件普通用户什么权限也没有,连读的权限都没有,那么普通用户是怎么修改自己的密码,并且能够将密码写在/etc/shadow文件里面的呢。

[root@localhost~]#

[root@localhost~]# ll /usr/bin/passwd

-rwsr-xr-x1 root root 22960 Jul 17 2006 /usr/bin/passwd

[root@localhost~]#

我们可以看到passwd这个命令的权限位上面多了一个s,这个是我们以前从来没有看见过的,这个就是suid。

当普通用户利用passwd来修改密码的时候,由于passwd命令上面有suid权限,那么普通用户就会临时拥有该命令的拥有人root的权限,从而就可以往/etc/shadow这个文件里面去写入密码位了。

现在还有个问题,如果普通用户因为suid原因可以修改密码,那么普通用户能否去修改别的用户的密码呢,我们来尝试一下。

[user1@localhost~]$

[user1@localhost~]$ passwd user2

passwd:Only root can specify a user name.

[user1@localhost~]$

我们可以看到,是不可以修改的。如果按照理论情况,我们的passwd命令因为具有suid权限,那么是可以修改别的用户的密码的。这里并不是passwd命令不具有suid功能,它也并没有报权限拒绝。而是提示我们passwd这个命令只有root用户才可以在后面接上用户名,系统是从语法上面做了限制,而并不是suid,没有生效。这也是系统为了保证安全。

我们在做一个试验来了解suid的作用

先来看看系统中根的权限是什么

[root@localhost~]#

[root@localhost~]# ls -ld /

drwxr-xr-x25 root root 4096 Feb 28 00:30 /

[root@localhost~]#

可以看到,根的权限是755,也就是说一个普通用户是没有办法往根里面写入数据的,普通用户是属于其他人吗。我们试试

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /

[user1@localhost/]$ mkdir test

mkdir:cannot create directory `test’: Permission denied

[user1@localhost/]$

可以看到,我们的普通用户user1对根没有写入的权限。

现在我们给mkdir这条命令加一个suid的权限。看看会发生什么。

[root@localhost~]#

[root@localhost~]# which mkdir

/bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwxr-xr-x1 root root 29852 Jul 13 2009 /bin/mkdir

[root@localhost~]#

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

[root@localhost~]#

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13 2009 /bin/mkdir

[root@localhost~]#

可以看到,mkdir这个命令的权限已经多了一个s权限。

现在我们在使用普通用户去根下面创建一个文件,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /

[user1@localhost/]$ mkdir file

[user1@localhost/]$

[user1@localhost/]$ ll -ld file/

drwxrwxr-x2 root user1 4096 Feb 28 21:58 file/

[user1@localhost/]$

现在我们就可以在根下面创建目录了,是因为我们普通用户在使用mkdir这条命令的时候临时变成了该命令的拥有人的权限,所有普通用户就可以在根下面创建目录,还可以看到,我们通过user1在根下面创建了一个文件,其拥有人也是root,这个也很好的说明了我们的确是使用root的身份去创建的file这个目录。

还有一个问题,我们的mkdir这个命令因为多了一个s位,那么以前的x位权限到哪里去了呢。如果是S,代表以前是没有x权限,如果是s,就代表以前有x权限。

[root@localhost~]#

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13 2009 /bin/mkdir

[root@localhost~]# chmod u-x /bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwSr-xr-x1 root root 29852 Jul 13 2009 /bin/mkdir

[root@localhost~]# chmod u+x /bin/mkdir

[root@localhost~]# ll /bin/mkdir

-rwsr-xr-x1 root root 29852 Jul 13 2009 /bin/mkdir

[root@localhost~]#

可以看到,我们去掉了x权限,就变成了S,我们加上x权限,就又变成了s。

2.sgid权限

刚才我们的suid只可以运用在一个二进制文件上面,也就是命令上面。

而我们的sgid可以运用在命令和目录上面。

下面先来看下sgid运用在命令上面

如果允许运用在命令上面,和刚才的suid一样,只是变成了临时拥有该命令拥有组的权限,就这点区别。

下面在来看下sgid运用在目录上面

如果当一个目录运用的sgid权限,那么任何人在该目录建立的文件和目录就会继承该目录本身的组。

现在我们通过一个试验来了解sgid的权限,

[root@localhost~]#

[root@localhost~]# mkdir /redhat

[root@localhost~]#

[root@localhost~]# chmod 777 /redhat/

[root@localhost~]#

[root@localhost~]# ll -ld /redhat/

drwxrwxrwx2 root root 4096 Mar 1 21:26 /redhat/

[root@localhost~]#

现在我们新建了一个redhat目录,并且这个目录的权限是777,现在普通用户对这个目录也应该是rwx的权限,我们试试,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 1.txt

[user1@localhostredhat]$ ls

1.txt

[user1@localhostredhat]$

我们的确可以创建文件,那么这个文件的拥有人和拥有组会是谁呢,肯定是user1。现在我们就在这个目录上面添加一个sgid的权限。

[root@localhost~]#

[root@localhost~]# chmod g+s /redhat/

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 2.txt

[user1@localhostredhat]$

[user1@localhostredhat]$ ll

total0

-rw-rw-r– 1user1 user1 0 Mar 1 21:28 1.txt

-rw-rw-r– 1user1 root 0 Mar 1 21:30 2.txt

[user1@localhostredhat]$

当我给redhat这个目录添加了一个sgid的权限以后,我们利用普通用户在redhat目录里面创建的文件的拥有组就变成了root了。

现在我们再来理解一下sgid的权限,当我们在redhat目录上面运用了sgid的权限,那么普通用户user1在redhat目录下面创建的文件的拥有组就会继承redhat目录本身的组,不会随着用户的改变而改变。

还有一点,和刚刚一样,如果有x权限,就会显示s,如果没有x权限,就会显示S。

3.sticky权限

Sticky只可以运用在目录上面

如果在一个目录上面运用了sticky权限,那么仅root用户和和文件的拥有人才能删除该目录中的文件。

现在我们通过一个试验来了解sticky权限。

[root@localhost~]#

[root@localhost~]# ls -ld /redhat/

drwxrwxrwx3 root root 4096 Mar 1 21:48 /redhat/

[root@localhost~]#

Redhat目录的权限是777,现在普通用户应该是可以向这个目录里面创建文件的,我们来试试。

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$ touch 1.txt

[user1@localhostredhat]$ ls

1.txt

[user1@localhostredhat]$

我们使用user1在这个目录中创建了一个1.txt的文件,那么我们的user2能否去删除这个文件呢,肯定是可以的,因为我们的目录权限是777,所有我们的普通用户user2对这个目录是有w的权限的,有w权限就意味着可以在这个目录中创建和删除文件。我们试下,

[root@localhost~]#

[root@localhost~]# su – user2

[user2@localhost~]$

[user2@localhost~]$ cd /redhat/

[user2@localhostredhat]$

[user2@localhostredhat]$ ls

1.txt

[user2@localhostredhat]$ rm -rf 1.txt

[user2@localhostredhat]$ ls

[user2@localhostredhat]$

OK,是没有问题的,我们的确可以删除由user1创建的文件1.txt。

现在我们给redhat目录添加一个sticky,看看会发生什么。

[root@localhost~]#

[root@localhost~]# chmod o+t /redhat/

[root@localhost~]# ls -ld /redhat/

drwxrwxrwt2 root root 4096 Mar 1 23:19 /redhat/

[root@localhost~]#

可以看到,redhat目录已经添加了一个t的权限,这个就是sticky权限。

和上面一样,如果有x权限,就显示t。如果没有x权限,就显示T。

我们在使用user1创建一个文件,然后使用user2删除这个文件,

[root@localhost~]#

[root@localhost~]# su – user1

[user1@localhost~]$

[user1@localhost~]$ cd /redhat/

[user1@localhostredhat]$

[user1@localhostredhat]$ touch 2.txt

[user1@localhostredhat]$

[user1@localhostredhat]$ ls

2.txt

[user1@localhostredhat]$ su – user2

Password:

[user2@localhost~]$ cd /redhat/

[user2@localhostredhat]$ ls

2.txt

[user2@localhostredhat]$ rm -rf 2.txt

rm:cannot remove `2.txt’: Operation not permitted

[user2@localhostredhat]$

可以看到,现在我们使用user1创建的文件,user2是不可以删除的。

这个就是sticky权限的作用,

当一个redhat目录添加了一个sticky权限后,那么user1在redhat目录里面创建的2.txt文件,就只有root用户和user1才可以删除该文件。

在我们系统中有个目录就是运用了sticky权限。

[root@localhost~]#

[root@localhost~]# ls -ld /tmp/

drwxrwxrwt15 root root 4096 Feb 28 00:28 /tmp/

[root@localhost~]#

我们的/tmp目录默认就有了sticky权限。

我们的特殊权限也可以用数字来表示。

Suid4

Sgid2

Sticky1

总结:

Suid权限用在命令上面,而且只能用在用户上面。

Sgid权限用在命令和目录上面,而且只能用在组上面。

Sticky权限用在目录上面,而且只能用在其他人上面。

关于高级权限的问题就这么多,在133里面还会有关于用户,组,权限的讨论。