一、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目錄的具體權限

可以看到檔案的屬主和屬組都是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權限
usermod -g user1 user2 #将user2加入user1組
su - user2,現在就可以有寫入權限了。
但是/data目錄下的其他檔案是沒有寫入權限的,acl功能隻對目前目錄生效,不能對其子目錄生效。
可以使用d參數對子目錄設定acl權限,但不對目前目錄生效,隻對所有子目錄,以後不管任何使用者對/data添加資料,user2都會繼承它們的權限。
5、對目前目錄所有子目錄設定acl,使user2對子目錄有寫入權限
setfacl -m d:u:user2:rwx /data/
現在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.>目錄應歸root使用者所有;
2>.新檔案應歸grads組所有;
3>.profs中的成員應自動擁有對新檔案讀寫權限;
4>.組interns應自動擁有對新檔案的隻讀權限;
5>.其他使用者(不是組profs、grads、interns的成員)不能對該目錄及其内容擁有任何權限。
前三行建立三個組,中間三行建立了/opt/research目錄,并確定其歸使用者root、組grads所有,所擁有使用者群組具有讀、寫、和執行權行權限,并且grads将擁有該目錄中建立的檔案的sgid權限。
最後四行則通過使用acl為組profs和interns授予對目錄的适當權限,通過預設acl為組profs和interns授予對該目錄中新建立檔案的适當權限。
用getfacl顯示最後權限:
四、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><ifmodule mod_userdir.c></code>
<code> </code><code>userdir public_html </code><code>#啟用網絡讀取的使用者家目錄網站</code>
<code><</code><code>/ifmodule</code><code>></code>
<code>useradd</code> <code>user</code>
<code>echo</code> <code>“</code><code>test</code><code>!!!” >> </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 #通路測試頁報錯
解決方法: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
檢視移動和複制檔案安全上下文變化
chcon(change context)參數:
-t:類型
-r:遞歸
-u:使用者
-r:角色
9、實驗:讓 apache 可以通路位于非預設目錄下的網站檔案
新建立的index.html是可以通路的,因為繼承了目錄的安全上下文,屬性中包含了httpd_sys_content_t标簽
<code>alias </code><code>/test</code> <code>"/opt/web"</code>
<code><directory </code><code>"/opt/web"</code><code>></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><</code><code>/directory</code><code>></code>
<code>service httpd restart</code>
添加了一個虛拟目錄,再通路http://192.168.0.202/test出現沒有權限通路
解決: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包命名格式:
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 <options> <command> <package...>
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 <package> :顯示安裝包資訊
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>