天天看點

RHCE學習<3>NFS、Samba、ACL權限、SELinux和RPM包管理

一、nfs網絡檔案共享服務

1、簡單介紹

nfs包含3個版本:nfsv2、nfsv3、nfsv4

rhel6是以nfsv4作為預設版本,nfsv4使用tcp協定,預設nfs占用5個端口,1個nfs端口(2049),四個動态端口,而老版本的nfs可以在tcp協定或者是udp協定上運作。

/etc/exports:nfs服務的主配置檔案,該檔案的最主要目的是釋出共享目錄并為共享目錄限制權限。

/var/lib/nfs/xtab:這個檔案主要用來記錄用戶端與nfs伺服器的連接配接記錄。

格式:共享目錄 用戶端 參數

用戶端

示例

使用ip位址指定單一主機

10.20.30.40

使用ip位址指定範圍主機

172.16.0.0/16

192.168.1.*

使用域名指定單一主機

test.ice.apple

使用域名指定範圍主機

*.ice.apple

使用通配符指定所有主機

*

參數

說明

ro

設定共享權限為隻讀

rw

設定共享權限為讀寫

root_squash

共享目錄的使用者是root時,将被映射為匿名賬号(nobody)

no_root_squash

當使用nfs伺服器共享目錄的使用者是root時,将不被映射為匿名賬号

all_squash

将所有使用nfs伺服器共享目錄的使用者都映射為匿名賬号

anonuid

設定匿名賬号的uid

anongid

設定匿名賬号的gid

sync

将資料同步寫入記憶體和硬碟。這可能導緻效率降低

async

先将資料儲存在記憶體中,而不是直接儲存在硬碟

2、安裝nfs

1

2

3

4

5

6

<code>yum </code><code>install</code> <code>-y nfs-utils</code>

<code>service rpcbind start</code>

<code>service nfs start</code>

<code>chkconfig rpcbind on</code>

<code>chkconfig nfs on</code>

<code>一定要先啟動rpcbind,預設端口111,然後再啟動nfs,不然nfs quotas和nfs daemon都将啟動失敗.</code>

3、共享目錄設定

<code>vi</code> <code>/etc/exports</code>

<code>/media</code> <code>192.168.0.10(rw,no_root_squash)</code>

<code>/test</code> <code>192.168.0.0</code><code>/24</code><code>(ro)</code>

4、exportfs指令

<code>exportfs -r </code><code>#重新整理共享配置</code>

<code>exportfs -</code><code>v</code>  <code>#檢視目前共享配置</code>

<code>exportfs -auv  </code><code>#用于停止目前主機中nfs伺服器的所有目錄輸出</code>

<code>exportfs -av  </code><code>#用于輸出nfs伺服器的所有共享目錄</code>

<code>showmount -e  </code><code>#在nfs server上執行此指令顯示nfs server上所有的共享卷</code>

5、用戶端使用

<code>showmount -e ip </code><code>#檢視nfs伺服器釋出的共享目錄</code>

<code>mount</code> <code>-t nfs ip:</code><code>/media</code> <code>本地挂載點</code>

<code>開機自動挂載設定:</code>

<code>vi</code> <code>/etc/fstab</code>

<code>nfs伺服器的ip:共享目錄 挂載點 nfs defaults 0 0</code>

6、設定nfs固定端口

預設情況下安裝完,nfs使用的都是動态端口,開啟防火牆就麻煩了,nfs啟動時,會讀取/etc/sysconfig/nfs檔案,是以我們要修改它,來強制使用固定端口。

<code>vi</code> <code>/etc/sysconfig/nfs</code>

<code>mount_port=</code><code>"4001"</code>

<code>statd_port=</code><code>"4002"</code>

<code>lockd_tcpport=</code><code>"4003"</code>

<code>lockd_udpport=</code><code>"4004"</code>

7、設定防火牆

<code>iptables -p input drop</code>

<code>iptables -a input -p tcp -m multiport --dport 2049,4001,4002,4003,4004 -j accept</code>

二、samba檔案共享

1、samba項目是smb/cifs協定在linux/unix系統中的實作,能夠實作跨平台的檔案和列印機資源共享,适用于複雜的作業系統環境。samba服務預設端口:tcp協定的139、445;udp協定的137、138。

samba伺服器的主要程式

smbd:提供對伺服器中檔案、列印資源的共享通路

nmbd:提供基于netbios主機名稱的解析,一般不使用

