A. Sudo的用法和Visudo設置
身為程序員,你可以活在一個沒有Windows的世界,當你離不開Unix(linux,Mac。。。)。而在Unix下面,你離不開terminal,離不開sudo。
你知道sudo command,然後輸入密碼,就可以以root的身份執行command。如果接觸的更多一點,你或許知道sudo給你的許可權不是自動給你的。如果你在一個Linux系統上增加了一個用戶,你需要先以root的身份做一些設置,然後才能執行sudo命令。
這些設置,就是運行visudo,它會打開一個文件,然後我們在裡面添加一些東西,這個過程很簡單,因為這個文件的內容不多,而且有注釋,而而且還有範例,你只需要一行,然後把「root」改成你想要添加的那個用戶名就可以了。
然而,裡面的東西其實看著很奇怪,我們要添加的那一行看起來大概是這樣的:
`chris ALL=(ALL:ALL) ALL`
上面的內容取自Ubuntu 12.04,其他Unix平台內容也是類似的。其中「chris」是用戶名,後面跟著好幾個「ALL」,是干嗎用的呢?
以前我一直都是實用主義,解決了一個問題,那就可以了,很少去想「為什麼」,最近發現,如果如果一直是這樣,其實不大好,知其然要知其所以然。當然,如果無窮無盡的去最求所以然,那就成了科學研究了,所以中間要有個度。
出於這個考慮,今天就看了一下這個visudo,看看究竟是什麼東東。
前面說了,visudo其實是打開一個文件,讓你編輯這個文件的內容,這個文件就是/etc/sudoers,用的編輯器默認是vi。你可以用任何編輯器打開編輯它。那麼問題來了,為什麼不用直接打開這個文件然後編輯其中的內容呢?根據visudo的使用說明,如果你用visudo來編輯這個文件,那麼它會幫你自動做很多事情,比如說語法檢查,加鎖防止別人同時修改這個文件等等,所以,強烈建議用戶使用visudo,強烈譴責用戶直接修改這個文件。
下面,我們就運行這個命令,看看裡面有什麼東西:
以#開頭的行都是注釋,所以前面8行都是注釋,第一行注釋也說清楚了,這個文件必須用visudo來編輯。
第九行Default env_reset 表示重置(就是去除)用戶定義的環境變數,也就是說,當你用sudo執行一個命令的時候,你當前用戶設置的所有環境變數都是無效的。比如說,你的home目錄下面有一個bin文件夾,這個文件夾裡面有一些可執行文件,你把這個文件夾加到Path環境變數里。正常情況下,你可以在任何地方直接執行這個文件夾裡面的命令。但是你用so執行這個文件夾裡面的命令時,shell會提醒你"command not found". 那是因為當你用sudo執行一個命令時,你當前用戶設置的path環境變數已經失效了。
下面的
root ALL=(ALL:ALL) ALL
就是我們前面提到的ALL。在下面一行
zouchuang ALL=(ALL:ALL) ALL
就是我們創建了一個新用戶(在這里,這個新用戶名字叫zouchuang),需要添加的這一行。
其中zouchuang是用戶名,接下來的第一個ALL,表示"From ALL hosts"(所有主機), 意思是,zouchuang從任何機器登錄,都可以應用接下來的規則。
第二個ALL,表示「run as All user」,這個的意思是,zouchuang可以以任何用戶的身份運行一些命令。第三個ALL,表示「run as All groups」,它的意思是,zouchuang可以以任何用戶組的身份運行一些命令。運行那些命令呢?這就是第四個ALL的意思了,這表示前面的規定適用於任何命令。總結起來,這四個ALL的含義就是,zouchuang這個用戶可以從任何機器登錄,以任何用戶和用戶組的身份運行任何命令。
這四個ALL都可以用其他值來代替,比如,可以將第一個ALL改成本地區域網,或某些特定的網段,這樣的話,用戶在其他機器上登陸以後,就無法使用sudo命令了。
第二個和第三個ALL是可選的,如果省略,則默認為root用戶,也就是說,可以這樣寫:
zouchuang ALL= ALL,表示zouchuang可以從任何host登錄,然後以root身份運行任何命令。
接下來下面這一行
%admin ALL=(All) ALL
表示這是用戶組的許可權,以%開頭,admin是用戶組的名字,接下來的幾個ALL表示的含義跟前面所述的一樣,其中第二個ALL表示「All users」 而不是「All groups」。
這就是這個sudoers文件中基本設置語句的含義,關於sudoers的用法太多了,這里先介紹到這里,希望以後能補上其他的一些。因為我發現寫一篇文章所需要的時間太長了嗚嗚嗚。。。
B. centos6.7怎麼修改許可權
敲入命令:
sudo mkdir xxx
希望在普通用戶下,通過sudo命令,讓用戶暫時擁有root許可權,並創建一個文件夾。
很明顯,失敗了,錯誤原因是:該用戶暫沒有root許可權
步驟閱讀
2
敲入命令:
su
該命令可以讓我們切換到root用戶
步驟閱讀
3
敲入命令:
visudo
visudo命令是用來編輯修改/etc/sudoers配置文件
步驟閱讀
4
入下圖所示,打開sudoers文件
步驟閱讀
5
找到如下圖所示,標出紅線的一行
root ALL=(ALL) ALL
步驟閱讀
6
在「root ALL=(ALL) ALL」這一行下面,再加入一行:
xulei ALL=(ALL) ALL
其中,xulei為你當前使用的用戶名,也就是普通用戶的用戶名
步驟閱讀
7
保存之後,輸入exit,退出root用戶
步驟閱讀
8
此時,再次輸入命令:sudo mkdir xxx之後,可以發現,xxx文件夾建立成功,該文件夾是以root許可權創建的
步驟閱讀
9
好啦,結束啦。下圖是所有的命令的集合,在這里截個圖!
C. linux設置sudo許可權
Linux用戶配置sudo的工作過程如下:
1,當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的許可權
2,確認用戶具有可執行sudo的許可權後,讓用戶輸入用戶自己的密碼確認
3,若密碼輸入成功,則開始執行sudo後續的命令
4,root執行sudo時不需要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規則)
5,若欲切換的身份與執行者的身份相同,也不需要輸入密碼
visudo使用vi打開/etc/sudoers文件,但是在保存退出時,visudo會檢查內部語法,避免用戶輸入錯誤信息
visudo需要root許可權
[Hadoop@localhost ~]$ visudo
visudo:/etc/sudoers:許可權不夠
visudo:/etc/sudoers:許可權不夠
使用visudo命令打開sudo配置文件
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 該文件允許特定用戶像root用戶一樣使用各種各樣的命令,而不需要root用戶的密碼
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相關命令的示例以供選擇,這些示例都可以被特定用戶或
## 用戶組所使用
##
## This file must be edited with the 'visudo' command.
## 該文件必須使用"visudo"命令編輯
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
## 對於一組伺服器,你可能會更喜歡使用主機名(可能是全域名的通配符)
## 、或IP地址,這時可以配置主機別名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 這並不很常用,因為你可以通過使用組來代替一組用戶的別名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互關聯的命令(當然可以是一個)的別名,通過賦予該別名sudo許可權,
## 可以通過sudo調用所有別名包含的命令,下面是一些示例
## Networking 網路操作相關命令別名
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient
, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig
, /sbin/mii-tool
## Installation and management of software 軟體安裝管理相關命令別名
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services 服務相關命令別名
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database 本地資料庫升級命令別名
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage 磁碟操作相關命令別名
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe
, /bin/mount, /bin/umount
## Delegating permissions 代理許可權相關命令別名
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes 進程相關命令別名
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers 驅動命令別名
# Cmnd_Alias DRIVERS = /sbin/modprobe
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
# 一些環境變數的相關配置,具體情況可見man soers
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是規則配置:什麼用戶在哪台伺服器上可以執行哪些命令(sudoers文件可以在多個系統上共享)
## Syntax(語法):
##
## user MACHINE=COMMANDS 用戶 登錄的主機=(可以變換的身份) 可以執行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附帶一些其它的選項
##
## Allow root to run any commands anywhere
## 允許root用戶執行任意路徑下的任意命令
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
## 允許sys中戶組中的用戶使用NETWORKING等所有別名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE
, DRIVERS
## Allows people in group wheel to run all commands
## 允許wheel用戶組中的用戶執行所有命令
%wheel ALL=(ALL) ALL
## Same thing without a password
## 允許wheel用戶組中的用戶在不輸入該用戶的密碼的情況下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允許users用戶組中的用戶像root用戶一樣使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
## 允許users用戶組中的用戶關閉localhost這台伺服器
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 讀取放置在/etc/sudoers.d/文件夾中的文件(此處的#不意味著這是一個聲明)
#includedir /etc/sudoers.d
D. Linux查看所有用戶用什麼命令
1、Linux里查看所有用戶
(1)在終端里.其實只需要查看 /etc/passwd文件就行了.
(2)看第三個參數:500以上的,就是後面建的用戶了.其它則為系統的用戶.
或者用cat /etc/passwd |cut -f 1 -d :
2、用戶管理命令
useradd :添加用戶
adser :添加用戶
passwd :為用戶設置密碼
usermod :修改用戶命令,可以通過usermod 來修改登錄名、用戶的家目錄等等;
pwcov :同步用戶從/etc/passwd 到/etc/shadow
pwck :pwck是校驗用戶配置文件/etc/passwd 和/etc/shadow 文件內容是否合法或完整;
pwunconv :是pwcov 的立逆向操作,是從/etc/shadow和 /etc/passwd 創建/etc/passwd ,然後會刪除 /etc/shadow 文件;
finger :查看用戶信息工具
id :查看用戶的UID、GID及所歸屬的用戶組
chfn :更改用戶信息工具
su :用戶切換工具
sudo :sudo 是通過另一個用戶來執行命令(execute a command as another user),su 是用來切換用戶,然後通過切換到的用戶來完成相應的任務,但sudo 能後面直接執行命令,比如sudo 不需要root 密碼就可以執行root 賦與的執行只有root才能執行相應的命令;但得通過visudo 來編輯/etc/sudoers來實現;
visudo :visodo 是編輯 /etc/sudoers 的命令;也可以不用這個命令,直接用vi 來編輯 /etc/sudoers 的效果是一樣的;
sudoedit :和sudo 功能差不多;
3、管理用戶組(group)的工具或命令;
groupadd :添加用戶組;
groupdel :刪除用戶組;
groupmod :修改用戶組信息
groups :顯示用戶所屬的用戶組
grpck
grpconv :通過/etc/group和/etc/gshadow 的文件內容來同步或創建/etc/gshadow ,如果/etc/gshadow 不存在則創建;
grpunconv :通過/etc/group 和/etc/gshadow 文件內容來同步或創建/etc/group ,然後刪除gshadow文件
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行。
實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令並且把它們送到內核。不僅如此,Shell有自己的編程語言用於對命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點,比如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。
linux-網路