当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪RHCE学习笔记-RHEL5.4配置tcp_wrappers      本文介绍 inux下tcp_wrappers的配置过程,供大家学习参考。 Linux访问控制的流程: --->iptables--->tcp_wrappers--->服务本身的访问控制。 Iptables: 基于原IP,目的IP,原端口,目的端口来进行控.........
    ▪RHCE学习笔记-RHEL5.4配置yum仓库      本文介绍RHEL 5中YUM源(仓库)配置的相关内容,供大家学习参考。 Yum全称为 Yellow dog Updater, Modified(软件包管理器),主要功能是更方便的添加/删除/更新RPM包, yum很好的解决了linux下面安装软.........
    ▪RHCE学习笔记-RHEL5.4高级用户、用户组和权限      本文介绍linux下高级用户,用户组,权限的相关知识,供大家学习参考。 先来了解一下关于用户,用户组的四个文件: /etc/passwd /etc/shadow /etc/group /etc/gshadow 首先来了解一下/etc/passwd这个文件.........

[1]RHCE学习笔记-RHEL5.4配置tcp_wrappers
    来源: 互联网  发布时间: 2013-12-24

本文介绍 inux下tcp_wrappers的配置过程,供大家学习参考。

Linux访问控制的流程:
--->iptables--->tcp_wrappers--->服务本身的访问控制。
Iptables: 基于原IP,目的IP,原端口,目的端口来进行控制的。
Tcp_wrappers:对服务的本身来进行控制。
Service:  对行为做控制,更细致的控制。

本文介绍第二层防火墙tcp_wrappers。
Tcp_wrappwes的访问控制主要是两个文件,
/etc/hosts.allow 
/etc/hosts.deny
在/etc/hosts.allow是用来定义允许的访问,
在/etc/hosts.deny是用来定义拒绝的访问。

现在我们来了解一下tcp_wrappers的访问控制判断顺序。
首先查看/etc/hosts.allow,如果匹配到一个条目,将不在读取下面的。
如果在/etc/hosts.allow没有匹配到条目,则读取/etc/hosts.deny,如果匹配,则拒绝,如果不匹配,则默认允许所有。
举例说明:
allow     192.168.1.0/24
Deny     192.168.1.1
如果是这样的呢,192.168.1.1可以访问吗?

是可以的,在allow里面定义了允许192.168.1.0/24,这个网段里面就包含了192.168.1.1。它已经明确了指定了允许192.168.1.0/24的网络,那么192.168.1.1匹配到这个条目,就不在往下面读。

关于tcp_wrappers的语法
Daemon_list : client_list

还可以这样写,指定在那台主机上面的服务,
daemon@host :client_list

关于客户机的说明
IP地址   192.168.0.1
域名      .example.com
网段      192.168.0.0/255.255.255.0  192.168.0.
这里的表示方法不可以用/24。

试验,
默认情况下,我们的tcp_wrappers防火墙的默认允许所有的,是因为在/etc/hosts.allow和/etc/hosts.deny这两个文件里面默认是任何策略也没有的。
现在我们在192.168.0.10这台主机上面去ssh到192.168.0.254。
[root@localhost ~]#
[root@localhost ~]# ssh 192.168.0.254
root@192.168.0.254's password:
Last login: Thu Mar 11 21:56:54 2010 from 192.168.0.254
[root@localhost ~]#
OK,可以看到,我们没有做任何的策略,192.168.0.10的确是可以ssh到192.168.0.254这台主机上面去的。

下面开始做策略,在192.168.0.254这台主机上面拒绝192.168.0.10来ssh。
编辑/etc/hosts.deny文件,
Vim  /etc/hosts.deny

代码如下:
#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!
sshd: 192.168.0.10

/etc/hosts.deny文件就定义完成了,现在来测试下,
[root@localhost ~]#
[root@localhost ~]# ssh 192.168.0.254
ssh_exchange_identification: Connection closed by remote host
[root@localhost ~]#
可以看到,现在连接就被直接拒绝了。
当然,后面匹配的客户端的写法可以是192.168.0.0/255.255.255.0,也可以是192.168.0.这个也可以。用域的方式来表示也没有问题可以写成.example.com。但是不可以用192.168.0.0/24来表示一个网段。