2、安裝smaba

<code>yum </code><code>install</code> <code>-y samba samba-client samba-common</code>

<code>service smb start</code>

<code>chkconfig smb on</code>

3、主配置檔案分為三個部分:[global]全局,[home]使用者家目錄共享,[printers]列印共享

7

8

9

10

11

<code>vi</code> <code>/etc/samba/smb</code><code>.conf</code>

<code>[global]</code>

<code>workgroup         </code><code>#所在工作組名稱</code>

<code>server string     </code><code>#伺服器描述資訊</code>

<code>log </code><code>file</code> <code>= </code><code>/var/log/samba/log</code><code>.%m </code><code>#“%m”變量表示客戶機位址</code>

<code>max log size = 50 </code><code>#日志檔案的最大容量,機關為kb</code>

<code>security = user   </code><code>#運作級别,一般使用share(匿名通路)和user(使用者認證通路)</code>

<code>[homes]</code>

<code>............</code>

<code>[printers]</code>

4、配置匿名通路

<code>security = share </code><code>#啟用使用者認證</code>

<code>[</code><code>test</code><code>]           </code><code>#用戶端所通路的共享名</code>

<code>comment = </code><code>test</code><code>!  </code><code>#共享說明</code>

<code>path = </code><code>/media</code>    <code>#共享目錄</code>

<code>browseable = </code><code>yes</code> <code>#該共享目錄在“網路上的芳鄰”中是否可見</code>

<code>guest only = </code><code>yes</code> <code>#所有匿名通路</code>

<code>writable = </code><code>yes</code>   <code>#可寫</code>

5、配置使用者認證通路

<code>security = user  </code><code>#啟用使用者認證</code>

<code>[share-name]     </code><code>#在windows顯示的共享名</code>

<code>comment=共享說明</code>

<code>path=/共享路徑</code>

<code>guest only = no  </code><code>#禁止匿名通路,等同pulic</code>

<code>browsable=</code><code>yes</code>    <code>#該共享目錄在“網路上的芳鄰”中是否可見</code>

<code>writable=</code><code>yes</code>     <code>#可寫</code>

<code>directory mask = 0744 </code><code>#預設建立目錄權限</code>

<code>create mask=0766 </code><code>#預設建立檔案權限</code>

<code>儲存退出!</code>

<code>建立samba使用者:</code>

<code>useradd</code> <code>user -s </code><code>/sbin/nologin</code>

<code>smbpasswd -a user</code>

<code>-a:添加指定的samba使用者</code>

<code>-d:禁用指定的使用者</code>

<code>-e:啟用指定的使用者</code>

<code>-x:删除指定的使用者</code>

<code>不加參數可直接修改samba使用者密碼</code>

6、linux用戶端通路

<code>smbclient –l </code><code>//ip</code> <code>#檢視公開的共享目錄</code>

<code>smbclient -u user </code><code>/ip/test</code> <code>#登陸共享</code>

<code>mount</code> <code>-o useranme=user,password=123.com </code><code>//192</code><code>.168.0.203</code><code>/test</code> <code>/mnt/</code> <code>#挂載到本地使用</code>

<code>iptables -a input -p tcp -m multiport --dport 139,445 -j accept</code>

三、acl進階權限

ugo權限模型基于所屬使用者、組的,一個檔案隻能設定一個組,并對改組有權限控制,如果該檔案需要有多個組有通路控制權限的話,ugo是無法滿足需求的。使用acl權限,必須先對這個檔案系統添加acl屬性。

格式:setfacl -m u/g:使用者/組:權限

1、mount -o remount,acl /dev/sdb1 /data #為/dev/sdb1添加acl屬性

2、mount | grep /dev/sdb1 #看到已經啟用了acl

/dev/sdb1 on /data type ext4 (rw,acl)

3、/data目錄現在對其他使用者是沒有寫入權限的,現在我們給user1設定acl

getfacl /data #檢視/data目錄的具體權限

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

可以看到檔案的屬主和屬組都是root,user的權限是rwx,group的權限也r-x,other的權限是r-x。而且最重要的是user:user1:rwx,也就是user1這個使用者對該目錄也有rwx的權限。

現在su - user1,就有寫入權限了。

4、對組使用acl權限

setfacl-mg:user1:rwx/data #添加user1組對/data權限

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

usermod -g user1 user2 #将user2加入user1組

