在编写shell脚本时,其中的某些命令(但不是所有命令)都需要超级用户权限,我是否可以
在第二种方式中,我只需要提供一次密码,但是脚本中的所有命令都将以超级用户权限运行,包括那些不需要的命令。
在第一种方式中,我可能需要为不同的sudo命令多次提供我的密码,而超级用户特权只被授予那些需要它们的命令。
出于安全考虑,第一种方法更好。为了方便起见,第二种方法更好。
谢谢。
发布于 2018-11-01 05:23:44
为了解决你的第一个问题:
我如何编写“脚本将检测它是否以正确的权限运行,而根本不调用sudo”?
根有一个简单的POSIX检查:
#!/bin/sh
is_user_root ()
{
    [ "$(id -u)" -eq 0 ]
}或者,在Bash中,更多性能驱动的编码器可能希望使用:
#!/bin/bash
is_user_root ()
{
    [ "${EUID:-$(id -u)}" -eq 0 ]
}请注意,我有意将代码包装在函数中以供重用。
为了解决你的第二个问题:
如何改进它的安全性,以避免在使用sudo运行脚本时将超级用户权限授予不需要它们的命令的问题?
你不能对此做太多。至少我什么都没想过。如果我看到剧本,我可能会有建议。但既然你没有把它包括在你的问题里..。如果您使用sudo或root运行整个脚本,我看不出有什么办法控制它。
为了回应这一评论:
你认为“在它里面使用sudo与使用sudo运行它”怎么样?
在我的脚本中,我通常采用后一种方法,但这并不一定意味着我推荐给您。因为这取决于脚本是为谁设计的--只针对root;对于用户(除了一些拥有sudo权限的用户之外);您必须将脚本真正地包含在这个问题中,这样我才能用任何值来回答。
发布于 2018-11-01 07:16:58
我想我能回答这个问题。
所以我应该用第二种方式吗?
你没有理由在这里遇到问题,这就是为什么:
如果只有一个命令需要作为根用户运行,那么将您的程序作为run或sudo运行,因为脚本中的sudo是一条更长的路。Have你忘了程序员是懒惰的?
如果您需要许多命令,run作为root,然后以root或sudo的形式运行它。
如何改进它的安全性,以避免在使用sudo运行脚本时将超级用户权限授予不需要它们的命令的问题?
如果其他用户需要run您的程序,那么为这些用户设置sudo,因为sudo是大量可定制的,并将满足您的需求。
下面是sudo的一个示例:
编辑sudoers文件时始终使用visudo .
kate ALL=(ALL) NOPASSWD: /usr/local/bin/script ARG1 ARG2sudo对于改变程序/脚本中的用户也是很好的,下面是我的一个脚本中的一行:
sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'我如何编写“脚本将检测它是否以正确的权限运行,而根本不调用sudo”?
https://www.cyberciti.biz/tips/shell-root-user-check-script.html undefined
bash/sh:
#!/bin/bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ] 
then
        echo "I AM ROOT, HEAR ME ROAR"
ficsh:
#!/bin/csh
if ( `id -u` == "0" ) 
then
        echo "I AM ROOT, HEAR ME ROAR"
endif#!/bin/bash
if [[ $EUID -ne 0 ]]; then
  echo "You must be a root user" 2>&1
  exit 1
else
  mount /dev/sdb1 /mnt/disk2
fi应绅士@terdon的请求编辑:
把你的剧本想成这样。
它是一个公共脚本(其他人,而不是你将使用它),脚本是干什么的?它告诉你几点了吗?还是更新200个系统上的iptable?如果你只使用它,它是与工作/专业相关的,还是用于个人用途?
You只需事先知道您的用户组由什么组成,就是这样。
如果给或卖给管理员的是written,那么为什么不允许script作为root运行呢?会有什么害处呢?
真正的脚本/程序通常以特权用户的身份运行,没有人提到这没有问题,但是当程序员(主要是像我这样的新手)谈论这些事情时,这才是真正的安全威胁……在你的帖子中,你提到的那个人试图说的是,有些人看了控件,你的system和你的代码.您是否将文件设置为比您将要使用的权限更多的权限,您的逻辑中是否有所有的检查,还是有才华的程序员仅仅浏览一下代码就会看到危险?
如果您的code needs root,使用sudo,如果有很多只需运行它作为root..我的回答在这里结束
https://unix.stackexchange.com/questions/479055
复制相似问题