关于主机的宏定义表示方式
宏定义表示某一种类型的主机
LOCAL       主机中不含.的主机(通常是指自己)
KNOWN       所有在DNS中可以解析到的主机
UNKNOWN     所有在DNS不可以解析到的主机
PARANOID    所有在DNS中正向解析与反向解析不匹配的主机
ALL         代表匹配所有(这个主机和服务都可以定义)

还有一个非常有用的定义方式:
EXCEPT
这个就代表反向选择,

现在做一个试验来理解这个参数的意义,
先在192.168.0.254这台主机上面定义./etc/hosts.deny这个文件,

代码如下:
#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!
sshd: 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.10
/etc/hosts.deny文件定义完成了,来测试下。

现在我们在192.168.0.10上面去ssh到192.168.0.254上,看下能否成功。
[root@localhost ~]#
[root@localhost ~]# ssh 192.168.0.254
root@192.168.0.254's password:
Last login: Thu Mar 11 22:25:04 2010 from 192.168.0.10
[root@localhost ~]#
OK,192.168.0.10是可以ssh到192.168.0.254上面去的。

现在我们在来利用192.168.0.20来ssh到192.168.0.254,看下能否成功。
[root@localhost ~]#
[root@localhost ~]# ssh 192.168.0.254
ssh_exchange_identification: Connection closed by remote host
[root@localhost ~]#
可以看到,现在连接就被拒绝了。

为什么192.168.0.10可以ssh到192.168.0.254上面,而192.168.0.20不可以ssh到192.168.0.254上面去呢,这个就是刚才EXCEPT的作用。我们在/etc/hosts.deny文件里面定义了拒绝192.168.0.0/255.255.255.0这个网络中的所有主机,但是,除了192.168.0.10以外。就是这个原因。

我们刚才是将EXCEPT写在了/etc/hosts.deny文件中,如果写在/etc/hosts.allow里面呢,那么就和写在deny里面就又不一样了。

现在将hosts.deny给清空掉,然后编辑hosts.allow文件。

代码如下:
#
# hosts.allow   This file describes the names of the hosts which are
#               allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
sshd: 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.10

/etc/hosts.allow文件就编辑完成了,这个时候,192.168.0.10可以ssh到192.168.0.254吗,测试下。
[root@localhost ~]#
[root@localhost ~]# ssh 192.168.0.254
root@192.168.0.254's password:
Last login: Thu Mar 11 22:31:42 2010 from 192.168.0.20
[root@localhost ~]#
可以看到,是允许的,这个又是为什么呢,当192.168.0.10想要去ssh到192.168.0.254这台主机的时候,先读取/etc/hosts.allow文件,在hosts.allow文件中定义了允许192.168.0.0/255.255.255.0这个网络,除了192.168.0.10这台主机,但是并没有明确给192.168.0.10这台主机一个允许或拒绝的定义,是先读取hosts.allow文件,而这个文件只是将192.168.0.10这台主机排除在外,最终还是要看hosts.deny文件中的定义是怎么样的。

查询哪些服务是支持tcp_wrappers
可以先查询这个服务的脚本在哪里,用which命令,
[root@localhost ~]#
[root@localhost ~]# which sshd
/usr/sbin/sshd
[root@localhost ~]#

再使用ldd命令来查询
查询这个脚本在允许的时候调用了那些动态链接库文件,

代码如下:
[root@localhost ~]#
[root@localhost ~]# ldd /usr/sbin/sshd |grep libwrap
        libwrap.so.0 => /lib/libwrap.so.0 (0x00b92000)
[root@localhost ~]#

如果服务调用了libwrap.so这个动态链接库文件就代表这个服务支持tcp_wrappers。

也可以直接查询,

