<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的java天地

    Linux團隊開發權限管理紀實

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/fbysss/archive/2010/07/26/5767148.aspx

    之前的開發服務器,所有人都是用root賬號登錄,一開始,用起來確是很爽很自由,也沒發現什么問題。但逐漸的,幾次莫名的文件丟失、數據庫無法正常啟動的問題,使得權限管理問題成為亟待解決的任務。實際上,僅僅是一個簡單的reboot、shutdown或者是rm命令,破壞性是非常大的。而且,誤操作的人也不好定位。root只能掌握在少數人手中。

    一、團隊構建環境,文件讀寫共享
    ??? 項目代碼位于/svn/prj下,通過svn up更新代碼,調用ant來編譯、部署。那么,prj這個目錄,對于每個人都是需要可讀寫的。
    我們知道,用什么用戶登錄,新創建的文件宿主,就是當前用戶。而默認的文件權限是644(-rw-r--r--),張三從代碼倉庫中update的文件,或者編譯后生成的class文件,李四是沒法刪除的。執行ant clear必然不成功,每次都用chmod去修改相應文件,總不是個事,那怎么辦呢?
    ??? 目標很明確:我們希望,開發團隊中,每一個開發人員之間的權限是平等的,誰新建的文件都可以被其他人讀寫。
    ??? 分解出來是兩個事情:
    1.目錄/svn/prj應該屬于開發團隊,即一個用戶組。這很簡單,建立一個組,比如叫dev,使用chown即可
    ???? #gruopadd dev
    ???? #useradd zhangshan

    ???? #useradd lisi
    ???? #useradd zhangsan -G dev -g dev

    ???? #useradd lisi -G dev -g dev
    ???? #chown -R :dev /svn/prj
    ???? 這里要特別說明一下,-g和-G是有區別的。-G是大家自然理解的,把一個用戶加到一個組或者多個組(逗號分隔)里面去。-g呢,則是

    設置用戶的gid。也就是用戶登陸后初始group(initial group)。
    ???? 使用id zhangsan命令,可以看到,uid=zhangsantest,gid=dev,groups=zhangsan,dev。或者使用groups zhangsan,結果是zhangsan dev
    ???? 要注意,創建一個用戶,默認會創建一個同名的組,如果不加-g參數,gid就是那個組的id,新建文件,組屬也是用戶同名組。所以在這里,-g和-G都是缺一不可的。???
    2.更改文件創建的默認權限為664(-rw-rw-r--)。

    ??? 這里涉及到一個知識,就是umask,umask主要用來控制默認創建文件或目錄的權限。可以使用umask命令直接修改。在我們的linux環境中,默認的umask是022。
    umask:設置哪位為1,則哪位就沒有權限。放開哪位,哪位有權限。但文件例外,最高到666(默認沒有執行權限)。目錄則可以到777
    比如設置umask為022,則目錄最高可以到755,umask為002,則最高目錄可以到775
    ??? 解決思路:每個用戶登錄都會執行一些初始化腳本,可以在腳本中修改用戶的umask。
    腳本片段如下:??
    USERGROUP=`/usr/bin/id -Gn $USER`
    echo $USERGROUP | grep -q dev
    if [ $? -eq 0 ]; then
    ??? umask 0002
    fi
    意思很簡單,這里不贅述。要注意的是,Linux中,應該放在/etc/bashrc里面,而不是/etc/profile中。
    登錄shell配置文件執行順序
    ????????? /etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc
    我們應該把這個設置放在最后執行的文件/etc/bashrc的末尾位置,以防止設置被覆蓋(實際上,linux的/etc/bashrc文件開頭就有一段類似的umask設置)。
    ??? 要說明一點:控制用戶對某個目錄的默認讀寫權限,是沒有直接支持的。在實際中,暫時也沒必要,如果真有特殊需要,可以通過crontab設置監控進程定時進行修改,也很簡單,在此不做說明。

    二、普通用戶的特權身份
    ??? OK,在第一部分中,我們解決了多人文件共享讀寫,該運行服務器了。不就是tomcat嗎,startup一下。事情沒想象那么簡單,Tomcat運行過程中,會寫日志文件,一開始,簡單的把logs目錄組屬劃分給dev,但后來陸續又遇到一系列不同的權限問題。于是反思一下:與其一點點修改運行Tomcat涉及的那么多文件權限,不如把自己身份臨時換一下?這就是我們要說的sudo。
    ??? sudo命令就是sudoer用來執行root操作的。sudoer配置,通過visudo來編輯。
    visudo實際上就是vi /etc/sudoers的包裝版。但用這個命令的最大好處是,它有語法檢查。

    %dev ALL =NOPASSWORD: /usr/local/tomcat/bin/startup.sh
    %dev ALL =NOPASSWORD: /usr/local/tomcat/bin/shutdown.sh
    百分號表示組,如果是多個組,用%dev,%dev2
    ALL為所有主機。如果要指定主機,可換成某個ip地址。
    NOPASSWORD表示不需要sudoer輸入密碼。
    最后為授權執行的命令全路徑。
    sudoer的配置還有很多,比如可以設置別名等,請讀者自行學習。
    執行:組員只需要在原有命令前面加上sudo 即可。

    如此一來,Tomcat停啟問題也解決了。
    補充:sudo命令通配符的設置,如果某個目錄下的所有命令都可以給sudoers開放,可以使用xxxx/*.sh,但這樣一來,使用者必須使用絕對路徑執行。而在當前路徑也不能使用./xxx.sh。是何原因,待研究。
    三、sftp用戶的umask設置
    似乎萬事大吉了。但有一天,發現還是有一些文件沒有權限覆蓋,為什么呢?后來發現這部分文件,都是使用winscp上傳的。
    解決辦法:
    vi /etc/ssh/sshd_config文件,找到SubSystem sftp /usr/libexec/openssh/sftp-server這一行,修改為
    SubSystem sftp /usr/libexec/openssh/sftp-server.sh
    然后vi /usr/libexec/openssh/sftp-server.sh
    添加
    umask 0002
    /usr/libexec/openssh/sftp-server
    chmod 755? /usr/libexec/openssh/sftp-server.sh 即可。
    當然,umask 0002這行可以跟上面的策略一致
    變成
    USERGROUP=`/usr/bin/id -Gn $USER`
    echo $USERGROUP | grep -q developers
    if [ $? -eq 0 ]; then
    ??? umask 0002
    fi


    四、NFS文件設置問題
    A、B 兩臺服務器,A為NFS服務器,B為掛載服務器。開發中,發現這個目錄老是出現權限問題。但查看組屬又沒什么問題。甚是奇怪。
    具體事例:
    一個NFS的源路徑,比如是hostA:/share,該目錄在hostA上的屬于用戶組dev,hostB mount了這個目錄,看到該目錄用戶組是一個組號,比如105,其實就是hostA上的dev用戶組號。但這個組號,在hostB上并不存在(hostB上也有一個dev組),如何讓hostB上的用戶也能讀寫該目錄?最后,終于發現癥結所在:兩邊的組號不一致,而文件的擁有者和組屬,本質是認id不認name的。修改了哪邊,都會讓另一邊無法寫,產生了沖突。
    解決辦法:把兩邊的組號修改為一致。
    1.首先,保證hostB上沒有105號的組,如果有,則需要協調一個兩邊都不產生沖突的組號,可能需要修改兩邊的組號。
    2.組號確定之后,假設105就行,在hostB上執行:groupmod –g 105 dev。變化可以通過/etc/group查看
    3.重新設置改組涉及到的文件的組屬。
    4.屬于該組的用戶需要重新登錄,這樣才會生效。

    五、root用戶的行為限制

    權限問題中,還有root的濫用。如果使用root來編譯部署,root產生的文件,dev用戶又無權訪問了。也就是說,既然已經劃分好了小組構建目錄,每個用戶都應該是dev組成員才對。root用戶應該只在授權或普通用戶無法解決的時候,再切換使用。


    ?

    posted on 2010-08-20 09:33 tobyxiong 閱讀(636) 評論(0)  編輯  收藏 所屬分類: linix

    <2010年8月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆分類(144)

    隨筆檔案(157)

    相冊

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 毛片a级毛片免费播放100| 嫩草成人永久免费观看| 欧美好看的免费电影在线观看| 亚洲国产综合专区电影在线| 中国毛片免费观看| 亚洲精品无码国产| 免费视频成人手机在线观看网址| 亚洲精品黄色视频在线观看免费资源| 亚洲乱码一二三四五六区| 蜜臀98精品国产免费观看| 4480yy私人影院亚洲| 2021免费日韩视频网| 国产婷婷综合丁香亚洲欧洲| 麻豆国产人免费人成免费视频| 亚洲成人在线免费观看| 久久久久久久91精品免费观看| 中文文字幕文字幕亚洲色| 永久免费视频v片www| 人成免费在线视频| 精品国产亚洲一区二区三区| 久久99精品国产免费观看| 亚洲国产成人精品无码区在线网站| 无码国产精品一区二区免费 | 亚洲av鲁丝一区二区三区| 成全高清在线观看免费| 夜夜亚洲天天久久| 成年大片免费视频| 五月天婷婷精品免费视频| 亚洲成熟xxxxx电影| 67194成是人免费无码| 欧亚一级毛片免费看| 亚洲韩国—中文字幕| 在线观看免费成人| aa毛片免费全部播放完整 | 亚洲国产成人精品激情| 国产老女人精品免费视频| aaa毛片视频免费观看| 亚洲剧场午夜在线观看| 免费又黄又爽又猛的毛片| 国产成年无码久久久免费| 亚洲国产亚洲片在线观看播放 |