場景:在搭建Ftp服務器時候,需要新建ftp用戶,其實新建的ftp用戶和Linux中root新建的用戶一樣,只是需要了解新建用戶時候的相關規則。
1 解決新建用戶缺少配置文件
1.1 新建用戶 指定目錄 修改密碼
1. useradd 添加用戶或更新新創建用戶的默認信息
語法:useradd 選項 用戶名
該命令的各選項含義如下:
-c comment 描述新用戶帳號,通常為用戶全名,comment 為字符串。 -d home_dir 設置用戶主目錄,默認值為用戶的登錄名,並放在/home目錄下。 -D 創建新帳號后保存為新帳號設置的默認信息。 -e expire_date 用 MM/DD/YYYY 格式設置帳號過期日期。 -f inactivity 設置口令失效時間,該值為 0 使口令失效后帳號立即失效,為 -1 使該選項失效。 -g group 設置所要創建新用戶所在的基本組,group為組名。 -k skel_dir 設置框架目錄,該目錄包含用戶的初始配置文件, 創建用戶時該目錄下的文件都被復制到用戶主目錄下。 -m 自動創建用戶主目錄,並把框架目錄(默認為/etc/skel)下的文件復制到用戶主目錄下。 -M 不創建用戶主目錄。 -r 允許保留的系統帳號使用用戶ID創建一個新帳號。 -s shell 指定用戶的登錄shell。 -u user_id 設置用戶ID
代碼:
# useradd -d /home/test -m test;
然后給test設置密碼。
# passwd test;
ps:注意上述test目錄中已經存在一些用戶默認的配置文件。
1.2 查看創建的用戶列表
一般情況下是:
cat /etc/passwd 可以查看所有用戶的列表
w 可以查看當前活躍的用戶列表
cat /etc/group 查看用戶組
但是這樣看起來不是很簡潔,一個簡潔的命令是
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
1.3 刪除用戶及目錄
按部就班的辦法是先刪除用戶在刪除目錄:
刪除用戶的命令是:userdel 用戶名
比如我剛建立的用戶是:zhyh,則命令為:
userdel zhyh
執行以上命令成功后利用以下命令刪除目錄
rm -rf /home/zhyh/
一個簡單的辦法就是執行下面的命令
userdel -r zhyh
1.4 問題
今天新建了一個MQM的用戶 ,
useradd -g mqm -d /var/mqm //容易缺少配置文件
passwd mqm
終端中顯示 -bash-4.1$而不是 [mqm@locahost~]
百度了下。據說是因為缺少配置文件,所以將缺少的配置文件復制到用戶的家目錄既可以。
將/etc/skel中的文件全部復制到/var/mqm/之后,問題就得到了解決。 操作如下
#查看用戶的家目錄
cat /etc/passwd
#-a表示復制隱藏文件
cp -a /etc/skel/. /var/mqm
linux中以 .開頭的文件默認隱藏。在命令中加入-a可以對隱藏文件進行操作。
#可以查看隱藏文件 ls -a /etc/skel #可以復制隱藏文件 cp -a /etc/skel/. /
如果想將一個文件隱藏,只要在文件名之前加上“ . ”即可
#隱藏test文件
mv test .test
2 用戶Shell控制
linux adduser-s /sbin/nologin和/bin/false的區別
/bin/false 是最嚴格的禁止login選項,一切服務都不能用, /sbin/nologin 只是不允許系統login,可以使用其他ftp等服務
如果想要用false在禁止login的同時允許ftp,則必須在/etc/shells里增加一行/bin/false。
知道了Linux用戶管理最重要的兩個文件就是/etc/passwd和/etc/shadow這兩個文件。其中/etc/passwd是用來存儲登陸用戶信息的,它的基本格式如下:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
由上面的格式可以看出,每一行代表一個用戶的信息,一共包括7個字段的信息,每個字段的信息用冒號隔開。這7個字段分別代表:
1. 賬號名稱:即登陸時的用戶名
2. 密碼:早期UNIX系統的密碼是放在這個文件中的,但因為這個文件的特性是所有程序都能夠讀取,所以,這樣很容易造成數據被竊取,因此后來就將這個字段的密碼數據改放到/etc/shadow中了
3. UID:用戶ID,每個賬號名稱對應一個UID,通常UID=0表示root管理員
4. GID:組ID,與/etc/group有關,/etc/group與/etc/passwd差不多,是用來規范用戶組信息的
5. 用戶信息說明欄: 用來解釋這個賬號是干什么的
6. 家目錄:home目錄,即用戶登陸以后跳轉到的目錄,以root用戶為例,/root是它的家目錄,所以root用戶登陸以后就跳轉到/root目錄這里
7. Shell:用戶使用的shell,通常使用/bin/bash這個shell,這也就是為什么登陸Linux時默認的shell是bash的原因,就是在這里設置的,如果要想更改登陸后使用的shell,可以在這里修改。
另外一個很重要shell可以用來替代讓賬號無法登陸shell的命令,那就是/sbin/nologin,此時該用戶只能使用ftp登錄。
當我看到這里的時候,我就去登陸我們實驗室的服務器,打開/etc/passwd這個文件,里面果然有很多的類似上面格式的用戶賬號信息。由於我們實驗室服務器開放了ftp服務,而我正好有一個ftp的賬號,我看到我的賬號信息是這樣的
lxb:x:530:525::/opt/ftp:/sbin/nologin
通過上面的學習,我覺得它的意思大概是這樣的,用戶名是lxb,x表示密碼經過加密放到/etc/shadow文件中了,UID是530,GID是525,訪問的目錄是/opt/ftp,我看了一下,這個目錄下的內容正好是我登陸ftp后所看到的,至於最后一個/sbin/nologin,應該是登錄時候使用的shell,但是它為什么是nologin呢,難道不讓我登陸嗎?
於是我用root權限登陸到里面,把后面的/sbin/nologin改成了/bin/bash,重新用ssh進行登陸,真的登陸進去了,而且登陸后的目錄正好是/opt/ftp。
修改用戶的shell類型有兩種方式:
1、編輯/etc/passwd 文件
vim /etc/passwd
找到要修改的用戶,直接進行編輯即可。
2、使用命令修改
usermod -s /bin/bash cs408
usermod -s /sbin/nologin cs408 //限定用戶cs408不能shell登錄,只能ftp