su - user2,現在就可以有寫入權限了。

但是/data目錄下的其他檔案是沒有寫入權限的,acl功能隻對目前目錄生效,不能對其子目錄生效。

可以使用d參數對子目錄設定acl權限,但不對目前目錄生效,隻對所有子目錄,以後不管任何使用者對/data添加資料,user2都會繼承它們的權限。

5、對目前目錄所有子目錄設定acl,使user2對子目錄有寫入權限

setfacl -m d:u:user2:rwx /data/

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

現在user2可以對/data目錄下子目錄有寫入權限了。

如果檔案的屬主和屬組和檔案的acl權限發生沖突的時候,以屬主和屬組為準,其實檔案的acl功能隻對other人有意義。

6、移除檔案系統的acl權限

<code>setfacl -k </code><code>/data</code> <code>#移除檔案系統的預設acl屬性</code>

<code>setfacl -b </code><code>/data</code> <code>#移除檔案系統的所有acl權限</code>

<code>setfacl -x u:user1 </code><code>/data</code> <code>#移除user1對檔案系統的acl權限</code>

7、一個項目需求:項目組需要名為/opt/research目錄,用于存儲他們的項目文檔。隻有組profs和grads中的成員能夠在該目錄中建立新檔案,并且新檔案應具有以下屬性:

1.&gt;目錄應歸root使用者所有;

2&gt;.新檔案應歸grads組所有;

3&gt;.profs中的成員應自動擁有對新檔案讀寫權限;

4&gt;.組interns應自動擁有對新檔案的隻讀權限;

5&gt;.其他使用者(不是組profs、grads、interns的成員)不能對該目錄及其内容擁有任何權限。

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

前三行建立三個組,中間三行建立了/opt/research目錄,并確定其歸使用者root、組grads所有,所擁有使用者群組具有讀、寫、和執行權行權限,并且grads将擁有該目錄中建立的檔案的sgid權限。

最後四行則通過使用acl為組profs和interns授予對目錄的适當權限,通過預設acl為組profs和interns授予對該目錄中新建立檔案的适當權限。

用getfacl顯示最後權限:

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

四、selinux安全機制

selinux 全稱 security enhanced linux (安全強化 linux)是 mac (mandatory access control,強制通路控制系統)的一個實作,目的在于明确的指明某個程序可以通路哪些資源(檔案、網絡端口等)。

selinux是一組可确定哪個程序能通路哪些檔案、目錄、端口等的安全規則。每個檔案、程序、目錄和端口都具有專門的安全标簽,稱為selinux上下文。

selinux将程序分類,将資源分類,定義了那個程序在哪個範圍内運作,隻能通路哪些資源。此時不管它對其它的資源有讀寫權限此時隻要selinux不允許 它就不能通路。

selinux針對兩種類型定義了兩個基本概念:

域(domain):域用來對程序進行限制。

上下文(context):上下文用來對系統資源進行限制。

1、selinux狀态檢視與配置

配置檔案位置:/etc/selinux/config,做到了一個連結到/etc/sysconfig/selinux

設定完模式後,要重新開機系統才能生效

2、三種模式

強制(enforcing):受selinux保護,違反政策,就禁止操作。預設是這個模式

允許(permissive):不受selinux保護,隻是收到警告資訊,把違反内容記錄下來。

禁用(disabled):禁用selinux

3、selinuxtype=targeted參數

定義selinux使用哪個政策子產品保護系統。

targeted:紅帽開發的政策,隻對dhcpd,httpd,mysqld,named等網絡服務保護,不屬于那些domain的就都讓他們在unconfined_t裡,可導入性高,可用性好但是不能對整體進行保護。這樣的政策還有strict、mls:strict是nas開發的,能對整個系統進行保護,但是設定複雜。mls:是一個較新的安全政策。

4、selinux相關指令

<code>sestatus:檢視selinux工作狀态</code>

<code>getenforce:檢視selinux是否開啟</code>

<code>setenforce:設定selinux運作模式,1開啟(enforcing),0關閉(permissive)</code>

5、檢視和設定selinux的boolean值

selinux政策中定義許多boolean值,使用者自定義要讓selinux開啟保護某些程式,或者是關閉對某些程式、程式中的某個項目的保護,目錄位置/selinux/boolean/下相關檔案。

<code>getsebool -a :檢視boolean值</code>

<code>getsebool -a | </code><code>grep</code> <code>ftp</code> <code>#檢視ftp相關bool值</code>