代码如下:
[root@localhost ~]#
[root@localhost ~]# ldd `which vsftpd` |grep libwrap
        libwrap.so.0 => /lib/libwrap.so.0 (0x00825000)
[root@localhost ~]#

可以看到,vsftpd也是可以支持tcp_wrappers的。

还有一种方式也可以来查询那些服务可以支持tcp_wrappers。

代码如下:
[root@localhost ~]#
[root@localhost ~]# strings `which portmap` |grep hosts
hosts_access_verbose
hosts_allow_table
hosts_deny_table
/etc/hosts.allow
/etc/hosts.deny
[root@localhost ~]#

只要查询出来有/etc/hosts.allow和/etc/hosts.deny这两个文件就代表这个服务支持tcp_wrappers。

那么我们的xinetd服务是否支持tcp_wrappers呢?

代码如下:
[root@localhost ~]#
[root@localhost ~]# ldd `which xinetd` |grep libwrap
        libwrap.so.0 => /lib/libwrap.so.0 (0x0035a000)
[root@localhost ~]#

可以看到,xinetd服务是支持tcp_wrappers的,也就是说由xinetd管理的所有服务都是支持tcp_wrapers的。

使用ldd和strings工具来查询,只要满足其中一种方式就可以支持tcp_wrappers。
当然,也有很多服务是不支持tcp_wrappers的,
比如说named,httpd等等。
这也是为什么还要有iptables防火墙,它会更加的强大的。
 
linux下Tcp_wrappers防火墙的简单应用,就介绍这些,希望对大家有所帮助。


    
[2]RHCE学习笔记-RHEL5.4配置yum仓库
    来源: 互联网  发布时间: 2013-12-24

本文介绍RHEL 5中YUM源(仓库)配置的相关内容,供大家学习参考。

Yum全称为 Yellow dog Updater, Modified(软件包管理器),主要功能是更方便的添加/删除/更新RPM包, yum很好的解决了linux下面安装软件包的依赖性关系。很强大哦! 他能便于管理大量系统的更新问题  ,能同时设置多个资源库(Repository),而且使用起来十分的方便。

以下内容为大家详细讲解如何在RHEL5.4上面配置仓库的方法。

这里,我们利用FTP的方式来制作yum的安装源。
先将光盘中的ftp的rpm软件包copy到/tmp目录下面,

代码如下:
[root@localhost ~]#
[root@localhost ~]# cd /media/RHEL_5.4\ i386\ DVD/Server/
[root@localhost Server]#
[root@localhost Server]# ls | grep vsftpd
vsftpd-2.0.5-16.el5.i386.rpm
[root@localhost Server]# cp vsftpd-2.0.5-16.el5.i386.rpm /tmp/
[root@localhost Server]# cd /tmp/
[root@localhost tmp]# ls
vsftpd-2.0.5-16.el5.i386.rpm
[root@localhost tmp]#

由于yum仓库还没有配置,可以用rpm的方式来安装ftp。
[root@localhost tmp]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm
warning: vsftpd-2.0.5-16.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:vsftpd      ########################################### [100%]
[root@localhost tmp]#
FTP服务就安装成功了。

安装完FTP服务以后。默认会产生一个/var/ftp/pub的目录。

代码如下:
[root@localhost pub]#
[root@localhost ~]# cd /var/ftp/pub/
[root@localhost pub]# ls
[root@localhost pub]#

现在这个目录里面什么东西都没有,我们将光盘里面的东西copy到这里目录下面来。
 

代码如下:
[root@localhost ~]#
[root@localhost ~]# cd /var/ftp/pub/
[root@localhost pub]# ls
Cluster  ClusterStorage  Server  VT
[root@localhost pub]#

可以看到,在/var/ftp/pub目录下面已经有了这四个文件夹

现在启动一下ftp服务

代码如下:
[root@localhost ~]#
[root@localhost ~]# service vsftpd restart
Shutting down vsftpd:                 [  OK  ]
Starting vsftpd for vsftpd:           [  OK  ]
[root@localhost ~]#

