解决Linux中普通用户无权限访问串口设备问题

有两种方法:

第一种:添加串口设备访问规则

以root身份执行:

vim /etc/udev/rules.d/70-ttyusb.rules

内容为:

KERNEL=="ttyUSB[0-9]*",MODE="0666"

注意:内容里边的双引号不能丢,否则不会生效

此方法有两个弊端:

1.该方法会让所有的普通用户都具有访问这些串口设备的权限,存在一定的安全隐患

2.加入此规则后,必须拔掉设备重新插入,此规则才可生效

第二种:将目标用户添加至dialout用户组

因tty设备隶属于dialout用户组,所以将用户添加至dialout用户组,该用户就会具备访问tty等串口设备的权限

例如我的用户是 uxdb

则使用如下命令即可:

gpasswd --add uxdb dialout

添加完之后可以用如下命令来查看是否添加成功

groups uxdb

如果用完之后想删除该权限,则使用如下命令,从dialout用户组删除uxdb用户即可

gpasswd --del uxdb dialout

注意:添加和删除用户组都必须以root身份来执行,另外此方法也有一个弊端,就是添加或删除完成后必须logoff(注销),re-login(重新登录)才可生效

以root身份执行一条命令:

su root -c "gpasswd --add uxdb dialout"

添加串口设备访问规则脚本:

add_udev_rules.sh

#!/bin/bash  
 
#################################################################  
#  
# 添加普通用户访问串口设备的规则,使普通用户可正常访问串口设备  
# 注意:此方法会让所有的普通用户都具有访问这些串口设备的权限,  
#       存在一定的安全隐患  
 
function add_rules() {  
        if [ $1 -eq 1 ]; then  
                su - root -c 'echo KERNEL==\"ttyUSB[0-9]*\",MODE=\"0666\" >> /etc/udev/rules.d/70-ttyusb.rules'  
        else  
                su - root -c 'echo KERNEL==\"ttyUSB[0-9]*\",MODE=\"0666\" > /etc/udev/rules.d/70-ttyusb.rules'  
        fi  
}  
 
function start_to_add() {  
        while : ;  
        do  
                add_rules $1  
                if [ $? -eq 0 ]; then  
                        exit  
                fi  
        done  
}  
 
function ready_to_add() {  
        if [ -e /etc/udev/rules.d/70-ttyusb.rules ]; then  
                rules=`grep "KERNEL==.*ttyUSB*.*MODE=.*0666" /etc/udev/rules.d/70-ttyusb.rules`  
                if [ $rules ]; then  
                        exit  
                fi  
                start_to_add 1  
        else  
                start_to_add 2  
        fi  
}  
ready_to_add  

添加用户组脚本:

add_groups.sh

#!/bin/bash

#################################################################  
#  
# 添加uxdb用户至dialout组
#

function add_groups() {
        echo "Please enter root password for adding user uxdb to group dialout"
        num=3
        while (( $num>0 ))
        do
                su - root -c "gpasswd --add uxdb dialout"
                if [ $? -eq 0 ]; then
                        break
                fi
                let num--
        done
        echo "Notes:Please logoff and re-login to activate the send phone message function!"
}

function ready_to_add() {
        dialout_group=`groups uxdb|grep dialout`
        if [[ $dialout_group ]]; then
                exit
        fi
        add_groups
}
ready_to_add
---------------------  
作者:password-u  
来源:CSDN  
原文:https://blog.csdn.net/u013992330/article/details/79102741  
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值