一般服务器为安全禁止ssh下root账号登录,此时使用sftp登录管理服务器只能使用普通账号登录,给管理带来诸多不便,可以设置为特定普通SSH用户添加sudo权限,登录到sftp时可sudo切换到root权限下。
查看sftp-server执行文件目录:
1
2
cat /etc/ssh/sshd_config|grep sftp
Subsystem sftp /usr/libexec/openssh/sftp-server
编辑/etc/sudoers为特定用户添加执行sftp sudo权限:
1
2
#http://www.haiyun.me
user ALL=NOPASSWD: /usr/libexec/openssh/sftp-server
只要在root权限下visudo,添加如下一行即可取消sudu时的密码:
yourusername ALL=NOPASSWD: ALL
为了可以在非tty的环境下sudo,我们还需要注释掉下面一行:
Defaults requiretty
后续如果登录失败日记显示:
1
sorry, you must have a tty to run sudo ; TTY=unknown
需在/etc/sudoers内注释此行:
1
#Defaults requiretty
sftp客户端设置登录以sudo权限执行sftp,下图以winscp为例:
1
sudo /usr/libexec/openssh/sftp-server
此时用winscp登录就是root权限了,对整个系统的文件都拥有生杀大权。。。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一般为了安全,都会禁止root登陆ssh,但是用普通用户在打开winscp会话后无法通过su获得root权限,能操作的文件就很有限了(当然你可以提高普通用户的权限,但并不推荐这样做)。所以在开始会话前就要通过sudo命令切换到root用户。
首先,新建会话的时候协议要选择SFTP或SCP,因为FTP协议不支持这个功能。具体选择哪个,要看你服务器的协议信息。
要看服务器的协议信息,可以进入“Commands” > “Server/protocol Information”.中文对应的是 “命令” > “服务器/协议信息”
可以看到:
可见我使用的是OpenSSH服务。
第一步:选择协议
这里我用了简体中文语言包,所以设置项显示的是中文。协议我选择了SCP就无法登陆,是不是因为我没装SCP服务呢?
第二步:指定SFTP目录
之前查询过协议信息,使用了OpenSSH服务,所以我要为登陆的普通用户指定SFTP服务的二进制文件。
在SFTP标签的SFTP服务器选项,填上:
sudo/bin/sftp-server
当然有的系统可能保存在别的目录,比如我填的就是:
sudo/usr/lib/openssh/sftp-server
如果第一步选择的是SCP协议,那就没有第二步的设置项了,可以直接在SCP/Shell标签,Shell栏填上
sudo-s
第三步:设置用户权限
因为之前设置的目录对于普通用户是没有访问和执行的,而我们也无法在会话建立后切换到root用户,所以必须给普通用户访问SFTP二进制文件的权限。
先用root用户登陆终端并编辑/etc/sudoers文件。在root那一行下面添加普通用户yourusername,比如:
yourusername ALL=NOPASSWD:ALL
这样设置并不安全,该用户可以从任何主机连接,并不用输入root密码而使用任何命令。
所以需要限制该用户的命令,做如下修改:
yourusername ALL=NOPASSWD:/bin/sftp-server
后面的SFTP目录根据自己的情况填写,这样该用户执行SFTP服务的时候就不需要root密码了。
登陆后,你就可以看到已经有权限来访问所有文件了。
[related_posts limit="3"]