配置yum仓库

Yum仓库在/etc/yum.repod目录下面,(文件名必须以.repo结尾)

代码如下:
[root@localhost ~]#
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
rhel-debuginfo.repo
[root@localhost yum.repos.d]#

在/etc/yum.repos.d这个目录里面有一个rhel-debuginfo.repo的模板文件,

可以按照这个文件里面的内容来配置yum仓库。

代码如下:
[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/$basearch/Debuginfo/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
这个就是rhel-debuginfo.repo的模板文件里面的内容,我们可以按照这个里面的内容来编写。
[Server]
name=Red Hat Enterprise Linux Server
baseurl=ftp://192.168.0.254/pub/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[Cluster]
name=Red Hat Enterprise Linux Cluster
baseurl=ftp://192.168.0.254/pub/Cluster
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[ClusterStorage]
name=Red Hat Enterprise Linux ClusterStorage
baseurl=fttp://192.168.0.254/pub/ClusterStorage
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[VT]
name=Red Hat Enterprise Linux VT
baseurl=fttp://192.168.0.254/pub/VT
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

这个就是整个yum仓库的配置内容。


yum仓库中每一行的意义

[Server]
这个是指仓库的名称,可以随意命名,但是每个仓库的名字不要重复

Name   
这个只是对仓库进行的一个描述,也可以随意些,但要有意义

Baseurl  
这个很重要,这个是指定路径,可以用file,ftp,http 用后面两个必须开启相应的服务。File可以用来做本地仓库。一定要保证路径可达

Enabled=0  or  1 
这个相当于开关,如果等于1,代表开启。0则关闭,开启是指是否要去读这个文件,关闭则不去读这个文件

Gpgcheck=0  or  1
与上面一样。是指安装软件包的时候检查数字签名,检查软件包的完整性。

Gpgkey         
开启gpgcheck后,通过gpgkey来指定,相应的gpg文件
如果不指定gpgkey文件,那么就必须手动的导入相应的gpg文件,

Rpm –import  /etc/pki/rpm-gpg/RPM-GPG-KEY-redehat-release
必须手动的敲入这条命令。

RHEL发行版安装好后会将相应的gpgkey放在/etc/pki/rpm-gpg目录下面。
Yum仓库中每一行参数都已经介绍完毕。

下面进行装包测试,
[root@localhost ~]# yum -y install bind
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bind.i386 30:9.3.6-4.P1.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved
==================================================================

Package       Arch          Version       Repository       Size

==================================================================
Installing:
 bind          i386       30:9.3.6-4.P1.el5      Server    978 k
Transaction Summary

==================================================================
Install           1 Package(s)       
Update        0 Package(s)       
Remove       0 Package(s)       

Total download size: 978 k
Downloading Packages:
bind-9.3.6-4.P1.el5.i386.rpm                             | 978 kB     00:00   
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 37017186
Server/gpgkey                                                    | 1.1 kB     00:00   
Importing GPG key 0x37017186 "Red Hat, Inc. (release key) <security@redhat.com>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : bind                                                     1/1
 
Installed:
  bind.i386 30:9.3.6-4.P1.el5                                                 

Complete!
[root@localhost ~]#

Yum仓库就已经配置成功了,我们的软件包已经可以正常的安装了。

至此,在linux下配置yum仓库的内容介绍完了,希望对大家有所帮助。


    
[3]RHCE学习笔记-RHEL5.4高级用户、用户组和权限
    来源: 互联网  发布时间: 2013-12-24

本文介绍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
Changing the password for group user1
New Password:
Re-enter new 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:32 up 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  Sun Feb 21    13:30   still logged in 
root       :0  Sun Feb 21    13:30 - 13:30     (00:00)  
reboot  system boot  2.6.18-164.el5  Sun Feb 21 13:29       (7+02:03) 
root      pts/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)  
reboot   system boot  2.6.18-164.el5  Sun Feb 21 21:17       (-7:-50) 
reboot   system boot  2.6.18-164.el5  Sun Feb 21 21:14       (00:02)  
wtmp begins 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)  
btmp begins 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-x 2 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-x 2 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-x 1 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-x 25 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-x 1 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-x 1 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-x 2 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-x 1 root root 29852 Jul 13  2009 /bin/mkdir
[root@localhost ~]# chmod u-x /bin/mkdir
[root@localhost ~]# ll /bin/mkdir
-rwSr-xr-x 1 root root 29852 Jul 13  2009 /bin/mkdir
[root@localhost ~]# chmod u+x /bin/mkdir
[root@localhost ~]# ll /bin/mkdir
-rwsr-xr-x 1 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/
drwxrwxrwx 2 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@localhost redhat]$
[user1@localhost redhat]$ touch 1.txt
[user1@localhost redhat]$ ls
1.txt
[user1@localhost redhat]$
我们的确可以创建文件,那么这个文件的拥有人和拥有组会是谁呢,肯定是user1。现在我们就在这个目录上面添加一个sgid的权限。

