前言:
由於服務器中會需要一些文件進行上傳和下載,所以需要給多個用戶開啓sftp賬號,並且不同的賬號需要不同的權限目錄操作文件,經過查詢資料和實踐,實現了多用戶對應多個不同權限目錄,並且沒有權限訪問其他目錄
說明:
1. 創建用戶
- liunx中創建用戶命令:
useradd -d /server/data -m test
- 說明:
-d /server/data
是設置改用戶的默認目錄,這裏設置後面當作是該用戶sftp訪問時的根目錄就是這個-m test
表示創建的用戶賬號爲test
- 說明:
如果在添加用戶時提示沒有權限或者用戶已存在? 看文章最後
-
設置密碼:
passwd test
-
如果不允許該用戶通過ssh登錄服務器,則:
usermod -s /sbin/nologin test
-
恢復該用戶可以通過ssh登錄服務器:
usermod -s /sbin/bash test
這個方式不需要創建用戶組,按照用戶組的方式嘗試之後,總是有點問題,不是目錄權限問題到值的無法連接就是對指定目錄的操作不對
2. 創建權限目錄
- 創建上面創建用戶時指定的默認目錄:
mkdir -p /server/data
3. Sftp配置
使用linux自帶的sftp
-
修改sftp配置文件
vi /etc/ssh/sshd_config
- 修改文件這一行配置
# 將Subsystem sftp後面修改爲internal-sftp Subsystem sftp internal-sftp
- 修改文件這一行配置
-
增加用戶的sftp目錄和訪問配置,在文件的最後面增加:
Match user test X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ChrootDirectory /server/data
- 說明:
Match user test
指定賬號AllowTcpForwarding
指定不能ssh登錄ChrootDirectory
指定該賬戶的根目錄
- 說明:
-
刷新配置
systemctl restart sshd.service
或者:
service ssh restart
-
創建子目錄
- 這個子目錄是sftp用戶訪問之後看到的目錄
mkdir /server/data/test
- 這個子目錄是sftp用戶訪問之後看到的目錄
4. 權限配置
這一步的權限需要配置好,否則會出現連接不上的問題:
Connection reset by peer
- 必須指定上層目錄爲root所屬,並且設置755權限
chown root /server/data
chmod 755 /server/data
/server/data
的目錄所屬需要是root纔可以
-
設置子目錄的權限爲當前創建的用戶,然後纔有讀寫權限
chown test /server/data/test
chmod 755 /server/data/test
- 注意:
- 如果下面創建的子目錄還是沒有權限,那麼還需要加上下面的步驟:
cd /server/data/
chown -R test test/
chmod -R 755 test/
這樣,創建出來的子目錄就都可以上傳下載
- 如果下面創建的子目錄還是沒有權限,那麼還需要加上下面的步驟:
- 注意:
這樣就已經配置好一個用戶了,並且設置了對應的權限目錄,其他的用戶,重複上面的操作步驟,並修改用戶名和目錄即可
可以通過sftp客戶端或者命令行訪問進行測試
問題解決:
在linux下用useradd添加用戶時,出現錯誤:Creating mailbox file: 文件已存在?
- 原來linux下添加用戶後,會在系統裏自動加一個郵箱(系統郵箱),路徑是:
/var/spool/mail/用戶名
, 可以直接用命令rm -rf /var/spool/mail/用戶名
刪除用戶,然後執行命令:userdel 用戶名
,然後就可以再重新添加用戶
root用戶在創建用戶時提示沒有權限?
- 由於,
su root
或者sudo su
只改變root權限不改變環境變量,而su -root
指令就可以。su -root
可以取得ROOT用戶的權限和環境。所以需要再執行一項:su -
即可解決
注意:
還有一個小問題就是如果是程序
在sftp中生成了文件或者創建了文件夾,那麼sftp用戶是沒有權限讀取的
,具體的解決方法,可以看這裏[]