<code>setsebool ftpd_disable_trans off </code><code>#臨時生效</code>

<code>setsebool -p ftpd_disable_trans off </code><code>#設定boolean值,-p為設定永久生效</code>

6、使用apache做個個人首頁,預設是是用apache來通路運作通路apache的,而boolean值預設httpd禁止切換到其他家目錄。是以就會顯示沒有權限通路。

<code>vi</code> <code>/etc/httpd/conf/httpd</code><code>.conf</code>

<code>&lt;ifmodule mod_userdir.c&gt;</code>

<code> </code><code>userdir public_html </code><code>#啟用網絡讀取的使用者家目錄網站</code>

<code>&lt;</code><code>/ifmodule</code><code>&gt;</code>

<code>useradd</code> <code>user</code>

<code>echo</code> <code>“</code><code>test</code><code>!!!” &gt;&gt; </code><code>/home/user/public_html</code> <code>#建立家目錄測試頁</code>

<code>chmod</code> <code>o+x </code><code>/home/user/</code> <code>#設定其他使用者對user主目錄有執行權限</code>

http://192.168.0.202/~user #通路測試頁報錯

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

解決方法:setsebool httpd_enable_homedirs on #開啟httpd對家目錄通路,這時就可以通路了

7、安全上下文相關指令

<code>檢視檔案安全上下文</code>

<code>ls</code> <code>-z </code><code>/etc/hosts</code>

<code>-rw-r--r--. root root system_u:object_r:net_conf_t:s0 </code><code>/etc/hosts</code>

<code>檢視使用者安全上下文</code>

<code>id</code> <code>-z</code>

<code>unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023</code>

檢視程序安全上下文vsftpd和httpd

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

檢視移動和複制檔案安全上下文變化

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

chcon(change context)參數:

-t:類型

-r:遞歸

-u:使用者

-r:角色

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

9、實驗:讓 apache 可以通路位于非預設目錄下的網站檔案

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

新建立的index.html是可以通路的,因為繼承了目錄的安全上下文,屬性中包含了httpd_sys_content_t标簽

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

<code>alias </code><code>/test</code> <code>"/opt/web"</code>

<code>&lt;directory </code><code>"/opt/web"</code><code>&gt;</code>

<code> </code><code>options none</code>

<code> </code><code>allowoverride none</code>

<code> </code><code>order allow,deny</code>

<code> </code><code>allow from all</code>

<code>&lt;</code><code>/directory</code><code>&gt;</code>

<code>service httpd restart</code>

添加了一個虛拟目錄,再通路http://192.168.0.202/test出現沒有權限通路

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

解決:chcon -t httpd_sys_content_t /opt/web/index.html #再通路虛拟目錄成功

10、其他

<code>restorecon -r -</code><code>v</code> <code>/var/www</code>   <code>#恢複檔案預設的上下文</code>

<code>chcon --reference=</code><code>/etc/named</code><code>.confg.orig </code><code>/etc/named</code><code>.conf </code><code>#修改參照檔案的上下文</code>

<code>/var/log/audit/audit</code><code>.log </code><code>#selinux報錯資訊</code>

五、rhel6安裝軟體和yum管理軟體

rpm包命名格式:

RHCE學習&lt;3&gt;NFS、Samba、ACL權限、SELinux和RPM包管理

1、rpm指令

查詢已安裝的rpm軟體資訊

格式:rpm -q[子選項] [軟體名]

-qa:檢視系統中已安裝的所有rpm軟體包清單

-qi:檢視指定軟體的詳細資訊

-ql:查詢指定軟體包所安裝的目錄、檔案清單

-qc:僅顯示指定軟體包安裝的配置檔案

-qd:僅顯示指定軟體包安裝的文檔檔案

-qf:查詢檔案/目錄屬于哪個rpm軟體

查詢未安裝的rpm封包件

格式:rpm -qp[子選項] rpm封包件

-qpi:通過.rpm封包件檢視該軟體的詳細資訊

-qpl:檢視.rpm安裝包内所包含的目錄、檔案清單

-qpc:檢視.rpm安裝包内包含的配置檔案清單

-qpd:檢視.rpm安裝包内包含的文檔檔案清單

安裝或更新rpm軟體包

格式:rpm [選項] rpm封包件...

-i:安裝一個新的rpm軟體

-e:解除安裝指定的rpm軟體