[root@localhost ~]#
[root@localhost ~]# chmod g+s /redhat/
[root@localhost ~]#
[root@localhost ~]# su - user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$
[user1@localhost redhat]$ touch 2.txt
[user1@localhost redhat]$
[user1@localhost redhat]$ ll
total 0
-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@localhost redhat]$

当我给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/
drwxrwxrwx 3 root root 4096 Mar  1 21:48 /redhat/
[root@localhost ~]#
Redhat目录的权限是777,现在普通用户应该是可以向这个目录里面创建文件的,我们来试试。

[root@localhost ~]#
[root@localhost ~]# su - user1
[user1@localhost ~]$ cd /redhat/
[user1@localhost redhat]$ touch 1.txt
[user1@localhost redhat]$ ls
1.txt
[user1@localhost redhat]$

我们使用user1在这个目录中创建了一个1.txt的文件,那么我们的user2能否去删除这个文件呢,肯定是可以的,因为我们的目录权限是777,所有我们的普通用户user2对这个目录是有w的权限的,有w权限就意味着可以在这个目录中创建和删除文件。我们试下,
[root@localhost ~]#
[root@localhost ~]# su - user2
[user2@localhost ~]$
[user2@localhost ~]$ cd /redhat/
[user2@localhost redhat]$
[user2@localhost redhat]$ ls
1.txt
[user2@localhost redhat]$ rm -rf 1.txt
[user2@localhost redhat]$ ls
[user2@localhost redhat]$
OK,是没有问题的,我们的确可以删除由user1创建的文件1.txt。
现在我们给redhat目录添加一个sticky,看看会发生什么。
[root@localhost ~]#
[root@localhost ~]# chmod o+t /redhat/
[root@localhost ~]# ls -ld /redhat/
drwxrwxrwt 2 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@localhost redhat]$
[user1@localhost redhat]$ touch 2.txt
[user1@localhost redhat]$
[user1@localhost redhat]$ ls
2.txt
[user1@localhost redhat]$ su - user2
Password:
[user2@localhost ~]$ cd /redhat/
[user2@localhost redhat]$ ls
2.txt
[user2@localhost redhat]$ rm -rf 2.txt
rm: cannot remove `2.txt': Operation not permitted
[user2@localhost redhat]$
可以看到,现在我们使用user1创建的文件,user2是不可以删除的。
这个就是sticky权限的作用,

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

[root@localhost ~]#
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt 15 root root 4096 Feb 28 00:28 /tmp/
[root@localhost ~]#
我们的/tmp目录默认就有了sticky权限。
我们的特殊权限也可以用数字来表示。
Suid            4
Sgid            2
Sticky         1

总结:
Suid权限用在命令上面,而且只能用在用户上面。
Sgid权限用在命令和目录上面,而且只能用在组上面。
Sticky权限用在目录上面,而且只能用在其他人上面。

至此,有关linux下用户高级用户、用户级及权限的内容就介绍完了,希望对大家有所帮助。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3