-u:更新某個rpm軟體,若原本未裝,則進行安裝

-f:更新某個rpm軟體,若原本未裝,則放棄安裝

--force:強制安裝所指定的rpm軟體包

--nodeps:安裝、更新或解除安裝軟體時,忽略依賴關系

-h:以“#”号顯示安裝的進度

-v:顯示安裝過程中的詳細資訊

2、yum源使用

當我們安裝一個軟體的時候,需要下載下傳好多依賴的包,這時就很麻煩,使用yum源就可以自己去查找依賴包來安裝,提高工作效率。yum源可以是本地的,也可以是ftp或http協定來釋出的。

在rhel6系統的安裝CD光牒中,已針對軟體目錄packages/建好了repodata資料,是以隻要簡單地将整個CD光牒中的内容或将CD光牒全部内容複制到硬碟通過http或ftp進行釋出,就可以作為軟體倉庫了。

3、yum指令格式:yum &lt;options&gt; &lt;command&gt; &lt;package...&gt;

options:

-y : 就這個比較常用,這個參數是在安裝軟體使用,有需要輸入yes的自動回答

command:

list : 列出在yum server 上面有的rpm套件;若執行yum list installed則表示隻列出系統中已安裝的軟體包,yum list available則表示隻列出軟體倉庫中可用(尚未安裝)的軟體包,yum list update則表示列出可以更新版本的軟體包。

install: 安裝某個套件

update : 更新某個套件,如果update後面沒有接套件名稱,即更新目前主機所有已安裝的套件.

info : 列出某個套件的詳細資訊,相當于rpm -qi package内容

clean : 将已下載下傳到本機的packages或headers移除

remove : 移除已經安裝在系統中的某個套件

yum localinstall package:本地安裝軟體包

yum update:全部更新

yum update package :更新指定程式包package

yum check-update :檢查可更新的程式

yum info &lt;package&gt; :顯示安裝包資訊

yum search packages:查找軟體包

yum removepackage:删除程式包

yum clean packages:清除下載下傳的rpm包

yum clean all:清除header與rpm包

yum grouplist:列出所有組

yum groupinstall:安裝某個軟體組

4、建立ftp源

<code>vi</code> <code>/etc/yum</code><code>.repos.d</code><code>/server</code><code>.repo </code><code>#字尾必須是repo結尾</code>

<code>[rhel6]  </code><code>#軟體倉庫的名字</code>

<code>name=rhel6 </code><code>#軟體倉庫的描述</code>

<code>baseurl=</code><code>ftp</code><code>:</code><code>//192</code><code>.168.0.202</code><code>/pub/</code> <code>#軟體倉庫的位置</code>

<code>enabled=1 </code><code>#是否起用軟體倉庫</code>

<code>gpgcheck=1 </code><code>#是否檢查gpg簽名(用來驗證要安裝的包是不是redhat官方的)</code>

<code>gpgkey=</code><code>file</code><code>:</code><code>//etc/pki/rpm-gpg/rpm-gpg-key-redhat-release</code>  <code>#gpg簽名密鑰的位置</code>

如果安裝軟體包出現:public key for …….rpm is not install

解決方法:導入完整性驗證的公鑰

mount /dev/sr0 /mnt

rpm --import /mnt/rpm-gpg-key-redhat-release

5、建立自己搜集軟體包源

必須包括存在依賴關系的所有安裝檔案,還需要手動建立repodata資料檔案,使用createrepo工具,

createrepoa主要用于收集目錄中的rpm封包件的頭資訊,以建立repodata軟體倉庫資料。

<code>yum </code><code>install</code> <code>createrepo</code>

<code>cp</code> <code>-a </code><code>/mnt/packages/</code><code>* </code><code>/var/ftp/pub/packages/</code> <code>#我們以rhel軟體包為例,複制到ftp目錄下</code>

<code>cd</code> <code>/var/ftp/pub/</code>

<code>createrepo --database ./ </code><code>#建立軟體倉庫資訊檔案</code>

<code>ls</code> <code>repodata </code><code>#可以看到已經建立好了相應的軟體倉庫資訊檔案</code>

<code>filelists.sqlite.bz2 other.sqlite.bz2 primary.sqlite.bz2 repomd.xml</code>

<code>filelists.xml.gz other.xml.gz primary.xml.gz</code>

<code>yum list </code><code>#檢視yum源軟體包</code>

繼續閱讀